不連続な範囲を選択(失敗談)

不連続な範囲を、お手軽に選択したくなった。
f:id:Infoment:20200808222112p:plain

例えば、A1とC3を選択したい場合。
f:id:Infoment:20200808222226p:plain

その場合、このような書き方が可能だ。
f:id:Infoment:20200808222342p:plain

ちなみに、↓ こう書くと、

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

これは選択範囲の左上と右下を指しており、この間の全セルが選択されてしまう。
f:id:Infoment:20200808222550p:plain

ところで、先程の ↓ この書き方、限界はあるのだろうか。

Range("A1,C3").Select

そこで、A列のセルを一つずつ選択して、どこが限界か試してみた。

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

手作業で一つずつ試すのは大変なので、実際はテスト用サブプロシージャを作成。

Sub test()
    ' 座標格納のための配列。
    Dim arr As Variant
        arr = Array()
        
    ' 上記配列を用いて、不連続な範囲をセットするための
    ' Rangeオブジェクト。
    Dim myRng As Range
    Dim i As Long: i = 1
        
        On Error Resume Next
        Do While Err.Number = 0
            ReDim Preserve arr(UBound(arr) + 1)
            arr(UBound(arr)) = "A" & i
            
            Set myRng = Range(Join(arr, ","))
                myRng.Select
                i = i + 1
        Loop
End Sub

すると、割と早めに限界が訪れた。
f:id:Infoment:20200808223329p:plain

そうか、そこが限界なのか。ならば、二つずつの場合はどうか。

arr(UBound(arr)) = "A" & i & ":A" & i + 1


66×2=132で、A132まで選択されるのかな?と思っていた。
しかし結果は、同じだった。
f:id:Infoment:20200808223749p:plain

では、三つずつの場合は?
f:id:Infoment:20200808223847p:plain

今度は増えた。???。そして気づいた。選択できるセルの数に限界があるのではなく、↓ の〇〇〇に許される文字数が限界だったってことに。

Range(〇〇〇)

その後試した限り、255文字が上限らしい。以後、気を付けます。

参考まで。