ExcelVBAで表範囲をいい感じに指定する(CurrentRegion)

f:id:hollage0214:20190305223957p:plain

※この記事の初版は2019年3月でした。

おはようございます、堀井です。

ExceでlVBAを書いていると、項目表を範囲指定して値を弄ることしたくなることありますよね。

ちょうど上の画像のように、

  • 未記入の項目があるリスト
  • 行数列数の増減がある

そんな表を作る方はかなりいらっしゃると思います。

Excelで済む程度の(~数千人程度)データベースを作るときに使えるのではないでしょうか。


CurrentRegionの実用例

CurrentRegionメソッドではRangeオブジェクトを返します。

とりあえずサンプルコードを書きました。

Sub test()
    Dim rng As Range
    Set rng = Sheets(1).Cells(5, 4).CurrentRegion     'E4を指定
    MsgBox rng.Rows.Count                   '行数を表示
End Sub

以上です。

これを最初の画像のシートに対して実行すると、結果はMsgboxにこう表示されます。

4

この” 4 “は一体何の意味の” 4 “なのかと言いますと、こちらの画像の通りです。

f:id:hollage0214:20190305223521p:plain

タイトル通りいい感じに範囲を指定して、その範囲内での行数を返したものとなります。

つまりいい感じの範囲を返すメソッドと言うことになります。


もう少し試してみる

試しに少し行数と列数を増やして、同じコードを実行してみました。

結果は画像の通りです。

f:id:hollage0214:20190305223534p:plain

多少離れたくらいならいい感じに判断してくれるんですねえ・・・。

MsgBox rng.Columns.Count

こう書いた場合は横列数である” 6 “が表示されます。


どこまで認識してくれるかな

ここまでくると、ではどれだけ離したら認識されなくなるのかが知りたいですよね。

ということで試してみました。

f:id:hollage0214:20190305233911p:plain

これくらいでしたら問題ありませんね。

それではもうちょっと離してみましょう。

f:id:hollage0214:20190305234146p:plain

おっ、反応しませんでしたね。

周囲1マスいずれも値が入っていないセルがあれば反応されなくなるようです。


最後に

念のため、もう一つだけ実験しました。

f:id:hollage0214:20190305234152p:plain

うん。

そういうことですね。

会員数の増減があったと同時にSetをするだけで範囲を広げることができると言うことですね。

また、範囲の列数や行数をサッと取り出したい時にも使えるという優れものなメソッドでした。

コメントする