Excelを日常的に使っていると、「この関数をセルに自動で入力できたら便利なのに」と思う場面が少なくありません。特に業務で大量のデータを扱う場合や、同じ処理を繰り返す場合には、VBAを使ってセルに関数を入力することで効率が大幅にアップします。
本記事では、ExcelVBAを使ってセルに関数を入力する方法を、基本から応用までわかりやすく解説します。初心者でも理解できるようにサンプルコードを交えながら進めていきますので、ぜひ最後までご覧ください。
Excelでは、セルに直接数式を打ち込むことができます。たとえば「=SUM(A1:A10)」と入力すれば合計が出せますよね。
VBAを使うと、この「セルに数式を入力する」という作業を自動化することができます。具体的には以下のようなコードで可能です。
Sub 関数入力例()
Range("B1").Formula = "=SUM(A1:A10)"
End Sub
このコードを実行すると、B1セルに「=SUM(A1:A10)」が自動的に入力されます。つまり、VBAからセルに関数を入力するとは、セルに「文字列として数式を代入する」という仕組みなのです。
セルに数式を入力する際に使うのが、FormulaプロパティとFormulaR1C1プロパティです。
こちらは通常の「A1形式」で数式を入力する方法です。
例:
Range("C1").Formula = "=AVERAGE(A1:A10)"
この場合、セルC1に「=AVERAGE(A1:A10)」が入力されます。
もうひとつ便利なのが「R1C1形式」です。
例:
Range("C1").FormulaR1C1 = "=SUM(R1C1:R10C1)"
これは「A1:A10」をR1C1形式で書いた例です。RはRow(行)、CはColumn(列)を意味し、数字で位置を表します。相対参照も可能なので、大量の処理を自動化する際に便利です。
実務でよく使う関数を、VBAでセルに入力するコードをいくつか紹介します。
Range("B1").Formula = "=SUM(A1:A10)"
B1セルにA1~A10の合計を入力します。
Range("B2").Formula = "=AVERAGE(A1:A10)"
平均値を求めるコードです。
Range("B3").Formula = "=IF(A1>=60,""合格"",""不合格"")"
A1セルの値が60以上なら「合格」、それ以外なら「不合格」と表示します。
Range("B4").Formula = "=VLOOKUP(A1, D1:E10, 2, FALSE)"
A1の値を検索して、該当するD1:E10の範囲から2列目の値を返します。
Range("B5").Formula = "=TODAY()"
今日の日付を表示します。
1つのセルだけでなく、範囲に対して一気に数式を入力することもできます。
Range("B1:B10").Formula = "=SUM(A1:A10)"
この場合、B1からB10まで同じ数式が入力されます。ただし注意点として、同じ数式がそのまま入力されるため、相対参照が効かない場合があります。その場合はFormulaR1C1を使うのがおすすめです。
Sub 動的入力()
Dim 行数 As Integer
行数 = 20
Range("B1").Formula = "=SUM(A1:A" & 行数 & ")"
End Sub
このように変数を使えば、データの行数が変わっても対応できます。
Range("A1").Offset(0, 1).Formula = "=SUM(A1:A10)"
A1から右に1列ずらしたセル(B1)に関数を入力する例です。
Sub ループ入力()
Dim i As Integer
For i = 1 To 10
Cells(i, 2).Formula = "=IF(A" & i & ">=60,""合格"",""不合格"")"
Next i
End Sub
このコードを実行すると、B1~B10までにIF関数が自動で入力されます。
初心者におすすめなのが「マクロの記録」を使う方法です。Excelには操作をそのままVBAコードに変換してくれる機能があり、セルに関数を入力する作業を記録すると自動的にVBAコードが生成されます。
例:セルに=SUM(A1:A10)
を入力してマクロ記録を確認すると、以下のようなコードが出てきます。
ActiveCell.FormulaR1C1 = "=SUM(R1C1:R10C1)"
これを参考に自分のコードに取り入れると理解が深まります。
VBAでセルに関数を入力する際、よくあるエラーも知っておきましょう。
"=SUM(A1:A10)"
のように、文字列として正しく書かないとエラーになります。$A$1
のような絶対参照はそのまま書けますが、相対参照を大量に扱う場合はFormulaR1C1を使うのがおすすめです。こうした処理をVBAで関数入力すれば、日常業務が効率化できます。
ExcelVBAを使えば、セルに関数を自動入力することができます。
日常業務を効率化するために、今回紹介した方法をぜひ試してみてください。VBAでセルに関数を入力するテクニックは、一度覚えると様々なシーンで役立つ強力な武器になります。