ITサポーターTsuchida

VBA Basic4

第4章 Rangeオブジェクト以外のセル指定

マクロの記録では、Rangeオブジェクトで記述されますが、Rangeオブジェクトにすると連続するセルに繰り返す操作がやりづらくなります。

VBAに慣れてくると、セル指定にはCellsプロパティ、行単位指定にはRowsプロパティ、列単位指定にはColumnsプロパティを使うようになります。特にVBAではCellsプロパティを最もよく使います。

Cellsプロパティは以下のとおりに指定します。

Cells(行, 列)

行は縦の行数で、1行目は1、3行目は3になり、列も横の列数で、A列は1、C列は3になります。

Cells(1, 1)←A1セルを指定

Cells(3, 2)←B3セルを指定

列は、"A"や"C"でも指定ができますが、位置を計算するなどを想定すると数字が望ましいです。ただし、Cellsプロパティは1つのセルしか指定できません。(行列を省略すると、シート全体のセルが対象になります)

行選択はRowsプロパティを使います。Rows(行) 数字は行数になります。

Rows(3)←3行目を指定

列選択はColumnsを使います。Columns(列) 数字は列数になります。

Columns(3)←C列を指定

では逆にRangeオブジェクトを使わなくていいかというとそうではありません。複数のセル範囲という場合には、Rangeオブジェクトを使います。 例えば選択範囲を並び替えるという場合は、並び替えには選択範囲が必要なため、Rangeオブジェクトを使います。 その場合も選択という意味でRangeオブジェクトを使い、Rangeオブジェクトの中の開始セル・終了セルの指定はCellsプロパティを使い、RangeオブジェクトとCellsプロパティを組み合わせます。

Range(Cells(開始セル),Cells(終了セル)).Sort

セル範囲を自動認識するような、フィルタやピボットテーブルもRangeオブジェクトを使います。また、マクロの最後にセル選択でアクティブセルにする場合もRangeを使います。

基本的に、Cells・Rows・Columns各プロパティを使い、範囲を指定する場合はRangeオブジェクトと組み合わせると考えた方がよいでしょう。ただし、VBAを実行する前にセルや行や列が決まっていて絶対に変わらない場合は、Rangeオブジェクトを使っていただいて問題はありません。