【ExcelマクロVBA】RangeとCellsの違いと使い分け|セル参照を変数化する方法





【ExcelマクロVBA】RangeとCellsの違いと使い分け|セル参照を変数化する方法



資料番号:SH44

マクロの記録で記録されるセルのアドレス情報はRangeで記録されます。
ところが、マクロではCellsを使用してセルを変数で指定できるようにすると活用の幅が大きく広がります。

今回は備忘録として、RangeとCellsの関係をまとめました。

セル選択をマクロ記録

セルの選択作業を例にRangeとCellsの関係について説明します。

「マクロの記録」を開始し

A3~A7セルだけ選択して「記録終了」します。

このとき、VBAには以下のプログラムが記録されます。

/* Range select program */
Sub select()
Range(“A3:A7”).Select
End Sub
/* Range select program End */

Cellsを使ってセル選択作業を書き換え

Range(“A3:A7”)のA3はCells(3,1)に相当します。
A列3行は3行1列と等価であるということです。
同様にA7はCells(7,1)に相当します。

A1やA2などのセルの番地を反対から読んでCellsに変換と覚えておくといいと思います。
これを元にプログラムを書き換えます。

/* Range select program */
Sub select_range()
Range(“A3:A7”).Select
End Sub
/* Range select program End */

/* Cells select program */
Sub select_cells()
Range(Cells(3, 1), Cells(7, 1)).Select
End Sub
/* Cells select program End */

プログラムRange select programとCells select programは等価で同じ作業をします。
プログラムをこのように書き換えることでセル番地情報に変数を使うことができるようになります。

Cells応用

以下のプログラムを実行すると
/* Cells select routine program */

Sub select_cells()
For i = 1 To 10
Range(Cells(3, i), Cells(7, i)).Select
Application.Wait [Now() + “0:00:00.1”] Next i

End Sub
/* Cells select program End */

A3~A7セルの選択→B3~B7セルの選択→・・・→J3~J7セルの選択まで連続で行うことができます。このプログラムはCellsに変数を使うことができるからこそ組めるものなのです。

※今回は連続で繰り返し作業をしていることを可視化するために
Application.Wait [Now() + “0:00:00.1”] を挟み込んで1ループごとに0.1秒待つという指示をしています。

shimakei8364