自分でどんどん勉強する方法は、どんどんマクロを記録して、生成されたプログラムコードを見ればいいのです。
では、A1とB1セルに 1 を投入して、C1 と C2 で[A1~B1]の合計を算出します(SUM関数)。
生成されたソースコードを見てみましょう。
以下のような内容になっていると予想されますね。
① [A1]=1
② [B1]=1
③ [C1]=sum[A1:B1]
④ [C2]=sum[A1:B1]
関係ない行は薄字にしてしまいます
Sub Macro1()
‘ Macro1 Macro
‘ マクロ記録日 : 2018/8/29 ユーザー名 : …………..
①
Range(“A1“).Select
ActiveCell.FormulaR1C1 = “1”
②
Range(“B1“).Select
ActiveCell.FormulaR1C1 = “1”
③
Range(“C1“).Select
ActiveCell.FormulaR1C1 = “=SUM(RC[-2]:RC[-1])”
④
Range(“C2“).Select
ActiveCell.FormulaR1C1 = “=SUM(R[-1]C[-2]:R[-1]C[-1])”
End Sub
A1=1が、コードになると糞面倒臭いことになってます。
でも、これがわかれば、強力な「AI 表計算」が手に入ったも同じです。
説明します。
自動スクリプトは R1C1 参照形式
FormuraR1C1をWEBで検索してもさっぱり意味がわかりません。
ここで、[メニュー] → [ツール] → [オプション] 設定画面を開いて、[全般]タブのR1C1 参照形式を使用するにチェックを入れると
通常のABC表示
D1はC1の内容を文字列で表示したものです。
D2はC2の内容を文字列で表示したものです。
R1C1形式表示
通常の列のABC表示が、123に変わります。
もちろんやっていることは同じですが、表示が変わっています。
D1はC1の内容を文字列で表示したものです。
D2はC2の内容を文字列で表示したものです。
R[-1]C[-2]というような表記が、ごちゃごちゃ見づらいですね、どんな意味でしょうか?
「参照形式」ではなくて「相対形式」と言えばいいのに
まず、RとCとは、RはROW(行)のこと、CはCOLUM(列)のこと。「カラム」といいますよね。
RC[-2]は、R[0]C[-2]の、[0] が省略されています。
RC[-2]は、アクティブセルから「-2列右へプラス」つまり「左へ2個」、R(列)方向は±0個
RC参照形式がわかったところでソースを詳しく見てみます。
VBA自動スクリプトソースコード
エクセルが作ったソースコードを自動SCRIPT(記述)ソースコードといったりします。
Sub Macro1()
Macro1という関数(サブ関数)は以下です。
( ) ・・・ 引数(ひきすう)はありません。
①
Range(“A1”).Select ’・・・・ セルのA1を選択します
ActiveCell.FormulaR1C1 = “1” ’・・・・・ アクティブセルのR1C1プロパティに”1”を代入
‘ActiveCell(A1)の中には、値、数式、罫線、フォント(色、大きさ)などなど、プロパティという色々なものが詰まっておりその中の一つがFormuraR1C1プロパティである。
cells(y,x).Formula
cells(y,x).FormulaR1C1
表示の違い
ちなみにR1C1参照形式(列が1,2,3のやつ)でも同じである
FormuraR1C1は数字、文字、数式を持つことができるようだ
100 数字の表示はvalueプロパティでもFormulaR1C1プロパティでもどちらもOK
”ABCD” 文字列の表示はvalueプロパティでもFormulaR1C1プロパティでもどちらもOK
数式の表示、FormulaプロパティでもFormulaR1C1プロパティでも数式が表示されるが、valueプロパティだと結果の 3 という数字が表示される。
Q>表示の仕方は分かった、VBAプログラミングでいつ使うの?
A>特に積極的に使うことはないらしい。
エクセルのAIのように、リアルタイムで動的にプログラムする場合には、相対的にということは必要だろうが、人間がプログラムする時は、セルを静的に扱えるだろうから(セル番地を決め打ちという意味)、必要ないということではないか?な?
Sub Macro1()
‘Dim i As Integer
‘↓ A1:B10に適当に数字を入れる
For i = 1 To 10
Cells(i, 1) = i + 1
Cells(i, 2) = i + 2
Next i
‘C列に合計を計算する(R1C1形式)
For i = 1 To 10
Cells(i, 3).FormulaR1C1 = “=RC[-2]+RC[-1]”
Next i
‘D列に合計を入れる(value形式)
For i = 1 To 10
Cells(i, 4).value = Cells(i, 1).value + Cells(i, 2).value
Next i
End Sub
cells形式のほうが、一目見て分かるので、R1C1を使う必要はない.。
valueは省略できるので、Cells(i, 4) = Cells(i, 1) + Cells(i, 2)とスッキリかける。
コメント