Excelマクロを勉強している過程で、「Cells」と「Range」の使い分けに、迷う方も多いと思います。
みなさん、こんにちは。セルネッツ竹本です。
今回は、「CellsとRange使い分けの考え方」をテーマに、解説をしたいと思います。
◆アルファベット列番号と数値の違いをどう考えるか
表現方法という面では、構文の違いがあり、行と列が逆転しています。
以下のように、単一セルに文字列を出力するような場合であれば、どちらを使った場合でも、速度も変わらず、見易さも変わらないので、「どちらでも良い」ように感じるかもしれません。
1.「Range」は、「列番号+行番号」 例)Range(“A1”).Value = “商品CD”
2.「Cells」は、「行番号,列番号」 例)cells(1,1).Value = “商品CD”
が、列をずらしながら、[先頭列] から [末尾列] へ向かって、繰り返し処理を行う場合はどうでしょう。
両者には、繰り返し処理で、数値カウンターを使えるかどうか、といった大きな違いがあります。
↓[Range] 数値カウンターを使えない (列の増分値を1として繰り返したいが出来ない)
Range(“D2”).Value = “4”
Range(“E2”).Value = “5”
Range(“F2”).Value = “6”
↓[Cells] 列番号をカウントアップできる
Cells(2,4).Value = “4”
Cells(2,5).Value = “5”
Cells(2,6).Value = “6”
Cellsの場合は、行番号、列番号を数値で指定するため、プログラミング処理に欠かせない「数値カウンター」を使うことができます。
いっぽう、Rangeの場合は、アルファベットに変換する必要があるので、列が変化してゆくようなケースでは、アルファベット変換も不要な分、Cellsのほうが可読性が高まります。
【結論】
プログラム開発の場合は、
1.「繰り返し処理をするかどうか」(カウンターを活用できるかどうか)
2.「高速処理を必要とするかどうか」(Cellsはバッファ処理ができるが、Rangeでは無理。
遅いセル操作しかできません。個数が少ないなら大差はないが大量だと応答なしの可能性も)
を一つの判断基準とすることをおすすめします。
【実際にセル番地を固定で出力しているVBAツール例】
ファイル入出力の情報をLOG履歴として、「単一の固定セル番地」へ出力している
Range(”M10″) = P_入File名 と記述するが、あえて、Cells(10 , 13) = P_入File名と記述しない!
上図のように、処理実行後の実測やファイル名を結果LOGとしてシート固定セル番地に出力するケースは、「Range」とする、そんなガイドラインがあると不具合があった際の修正箇所の特定に役立つことが多いです。
シート内のデータを配列で高速処理する場合は、おのずと「Cells」しか選択肢はありません。
このため、「固定セル番地」を使う場合のみ「Range」と考えましょう。
すると、繰り返し処理を行いやすい処理が「Cells」といった考え方が、切り分けのガイドラインとしてわかりやすいかもしれません。
今回のテーマは、「CellsとRange使い分けの考え方」について、解説を行いました。
本記事が、Excel実務の効率化において、ご参考お役立てになれば幸いです。