自動集計マクロの応用例 -横方向の集計-
ここでは、マクロで色々な自動集計をする場合の応用範囲を広げていくための勉強をします。
まず手始めにもっとも簡単な応用例として、横方向の集計
にトライしてみます。
それではまず、前回作成したエクセルマクロのファイル"gogo47.xls"を
ご用意ください。※前回をお持ちでない方は下記ダウンロードして
自己責任においてご利用ください。
マクロファイルのダウンロード
→ 「保存(S)」 → 「フォルダーを開く(P)」
1)
まずは、前回作ったマクロプログラムの確認です。
――――――――――――――――――――――――――+
1."gogo47.xls"を開きます。(セキュリティ確認画面が表示された
場合には、[マクロを有効にする]を選んでください。)
2.前回作成したマクロプログラムを表示します。
[ツール(T)] → [マクロ(M)] → [Visual Basic Editor(V)]
――――――――――――――――――――――――――+
+++++++++++++++++++++―
Sub Macro1()
'
n = Cells(Rows.Count, "A").End(xlUp).Row - 2
t = 0
s = 0
For i = 2 To n
Cells(i, 1).Select
a = ActiveCell.Value
Cells(i, 2).Select
b = ActiveCell.Value
If a = "田中" Then
t = t + b
ElseIf a = "鈴木" Then
s = s + b
End If
Next i
Cells(n + 1, 1).Select
ActiveCell.FormulaR1C1 = "田中の合計"
Cells(n + 1, 2).Select
ActiveCell.FormulaR1C1 = t
Cells(n + 2, 1).Select
ActiveCell.FormulaR1C1 = "鈴木の合計"
Cells(n + 2, 2).Select
ActiveCell.FormulaR1C1 = s
End Sub
+++++++++++++++++++++―
簡単におさらいしておきますと、
これは、下記のような営業マン別の販売数の合計を出すという簡単な集計が
できるマクロプログラムでした。
営業マン 販売数
田中 5
鈴木 3
田中 4
鈴木 1
田中の合計 9
鈴木の合計 4
2)
それでは、プログラムをちょっと修正してみます。
――――――――――――――――――――――――――+
1.まず、このプログラムの中にいくつもある「Cells(*, *).Select」
のカッコの中のカンマの前後の中身をすべて入れ替えます。
例えば、
Cells(i, 1).Select → Cells(1, i).Select
Cells(n + 1, 2).Select → Cells(2, n + 1).Select
の様にして、すべてを(6箇所あります)入れ替えてください。
2.次に、プログラムの最初の行
n = Cells(Rows.Count, "A").End(xlUp).Row - 2
を次の1行に修正してください。
n = Cells(1, 1).End(xlToRight).Column - 2
(今回の修正でちょっと難しいのはここだけです。)
3.最後に、いま修正した行の語尾の - 2 はとりあえず削除して
n = Cells(1, 1).End(xlToRight).Column
に修正してください。
――――――――――――――――――――――――――+
修正した後のプログラムはつぎの様になります。
+++++++++++++++++++++―
Sub Macro1()
'
n = Cells(1, 1).End(xlToRight).Column
t = 0
s = 0
For i = 2 To n
Cells(1, i).Select
a = ActiveCell.Value
Cells(2, i).Select
b = ActiveCell.Value
If a = "田中" Then
t = t + b
ElseIf a = "鈴木" Then
s = s + b
End If
Next i
Cells(1, n + 1).Select
ActiveCell.FormulaR1C1 = "田中合計"
Cells(2, n + 1).Select
ActiveCell.FormulaR1C1 = t
Cells(1, n + 2).Select
ActiveCell.FormulaR1C1 = "鈴木合計"
Cells(2, n + 2).Select
ActiveCell.FormulaR1C1 = s
End Sub
++++++++++++++++++++―
この修正について簡単に説明していきますと、
まず、少々難しそうな 2. の修正についてですが、修正前の
n = Cells(Rows.Count, "A").End(xlUp).Row
というのは、もう何度か説明しているように、A列の最後の行の行番号を
取得するための1行ですので、修正後の
n = Cells(1, 1).End(xlToRight).Column
というのは、1行目の横方向に進んだ場合の最後の列番号を取得するため
のものです。
ちょっと難しそうに見えますが、もし、2行目の最後の列番号を取得したい
のなら、Cellsの次のカッコの中をCells(2, 1)に、3行目なら Cells(3, 1)
にすればよいという事だけ覚えておいていただければ十分です。
戻って、 1. の修正は縦方向に集計するプログラムを横方向に集計するプロ
グラムに変えるには、ただ単純に「Cells(*, *).Select」のカッコの中の
カンマの前後を入れ替えればよいということが、今回の最大のミソです。
こんな単純な修正で、縦集計が横集計のプログラムに改造できたのかなぁ
と、思う方もいらっしゃるのではないでしょうか?
それでは、実際に実行して確かめてみます。
――――――――――――――――――――――――――+
1.エクセルの画面に戻って、新しく空のシート[Sheet5]を作成して
ください。
[挿入(I)] → [ワークシート(W)]
2.次のような横方向の表を(A1のセルが営業マンになるように)手で
打ってください。(数字は適当な数に変えても構いません。)
営業マン 田中 鈴木 田中 鈴木
販売数 5 3 4 1
3.打ち終わったら一度[Enter]キーを押してから、
[ツール(T)] → [マクロ(M)] → [マクロ(M)...] → マクロ画面が
出るので そのまま[実行]をクリック。
――――――――――――――――――――――――――+
実行した結果、おのおの正しい合計値が表示されていればOKです。
こんなに簡単な修正で、見事に横方向に集計するプログラムができましたね。
NEXT >>
・自動印刷するマクロの作り方
・For文とDo文の使い分けについて