1/23/2018

Excel。マクロ020。小計行を挿入する時に注意しないといけない点

Excel。マクロ020。小計行を挿入する時に注意しないといけない点

<VBA>

Excel VBAを少し知っているだけで、時短になるし、
便利で快適になると思って入る人は多いのですが、
ハードルが高いと感じている事務職の方も多いようですね。

けど、それほど多くの構文(プログラム文)を書かなくても、
結構使えるExcel VBAはたくさんありますので、
今回は、小計行を挿入するExcel VBAを考えてみましょう。

次のような表があります。


四半期の小計行を挿入しようとすると、
行を挿入して、”小計”という文字を入力して、
SUM関数を使って範囲選択して合計を算出する作業が必要になります。

なかなか、面倒ですので、ここはExcel VBAの出番ですね。

ただ、少し注意しないといけないところがありますので、
確認しながら作成してみましょう。

Excel VBAの構文を、このように作ってみました。

Sub 四半期行挿入()
    Dim i As Integer
    For i = 5 To 13 Step 4
        Rows(i).Insert
        Cells(i, "a").Value = "小計"
        Cells(i, "a").Interior.ThemeColor = xlThemeColorAccent6
        Cells(i, "b").Formula = "=sum(b" & i - 3 & ":b" & i - 1 & ")"
    Next
End Sub

構文を説明してみると、
Dim i As Integer
お馴染み、変数宣言ですね。整数型のIntegerを使って、変数iを用意しました。

For i = 5 To 13 Step 4 ~ Next
繰り返し処理をするための構造ですね。

5~13までStep 4、
つまり4行分加算しながら繰り返すということを行います。

Rows(i).Insert
これは行を挿入する処理をします。
Rows(i)なので、iが5ならば、Rows(5)なので5行目という意味になります。

Cells(i, "a").Value = "小計"
iが5の場合は、A5に小計という文字を入力します。

Cells(i, "a").Interior.ThemeColor = xlThemeColorAccent6
Interiorはセルを塗りつぶす処理をします。

そして、何色で塗りつぶすのか?というと、
ThemeColor = xlThemeColorAccent6

テーマの色の、アクセント6を使用しますという意味です。

これで、小計を入力した文字のセルに色を塗りつぶすことが出来ます。

Cells(i, "b").Formula = "=sum(b" & i - 3 & ":b" & i - 1 & ")"
iが5の場合は、B5に、Formula。つまり次の計算式を設定します。

その設定する計算式は、
“=sum(b" & i - 3 & ":b" & i - 1 & ")"
「&」で結合されているのでわかりにくいので、「&」を抜いてみると、
=sum(b2:b4)
という数式をB5に設定するという意味がわかります。

では、実行してみましょう。

小計行が挿入されて塗りつぶしもされて、
B列にも合計値が算出されているので、
完成しましたと言いたいところなのですが、12月の下に、小計行がありませんね。

ここが、今回のExcel VBAで少し注意しないといけない、
「ワナ」なんですね。

ポイントは、この行にあります。

For i = 5 To 13 Step 4
5行目から13行目までを処理するということなのですが、
行が挿入されてしまうので、最終行が13行目ではなくなってしまうのです。

なので、最終行を4プラスして、
17にすれば、12月の下の行に挿入することが出来るのですが、
イチイチ考えるのが大変ですね。

仮に、一行置きに挿入するとした場合、
何行増えるのかをデータのボリュームも含めて考えないといけません。

そこで、行を最終行から減らしていくようにすれば、わかりやすくなります。

では、構文をこのように変更してみましょう。
Sub 四半期行挿入後ろから()
    Dim i As Integer
    For i = 14 To 5 Step -3
        Rows(i).Insert
        Cells(i, "a").Value = "小計"
        Cells(i, "a").Interior.ThemeColor = xlThemeColorAccent6
        Cells(i, "b").Formula = "=sum(b" & i - 3 & ":b" & i - 1 & ")"
    Next
End Sub

変更したところは、
For i = 14 To 5 Step -3
14行目から5行目まで3行分減算していきながら繰り返す処理をさせます。

では、実行してみましょう。


このように、四半期ごとに小計行を挿入することが出来ましたね。

Excel VBAで行を挿入する場合には、
For To Nextは減算させると便利と覚えておくといいかもしれませんね。