「数式を入力する」マクロの書き方を説明する前に、「数式を入力する」動作をマクロに記録した場合を見てみましょう。 下記はアクティブなセルに「=B5」と言うセル参照式を入力する動作を記録したものです。 |
ActiveCell.FormulaR1C1 = "=R[4]C[1]" |
---|
「アクティブセルのFormulaR1C1プロパティに"=R[4]C[1]"を代入する」と言う意味になります。
ここで不思議に思う人が多いのは、"=B5"と入力したのに"=R[4]C[1]"になってしまっている事でしょう。なぜこのような記録のされ方をするのでしょうか。 数式を入力する際に良く使われるFormulaR1C1プロパティとFormulaプロパティを比較してみましょう。 |
セルの中に数式を入力する動作を記録するとFormulaR1C1プロパティが適用されます。 つまり、数式がR1C1形式で表現されます。 これは、以前は主流だったR1C1形式のセル参照の名残だともいえますが、相対参照の数式を記録する際にはR1C1形式での記述が有効なせいでもあります。 普段EXCELでA1形式を見なれている人には少し見にくいかもしれません。 |
||||||||||
R1C1のR、Cはそれぞれ R = Row(行) 、C = Column(列)の略です。つまり、「セルA1をR1C1と表現する」形式です。 通常EXCELで使用するA1形式とは列と行を表現する順番が逆になります。 また、同じセルを表現するにもA1形式とはだいぶ違った書き方になります。 下記表はマクロコードとそれを実行したときの実際にセルに入力される数式の対比です。
|
||||||||||
相対参照式を入力する場合は[ ]で囲まれた数値で入力するセルからの列、行の相対位置が表現されます。「R[4]C[1]」の場合は「(A1から)4行下1列右」のセルと言うことです。
マクロ実行時に選択したセルが違ってくると、相対参照式が入力されるので「(選択セルから)4行下1列右」のセルを参照する数式が入力されます。 絶対参照式を入力する「R5C2」の場合は「(ワークシートの)5行目の2列目」であり、これは入力したセルによって変化することはありません。 |
セルに数式を入力するには通常セルのFormulaプロパティに文字列としての数式を代入します。 Formulaプロパティは値の取得、代入が可能です。 また、Formulaプロパティは「数式バー」に表示される状態を表現しています。 参照式「=B5」を選択セルへ入力するには次のように記述します。 |
Selection.Formula = "=B5" |
---|
また次のように記述しても同じ結果になります。 |
Selection = "=B5" Selection.Value = "=B5" |
この場合、Formulaプロパティを省略した場合は暗黙的にFormulaプロパティに代入されるわけです。 また、Valueプロパティに代入することによっても同じ結果が得られます。 |
一見、FormulaプロパティとFormulaR1C1プロパティは同じ動作を違った記述の仕方で行っているように見えますが、では、実際にはどのような場合に使い分けをするのでしょう? 下の2つのマクロをセルA1を選択した状態で実行してみてください。
|
||||||||||
これら二つのマクロをセルA1を選択状態で実行した場合、どちらも「=B5」が入力されます。 |
||||||||||
では、セルA5を選択した状態で2つのマクロをそれぞれ実行して、入力されている参照式を確認してみてください。
実行結果は次のようになります。
|
|
||
これをA1形式で実現すると変数を使って、入力する文字列同士を演算子でくっつけ・・・と結構おおごとになってしまいます。 | ||
また、FormulaR1C1プロパティを使って、他のセルに入力されている数式の参照関係を維持したまま別のセルに数式を入力することも出来ます。
つまり、セルをコピーして貼り付けた場合と数式の結果が同じになります。 これに対して、Formulaプロパティを使用した場合は結果が大きく異なります。
つまり、数式バーに表示された文字列をコピーして貼り付けた場合と数式の結果が同じになります。 このようにFormulaプロパティとFormulaR1C1プロパティでは実行結果に大きな差がありますのでそれぞれの特徴を理解した上で使い分けしてください。 |
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||