マクロ記録でVBA
計算式を入れる

Excelマクロの自動記録を使って、エクセルVBAの初心者向け入門解説
公開日:2013年5月以前 最終更新日:2013-02-18

第8回.計算式を入れる


前回までは、セルに文字を入れました。


エクセルは表計算ソフトですから、計算式を入れたいですよね。


今回からは、計算式を入れる方法、その値をコピーする方法等の説明になります。


では、以下のようなシートを作成して下さい。


Excel VBA 解説


いわゆる、100マス計算です。


数値は、手入力で良いでしょう。


自動で入れる場合は、どうするか分かりますか?


RAND関数で乱数を発生させて、その結果をRANK関数で1~10にします。


興味のある方はやってみてて下さい。



では、とりあえず、セルB2に回答となる計算式を入れてみましょう。


1.マクロの記録

2.B2を選択

3.=A2*B1

4.Enter

5.記録終了


できたマクロは、


Sub Macro1()
'
' Macro1 Macro
'

'
  Range("B2").Select
  ActiveCell.FormulaR1C1 = "=RC[-1]*R[-1]C"
  Range("B3").Select
End Sub


とにかく、消しこみして、みやすくしましょう。




Sub Macro1()

  Range("B2") = "=RC[-1]*R[-1]C"
End Sub


省略出来る所は、全て省略しました。


とにかく、問題は、


=RC[-1]*R[-1]C


ですよね。


Rは行を、Cは列を指します。


そして、[-1]は、


数式を入れるセルに対して、


Cの後ろなら、1列前、Rの後ろなら、1行上を指します。


1列後ろや、1行下なら、、[1]となります。


そして、何も指定しない場合は、数式を入れるセルと、同じ列や同じ行を指します。


つまり、B2に対して、


RC[-1]は、A2です。

R[-1]Cは、B1です。

R[-1]C[-1]なら、A1です。



この指定は分かりずらいですか、


シートに入力したままの数式でも入れる事が出来ます。


Range("B2") = "=A2*B1"


これでもOKです。


実行してみて下さい。


同じ結果になります。


ただし注意して欲しい事があります。


Range("B2").FormulaR1C1 = "=RC[-1]*R[-1]C"

これはOKですが、


Range("B2").FormulaR1C1 = "=A2*B1"

この指定はダメです。


この場合は、

Range("B2").Value = "=A2*B1"


と指定して下さい。


そうなんです、今まで、先延ばしにしてきた、


FormulaR1C1は、


R1C1形式の数式を入れるためのものなのです。


あっ、"=RC[-1]*R[-1]C"のような形式をR1C1形式と言います。


ただし、このFormulaR1C1は、数式以外でも入れる事が出来てしまい、


マクロの記録が、全てこのFormulaR1C1で記録しているだけなのです。



さて、本題です。


この100マス計算の答えの数式を、手でいれるとして、一発で入れられますか。


絶対参照と、相対参照を、ちゃんと理解しているかの問題ですね。


このシリーズはマクロなので、いきなりマクロの記録を行います。


1.マクロの記録

2.B2~K11をドラッグで選択

3.=$A2*B$1

4.Ctrl + Enter

5.記録終了


ポイントは、A列と1行を絶対参照、他を相対参照にするところですね。


できたマクロは、


Sub Macro2()
'
' Macro2 Macro
'

'
  Range("B2:K11").Select
  Selection.FormulaR1C1 = "=RC1*R1C"
  Range("F8").Select
End Sub


はい、恒例の消しこみをして、




Sub Macro2()

  Range("B2:K11").FormulaR1C1 = "=RC1*R1C"
End Sub


あえて、FormulaR1C1 を残しました。


つまり、R1C1形式で計算式を入れる時は、FormulaR1C1を指定することで分かり易くなります。


ですから、$A2*B$1と指定するのなら、


Range("B2:K11").Value = "=$A2*B$1"


のように、Valueを指定すると良いでしょう。



"=RC1*R1C"、"=$A2*B$1"


どちらを使用するかは、その時々になってしまいますが、


本来は、マクロの記録と同じく、R1C1形式が良いでしょう。


これは、RangeとCellsの関係と似ています。


つまり、Range("A2")と書くか、Cells(2, 1)と書くかの違いです。



上の例では、


複数セルに対し一括入力したので、自動で相対参照されましたが、


セルに1つずつ入れる場合は、


"=$A2*B$1"計算式ではダメな事は理解して頂けると思います。


しかし、


"=RC1*R1C"なら、どのセルに入れても、正しい計算式が入ります。



しかし、そもそも、マクロで計算式を入れるというのは、かなり限定的な使用方法になります。


計算式を入れるのなら、ワークシートに手入力で良い訳ですから。


むしろマクロでは、計算した結果をセルに入れる事の方が多いでしょう。



次回は、この計算式の入った100マスを、別シートにコピーしてみましょう。


前回までのコピーと同じなのでは・・・そう思いますか。


次回、実際にやってみましょう。


計算式をコピーするのか、計算された結果の数値をコピーするのか、


ここがポイントになります。





同じテーマ「マクロの記録でVBA」の記事

第5回.100マスに数値を入れる
第6回.別のシートにコピーする
第7回.別のシートにコピーする2
第8回.計算式を入れる
第9回.計算式をコピーする
第10回.計算結果を入れる
第11回.イミディエイトで値の確認
第12回.セルに色を塗る
第13回.罫線を引く
第14回.行列を入れ替えて貼り付け
第15回.いろいろな消去


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ