- ベストアンサー
エクセル VBAで複数セルの並べ替えを楽にする方法
- エクセルで複数セルの並べ替えをVBAを使用して簡単に行う方法を教えてください。部品数量や単価の統一、並び替えを手作業で行うのに時間がかかって困っています。
- 取引先からのデータを集計する際に、部品数量を全て1に統一し、複数個あるデータを横に並べたいと考えています。また、その後は部品単価の高い順にデータを並び替えたいです。手動で行うのは非常に時間がかかるため、VBAを使用して効率的に処理したいです。
- VBAがほとんど分からないため、マクロのレコーディングを使用して変更を行っていますが、うまく解決できません。このデータの変更は数時間かかるため、自動化したいと考えています。どなたか知識のある方がいらっしゃいましたら、助けていただけないでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
では遅いですが簡単なマクロで。 Sub Macro1() Dim r As Long Dim c As Long Dim n As Long Dim w As Worksheet Dim wx As Worksheet ’準備 Set w = ActiveSheet Set wx = Worksheets.Add(before:=w) ’1行ずつ For r = 2 To w.Range("A65536").End(xlUp).Row wx.Cells.ClearContents ’転記する For c = 1 To w.Range("IV" & r).End(xlToLeft).Column Step 4 w.Cells(r, c).Resize(1, 4).Copy For n = 1 To w.Cells(r, c + 2) wx.Range("A65536").End(xlUp).Offset(1).PasteSpecial Next n Next c ’降順に並べ替える n = wx.Range("A65536").End(xlUp).Row wx.Range("A2:D" & n).Sort key1:=wx.Range("D2"), order1:=xlDescending, header:=xlNo wx.Range("C2:C" & n) = 1 ’転記する For c = 2 To wx.Range("A65536").End(xlUp).Row wx.Cells(c, "A").Resize(1, 4).Copy w.Cells(r, (c - 2) * 4 + 1) Next c Next r ’片づける Application.DisplayAlerts = False wx.Delete Application.DisplayAlerts = True End Sub 目的のシートを開いてマクロを実行する。
その他の回答 (2)
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No1です。単価の体ものを上に並べるのでしたね。 それでしたらシート1でA列からD列までを選択してから「ホーム」タブの「並べ替え」をクリックして「ユーザー設定の並べ替え」を選択します。 最優先されるキーにはD1セルの文字を選択し、順序を「降順」にしてOKすればよいでしょう。 その他の操作は回答1のとおりです。
お礼
並び替えしましたが行が変わってしまいます。 同じ行の中で並び替えしたかったです。 が、これもまたひとついい勉強になりました。ありがとうございます。
- KURUMITO
- ベストアンサー率42% (1835/4283)
マクロですることのメリットはほとんどないでしょう。関数で十分に対応できます。 例えばシート1のAからD列で2行目から下方にデータが並んでいるとします。 シート2の2行目からお求めの表を作成するとしてA2セルには次の式を入力して120列(DP2)まで右横にドラッグコピーします。 =IF(OR(ROW(A1)>COUNTA(Sheet1!$A$2:$A$12000),COLUMN(A1)>INDEX(Sheet1!$C:$C,ROW(A2))*4),"",IF(MOD(COLUMN(A1)-1,4)+1<>3,INDEX(Sheet1!$A:$D,ROW(A2),MOD(COLUMN(A1)-1,4)+1),1)) そのドラッグした範囲を選択してから右クリックしてコピーします。 名前ボックスにはA2と表示されていることでしょうが、その窓を書き変えてA2:DP12000のようにします。確定すればその範囲が選択されますのでA2セルの場所で右クリックして「貼り付け」を行います。 これで操作は終了です。
お礼
早速のご回答ありがとうございます。 教えていただいた方法でやってみて、Sheet1のA-DにあるデータでCの数が2以上のものはSheet2のEから後にその差数分出てくるのですが、その後のデータ(Sheet1のE以降)のデータが出てきません。また、Sheet1のCが1のものもE以降のデータが出てきません・・・ 難しいですね、この関数も私にとっては・・・
お礼
できました、これです!!!! これで簡単なんですか?すごいですね。 本当にありがとうございました。これでかなり時間を短縮することができます。 私もいつかはこんなマクロをちょろっと組めるようになりたいです。