VBAの勉強を始めてみた

色々試しています。

Rangeの引数指定についておさらい(Tips-8)

久しぶりにコードを書くと、Rangeの引数で:(コロン)を使えば良いのか,(カンマ)を使えば良いのか迷ってしまう時があります(@_@;)
なので、自分の脳内整理を試みようと思います。

 

Rangeの引数は

  • Range(引数1,引数2)

のように2つまで指定することができます。

 

まず、引数を1つだけ指定する場合についてです。
これはシンプルにいうと、エクセルで範囲指定する際の記述(A1形式)と同じです。

エクセルで A1:B2,D1:E2 は下のような範囲ですが、

f:id:kouten0430:20181201135443j:plain

 

この A1:B2,D1:E2 の部分を"(ダブルクォーテーション)で囲んで、文字列として指定します。

  • Range("A1:B2,D1:E2")

:(コロン)は連続した範囲を、,(カンマ)は非連続な範囲を指定するときに使います。
※範囲と範囲が隣り合う場合は非連続ではありませんが、分かりやすく非連続と呼ぶことにします。

 

実際にどんな範囲になるのか、Selectメソッドを使って実験してみましょう。 

Range("A1").Select

 f:id:kouten0430:20181201140404j:plain

 

Range("A1:B2").Select

f:id:kouten0430:20181201140533j:plain

 

Range("A1,B2").Select

f:id:kouten0430:20181201140711j:plain

 

Range("A1:B2,D1:E2").Select

f:id:kouten0430:20181201140833j:plain

 

Range("範囲1").Select   'A1~B2が「範囲1」という名前の場合

f:id:kouten0430:20181201141006j:plain

 

Range("A:A").Select   '列全体

f:id:kouten0430:20181201141113j:plain

 

Range("1:1").Select   '行全体

f:id:kouten0430:20181201141219j:plain

 

次に、引数を2つ指定する場合についてです。
引数を2つ指定する場合、引数1は先頭セル、引数2は終端セルとなって引数1~引数2の連続した範囲になります。(引数1と引数2は単一セルで指定するのがルールのようです)

 

実験してみましょう。 

Range("A1", "B2").Select

f:id:kouten0430:20181201141533j:plain

 この時,(カンマ)が非連続を意味するものと混同しそうになりますが、これはあくまでも引数1と引数2を区切るためのカンマです。

 

Range("A1:B2", "D1:E2").Select

f:id:kouten0430:20181201141814j:plain

引数1と引数2に単一セルではなく、連続範囲を指定すると引数1の左上から引数2の右下までが選択されました。(正式な指定方法ではない)

 

Range("A1,B2", "D1,E2").Select

f:id:kouten0430:20181201142047j:plain

引数1と引数2に、非連続範囲を指定するとエラーになりました。(正式な指定方法ではない)

 

Range("A1", "A2", "A3").Select

f:id:kouten0430:20181201142301j:plain

ためしに、引数を3つ指定するとエラーになります。(当たり前ですが)

 

Range(Cells(1, 1), Cells(2, 2)).Select

f:id:kouten0430:20181201142412j:plain

引数を2つ指定する場合は Cells で指定することもできます。Cells の引数に変数を用いればプログラムの中で自由に範囲変更させることができます。

 

Range(Cells(1, 1)).Select

f:id:kouten0430:20181201143154j:plain

ちなみに、引数を1つだけ指定する場合に Cells を使用するとエラーになります。