ExcelVBA シートに自動的に計算式|関数を埋め込みして効率化する方法

 

ExcelVBA シートに 自動的に計算式(関数)を埋め込む ことで、手作業を減らし、効率化・ミス防止につながります。使い方や注意点など、サンプルコードをもとに具体的に解説します。

 

2025年の目標は繰り返し作業に悩まされない年にしませんか? Excel VBAを活用した効率化がその第一歩
本サイト参考:Excel VBAで自動化するコードのベースを習得したい方におすすめの記事

 

Excel VBA  自動的に計算式(関数)を埋め込む|シーン

以下のシーンで利用します。

1.売上集計シートで合計や平均を自動設定

2.価格表に税率を考慮した計算を自動挿入

3.動的なデータ範囲に対して計算式を適用

 

Excel VBA 自動的に計算式(関数)を埋め込むサンプルコード

Excel VBAで効率化の準備をしてみませんか?2025年をよりスムーズに過ごすための資格
基本的な文法やVBAの実践的な応用までを網羅的に学習できる方法は、ExcelVBAエキスパート資格の取得を目指すこと。学習を通して、より効率的に、着実に基礎を身につけることが可能です。資格取得すれば、スキルの証明にもなり、職場での評価アップにも繋がるため、勉強を進めるモチベーションにもなります。
本サイト参考:マクロ知識がないから「何から学べば良いのかわからない」という人におすすめの記事

計算式の埋め込み方法

方法 説明
.Formula 数式をA1形式で設定(標準)
.FormulaR1C1 数式をR1C1形式で設定(相対参照向き)

 

基本的な計算式の埋め込み

標準モジュール

Option Explicit

Sub 計算式を埋め込む_基本()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' B2セルに A2 + A3 の計算式を入れる
    ws.Range("B2").Formula = "=A2+A3"
    
    ' C2セルに SUM(A2:A10) の計算式を入れる
    ws.Range("C2").Formula = "=SUM(A2:A10)"
    
    ' D2セルに A2 * 1.1 (税率計算) を入れる
    ws.Range("D2").Formula = "=A2*1.1"
End Sub

.Formula を使うと、通常のExcelの数式(A1形式) をそのまま記述できる。

=SUM(A2:A10) のように、Excelの関数も適用可能

R1C1形式を使った計算式の埋め込み

標準モジュール

Option Explicit

Sub 計算式を埋め込む_R1C1()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' B2セルに A2 + A3 の計算式をR1C1形式で入れる
    ws.Range("B2").FormulaR1C1 = "=R2C1+R3C1"
    
    ' C2セルに SUM(A2:A10) の計算式をR1C1形式で入れる
    ws.Range("C2").FormulaR1C1 = "=SUM(R2C1:R10C1)"
    
    ' D2セルに A2 * 1.1 (税率計算) をR1C1形式で入れる
    ws.Range("D2").FormulaR1C1 = "=R2C1*1.1"
End Sub

.FormulaR1C1 を使うと、行・列番号を使ったR1C1形式で数式を指定できる。

R2C1 は **"2行1列目のセル(A2)"** を指す

複数行に一括で計算式を適用

標準モジュール

Option Explicit

Sub 計算式を一括適用()
    Dim ws As Worksheet
    Dim rng As Range
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set rng = ws.Range("B2:B10") ' B2~B10 に計算式を設定
    
    ' 各行で "A列の値 × 1.1" を計算
    rng.Formula = "=A2*1.1"
End Sub

 B2:B10 の範囲に まとめて数式を埋め込む。

=A2*1.1 を適用すると、B3には `=A3*1.1` という数式が自動的に入る。

最終行まで動的に計算式を適用

標準モジュール

Option Explicit

Sub 最終行まで計算式を埋め込む()
    Dim ws As Worksheet
    Dim lastRow As Long
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' A列の最終行を取得
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' B2~B(最終行) に "A列の値 × 1.1" の数式を設定
    ws.Range("B2:B" & lastRow).Formula = "=A2*1.1"
End Sub

Cells(Rows.Count, "A").End(xlUp).Row で A列の最終行を取得

データの長さに応じて数式を適用 できるので、手動で範囲を指定する必要がない。

計算結果を値として貼り付け

標準モジュール

Option Explicit

Sub 計算結果を値として貼り付け()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' B2~B10に数式を設定
    ws.Range("B2:B10").Formula = "=A2*1.1"
    
    ' 数式を値に変換
    ws.Range("B2:B10").Value = ws.Range("B2:B10").Value
End Sub

.Value = .Value を使うと 計算結果だけを残せる。

数式を消しても、計算結果は維持される。

数式を設定するときの注意点
・ ダブルクォーテーションに注意 → VBA内の数式は =SUM(A1:A10) のように 文字列 として扱う。

・ Formula は A1形式、 FormulaR1C1 は R1C1形式 を使用

・ 数式を直接入力する場合、Excelで正しく動くか確認 してからVBAに組み込む。

値として貼り付けるときの注意点
・ .Value = .Value を適用すると 元の数式は消える。

・ 数式を保持したい場合は、元データを別シートにコピーするなどの対策が必要

Excel VBA 自動的に計算式(関数)を埋め込む|まとめ

・数式を埋め込むには .Formula (A1形式)と .FormulaR1C1 (R1C1形式)を使う。

・複数行への一括適用も可能(Rangeオブジェクトを活用)

・最終行まで自動適用する場合は End(xlUp).Row を使う。

・計算後に数式を削除し、値だけを残す場合は .Value = .Value を活用

 

Excel VBAで自動化するコードのベースを習得したい方におすすめ!

VBAエキスパート資格は、日常業務でExcelを多用し、手動作業を減らしたいと考えている方には価値あるものです。

ExcelVBAエキスパートベーシック
仕事の効率をあげるためにExcelVBAを利用する人が対象の問題集です。


ExcelVBAエキスパートスタンダード

ExcelVBAの開発を仕事にする人が対象の問題集です。

 

Excel  VBA エキスパート資格について知りたい方は、下記「Excel VBAスキルアップを目指すなら知っておきたいVBAエキスパート」をご確認ください。