第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 ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
- ホーム
- マクロVBA入門編
- マクロの記録でVBA
- 計算式を入れる
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。