VBAマクロで自動的に関数を挿入する
Excelで表を作っていると合計の項目を追加することはよくあると思います。
仮にルーチン作業で表に合計の項目を追加していくことは
大変面倒ですしVBAマクロを使って自動的にSUM関数を挿入できるように改善しましょう。
サンプルコード 1
Sub SUM_INSERT()
Dim mySheetName() As String
Worksheets(mySheetName(j)).Range("F3").NumberFormatLocal = "G/標準"
Worksheets(mySheetName(j)).Range("F3").Value = "=SUM(B3:E3)"
Worksheets(mySheetName(j)).Range("F3").Copy Worksheets(mySheetName(j)).Range("F4:F20")
MsgBox "処理が終了しました"
End Sub
解説
コードとしてはたったこれだけです。
例として、各行のB列からE列まで値が入った表があり、F列に合計の項目を追加するとします。
それを実現するためにセル「F3」からセル「F20」までSUM関数を挿入するようにしています。
詳しく説明するとセル「F3」にB列からE列までの合計を求めるSUM関数を入れ込みます。
(「Worksheets(mySheetName(j)).Range(“F3”).Value = “=SUM(B3:E3)”」の部分)
関数を入れ込むときは文字列として記述しますので、ダブルクォーテーションで囲い、先頭の=(イコール)を忘れずにつけましょう。
また入れ込む前に念のため、表示形式を”G/標準”に指定しています。
(「NumberFormatLocal = “G/標準”」の部分)
あとはセル「F3」をコピーして、残りのセル「F4」から「F20」までの範囲に貼り付けています。
(「Worksheets(mySheetName(j)).Range(“F3”).Copy Worksheets(mySheetName(j)).Range(“F4:F20”)」)
範囲の指定は「Range()」を使います。
このほかにも、各シートに対して実行したり、値が入っている範囲を自動で判別してより汎用的に仕上げることもできます。
後述の「サンプルコード 2」を見てください。
サンプルコード 2
Sub SUM_INSERT2()
Dim i As Long
Dim mySheetCnt As Long
Dim mySheetName() As String
mySheetCnt = ActiveWorkbook.Sheets.Count
ReDim mySheetName(1 To mySheetCnt)
For i = 1 To mySheetCnt
mySheetName(i) = Sheets(i).Name
Next i
Dim j As Long
For j = 1 To UBound(mySheetName)
Worksheets(mySheetName(j)).Range("F3").NumberFormatLocal = "G/標準"
Worksheets(mySheetName(j)).Range("F3").Value = "=SUM(B3:E3)"
Worksheets(mySheetName(j)).Range("F3").Copy Worksheets(mySheetName(j)).Range("F4:F20")
Next
MsgBox "処理が終了しました"
End Sub
解説
上記のコードではBook内の全てのシートに対してSUM関数を挿入します。
詳しく説明すると、「mySheetCnt = ActiveWorkbook.Sheets.Count」でシート数を取得して、配列にすべてのシートのシート名を一旦格納しています。
その後、シート名を格納した配列を再度For文でループ処理して、すべてのシートに対して、関数を入れ込む操作をしているわけです。
今回はSUM関数を挿入しました。
もちろんSUM関数以外にもMAX関数やAVERAGE関数を挿入することも可能です。
サンプルコードの例のように「=(関数名)」といった具合で指定すれば、様々な関数を挿入することができます。
このようにVBAでいろんなことができますので、特にルーチン作業になっている作業は簡素化して効率よく作業ができるようにしましょう!
また今後もExcelやVBAについてお役立ち情報などご紹介していきたいと思います!!
以上、「【Excel VBA】マクロで自動的に関数を挿入する」でした。