【VBA】Cells? Range? [A1](Evaluate)?どっちが正しい?【色々なセル指定方法】
a = Cells(1, 1).Value
b = Range("A1").Value
c = [A1].Value ’角かっこ(大かっこ)で囲む
エクセルマクロ(VBA)で複数あるセルの指定方法を紹介します。
一般的には、「Cells」が処理速度は早いですが、セルの指定方法による処理速度に関しては気にするレベルではないと思います。
「Range」は、エクセルのツール「マクロの記録」でも使用されているので
一番最初に知る、セルの指定方法だと思います。
「[A1]」は角かっこ(大かっこ)でセルアドレス(セル名称)で囲まれており、Application.Evaluate メソッドを使用していることを表しています。
詳細は下記をご覧ください。
< ---目次--- >
◆「Cells」
・説明
「Cells」は、VBAでもっともポピュラーなセルの指定方法です。
容易に変数で指定もできるなど、自由度があるので、セルの指定方法の基本は「Cells」を使えば
何も問題がないでしょう。
セルの指定方法としては、「Cells」が一番、処理速度が早いです。
理由としては、表座標をインデックス番号で直接指定するので、プログラム側がそのまま引用でき、最小限の処理で済むからです。
VBAをしっかり、理解してマクロを高速化したい人はこちら(VBA高速化)こちらをご覧ください。
・使い方・使い分け
a = Cells(1, 1).Value
「Cells」の使い方は「Cells(行番号, 列番号)」となっています。
列番号を指定するが面倒ですよね。
列番号を指定するが面倒な対策としては、自作したオススメのアドインがありますので、こちら()を参照し、ご使用ください。*****
セルの指定方法との使い分けとして「Cells」を使うタイミングは
指定するセルが決め打ちじゃない時です。
繰り返し処理などで、処理は同一だが、指定するセルが可変している時には便利です。
さらに要約すると、変数でセルを指定する時は、「Cells」を使うべきです。
マクロでセルの範囲指定をしたい時は
d = Range(Cells(1, 1), Cells(2, 2)).Value
このようにすれば、できます。
「Range(開始セル,終了セル)」となっています。
「Cells」を使用しているので、番地は変数での指定が可能です。
◆「Range」
・説明
「Range」は、「マクロの記録」で使用されているので
初心者の方が何も考えずに使用するセルの指定方法だと思います。
処理速度は、「Range」より、「Cells」のが早いですが、気にするレベルではありません。
理由としては、「Cells」とは違い、「Range」はセルの名前で指定する処理方法なので
プログラム側は名前で指定された処理を、表座標のインデックス番号に変換、等をしていますので、処理工程が多くなります。
知らない人も多いと思いますが、「A1」や「A2」、「B1」などはセルの名前なのです。
・使い方・使い分け
b = Range("A1").Value
「Range」の使い方は「Range(セルの名前)」となっています。
「セルの名前」はセルアドレスと思ってもらっていいです。
セルの指定方法との使い分けとして
指定するセルが決め打ち(固定)の時は、非常に向いています。
直感的に座標もわかるので、可読性が向上すると思います。
ですが、指定するセルが可変する処理の場合は、あまり向いていません。
できなくはないですが、指定するセルが可変する処理の場合は、「Cells」を使った方がいいです。
i = 1
b = Range("A" & i).Value
行の可変であれば、これで実行すれば、できます。
ですが、列は?とか、あとから列も可変したいってなりますよね。
そういう場合に備えて、最初から「Cells」で記述しておいた方が楽です。
◆「[A1]」(角かっこを使用)
・説明
角かっこ[]を使用するのは、一番、楽に記述できるのでオススメで、私は多用しています。
速度などは「Range」とほぼ同じと思ってもらっていいと思います。
・使い方・使い分け
c = [A1].Value ’角かっこ(大かっこ)で囲む
「[セルの名前]」
たったこれだけでセルの指定ができます。
セルの名前(セルアドレス)を角かっこ(大かっこ)で囲むだけです。
セルの指定方法との使い分けとしては、「Range」と同じで
指定するセルが決め打ち(固定)の時は、非常に向いています。
「Range」は入力せずに、「[A1]」を使用します。
・なぜ[A1]でセルの指定ができるのか
なんか「[A1]」だけ特殊で例外すぎない?と思う方がいらっしゃると思います。
実は「[A1]」という記述方法は、「Application.Evaluate メソッド」になります。
そのメソッドのおかげで「[A1]」という記述でも動作することが可能なのです。
’すべて同じ処理となる
Application.Evaluate("A1").Value = 111
Evaluate("A1").Value = 111
[A1].Value = 111
「Application.Evaluate メソッド」は、まだ他にも使い方があります。
むしろ、この使い方は、ただの氷山の一角にすぎません。
詳細はこちら()をご覧ください。*****
◆まとめ
繰り返し処理などでセルの指定範囲が可変する場合は「Cells」
どうでもいい決め打ちのセルの指定は、「Application.Evaluate メソッド」の「[A1]」を使用しましょう
可読性もあがり、高速にVBAを作成することができます。