第8回.計算式を入れる
前回までは、セルに文字を入れました。
エクセルは表計算ソフトですから、計算式を入れたいですよね。
今回からは、計算式を入れる方法、その値をコピーする方法等の説明になります。
では、以下のようなシートを作成して下さい。
数値は、手入力で良いでしょう。
自動で入れる場合は、どうするか分かりますか?
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 ・・・新着記事一覧を見る
シート関数のCOUNTIFS,SUMIFS,MAXIFSと同じ処理|Power Query(M言語)入門(2023-02-28)
新旧マスタの差異比較|Power Query(M言語)入門(2023-02-28)
有効な最新単価の取得|Power Query(M言語)入門(2023-02-26)
有効な最新単価の取得|Power Query(M言語)入門(2023-02-21)
グルーブ内の最小・最大|Power Query(M言語)入門(2023-02-17)
2つのテーブルのマージ|Power Query(M言語)入門(2023-02-15)
「売上」が数値の行のみ取り込む|Power Query(M言語)入門(2023-02-13)
A列のヘッダー名を変更する|Power Query(M言語)入門(2023-02-11)
CSVのA列が日付の行だけを取り込む|Power Query(M言語)入門(2023-02-10)
列数不定のCSVの取り込み|Power Query(M言語)入門(2023-02-09)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.マクロって何?VBAって何?|VBA入門
7.並べ替え(Sort)|VBA入門
8.エクセルVBAでのシート指定方法|VBA技術解説
9.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
10.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
- ホーム
- マクロVBA入門編
- マクロの記録でVBA
- 計算式を入れる
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。