つらつら Excel VBA

私の備忘録です。

CellsとRange

範囲を指定するならRangeを使う。Cellsは範囲指定ができない。
変数を使って動的な処理を行うならCellsを使う。固定セルならRangeを使う。
人に見せるなら上記を守る。
CellsとRangeを使い分ける。(私は出来てない)


よくあるパターンから。

Dim r As Range

'単一のセル指定
Set r = Range("A1")
Set r = Cells(1, 1)
Set r = Cells(1, "A")

'範囲指定  以下3例全てA1:F3
Set r = Range("A1:F3")
Set r = Range("A1", "F3")
Set r = Range(Cells(1, 1), Cells(3, 6))

'行列の範囲指定
Set r = Range("A:B") 'A~B列
Set r = Range("1:2") '1~2行目

'全セル
Set r = Cells
Set r = Range(Rows(1), Columns(1))


以下、普通やらない書き方の例。
バグや敵を産み出す可能性がありますので、結果を隠しました。

Dim r As Range

'例1
Set r = Range("A1:E5", "G2")

'例2
Set r = Range("F1:B5").Cells(1, 1)

'例3
Set r = Cells(3, 3).Range("A1", "E5")

'例4
set r = Cells(2, 2).Rows("3:5")

例1 : A1:G5

例2 : B1

例3 : C3:G7

例4 : B4:B6 (出るには出たけど正しい動きなのか分かりませんゴメンナサイ)



以下、おまけ。

Cellsをアンダーバーを駆使して連続で約1,800個書いてみた。ちゃんと動く(笑)
更に連続コピペしたらソースが一部画面から消えたりExcelが強制終了してビビった。
これはよくない。真似してはいけません。注意喚起。

Dim r As Range
Set r = Cells.Cells.Cells.Cells.Cells.Cells.Cells.Cells.Cells. _
        Cells.Cells.Cells.Cells.Cells.Cells.Cells.Cells.Cells. _
        Cells(1, 1) 'A1


強制終了前のスクリーンショット

以上。