VBA入門者の”どっち?” Cells or Range−Rangeでしかできないこと|Excel VBA |
VBAをはじめたばかりの頃はSelectなどによってセルを選択する際に
Rangeプロパティを使うか、Cellsプロパティを使うか、迷うことがあるのではないでしょうか?
どちらもRangeオブジェクトを取得することにかわりはありませんが、
それならばどういう判断基準で使い分ければよいのでしょうか?
Cellsを使うのかRangeを使うのか、というのは、例えばセルD5を選択するとして・・・
(1) Range("D5").Select
とするか・・・
(2) Cells(5, 4).Select
とするかということです。ここではRangeの特徴について考察します。
上記の例のような特定の単一セルの指定の場合にはあまり差はありませんが、それぞれ特徴があります。
上記3点について順に解説していきます。
【基本】Range("住所録").Select
【応用】例えばシート1上のセルA1からE20の範囲で”住所録”という名前をつけられた表が
あったとして、表全体をシート2のセルA1を基準として貼り付ける場合
Range("住所録").Copy Destination:=Sheet2.Range("A1")
(参考 :名前を定義する)
ThisWorkbook.Names.Add "住所録", "=Sheet1!$A$1:$E$20"
※ 相対参照($マークをつけない)の場合アクティブセルの位置が
基準になりますので注意してください。
【基本】独立したセル(範囲)はコンマ区切りで指定し、
連続するセル範囲を指定するにはコロン(:)で区切る。
Range("A1,D5").Select ’セルA1とD5を選択
Range("A1:D5").Select ’セルA1からD5を選択
Range("A1:D5,E7:J10").Select ’セルA1からD5とE7からJ10を選択
【基本】Range(左上端セル、右下端セル)
セルA1からJ10までをひとつのセル範囲として取得する場合・・・
Range("A1", "J10").Select
Range(Range("A1"), Range("J10")).Select
Range(Cells(1, 1), Cells(10, 10)).Select
上記いずれの記述でも同じです。
※Range("A1", "J10") と Range("A1, J10")とは異なることに注意
Range型の変数を指定することも可能です。
Dim Rng As Range
Set Rng = Range("J10")
Range(Range("A1"), Rng).Select