- ベストアンサー
エクセルでマクロを使った同一処理を列方向に繰返す方法
- VBAを使用して、エクセルでマクロを使った同一処理を列方向に繰り返す方法について説明します。
- 具体的には、添付図の表でB2店について品名・数量・金額を、4行目~10行目まで、金額の多い順に並べ替え、金額の合計をセルD2に記入するマクロを実装する方法を解説します。
- さらに、この処理をE5店、H8店……と3列ずつ例えば20ブロック処理するプログラムについても説明します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは! せっかくNo.2さんがヒントを出してくださっているので、 余計なお世話かもしれませんが・・・ Sub 並び替え() Dim j As Long For j = 2 To Cells(3, Columns.Count).End(xlToLeft).Column Step 3 With Cells(3, j) .Resize(8, 3).Sort key1:=.Offset(, 2), order1:=xlDescending, Header:=xlYes .Offset(-1, 2) = WorksheetFunction.Sum(.Offset(1, 2).Resize(7)) End With Next j End Sub こんな感じではどうでしょうか?m(_ _)m
その他の回答 (2)
- hallo-2007
- ベストアンサー率41% (888/2115)
マクロの記録で得られたコードだと思いますが、 Range("B3:D10").Select をCellsを使って同じことをさせると Range(Cells(3, 2), Cells(10, 4)).Select Range("D4")は Cells(2, 4) Range("D2").Select はCells(2,4).Select と使ってできます。 試しに Sub Test() For i = 2 To 32 Step 3 Range(Cells(3, i), Cells(10, i + 2)).Select MsgBox "選択位置の変更" Next End Sub を試してみてください。今のコードをどうのようにすれば良いか 参考にしてみてください。
お礼
早速にお答え有難うございます。 試してみました。なるほどMsgBox "選択位置の変更"がはいっているので ステップがつかめました。活用させていただきたいと思います。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
RangeをCellsにして For~next を使ってみた Sub 多い順と合計2() Dim n As Long For n = 0 To 57 Step 3 Range(Cells(3, 2 + n), Cells(10, 4 + n)).Sort Key1:=Cells(4, 4 + n), Order1:=xlDescending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin Cells(2, 4 + n).FormulaR1C1 = "=SUM(R[2]C:R[18]C)" Next n End Sub
お礼
早速に回答有難うございます。 試してみましたら、一瞬で目的としていたことができました。 まだ式は全ては読みきっていないので、後でしっかり理解したいと思います。
お礼
お答え有難うございます。 ともかく試させていただきました。すっきりです。 読み解くのにまだ勉強しなければいけないところがありますが 今回実際に直面しているのは、1ブロックあたりのマクロ処理がもっと 長いのですが、いただいた式で、セルの表現をきちっとおさえて適用 しようと思います。助かりました。