2017-01-31 8 views
0

範囲を読み取り、処理のために配列に変換するコードがあります。 範囲が1つのセルしか持たない場合、残念ながら失敗します。VBAの1セル範囲からアレイを作成できません

Sub ranges_to_arrays() 

    Dim r1 As Range, r2 as Range 
    Dim a1() As Variant, a2() as Variant 

    Set r2 = Worksheets("test").Range("A1:A2") 
    a2 = r2 ' Creates Variant(1 to 2, 1 to 1) 

    Set r1 = Worksheets("test").Range("A1") 
    a1 = r1 'Fails with a type mismatch 

End Sub 

をどのように確保することができます:私は、それぞれ、A1、A2のアレイに変換すること、問題を煮詰めるそれぞれ1と2細胞を用いて、以下の範囲(R1、R2)を考慮すること

範囲に要素が1つしかない場合でも配列が作成されるでしょうか?

答えて

0

配列に変換しようとしている範囲にあるセルの数を確認する必要があります。If r2.Cells.Count > 1 Thenを使用してください。

コード

Option Explicit 

Sub ranges_to_arrays() 

    Dim r1 As Range, r2 As Range 
    Dim a1() As Variant, a2() As Variant 

    Set r2 = Worksheets("test").Range("A1:A2") 
    If r2.Cells.Count > 1 Then 
     a2 = r2 ' Creates Variant(1 to 2, 1 to 1) 
    Else 
     ReDim a2(0 To r2.Cells.Count - 1) ' redim array size to 1 (only 1 cell in range) 
     a2(0) = r2 
    End If 

    Set r1 = Worksheets("test").Range("A1") 
    If r1.Cells.Count > 1 Then 
     a1 = r1 'Fails with a type mismatch 
    Else 
     ReDim a1(0 To r1.Cells.Count - 1) ' redim array size to 1 (only 1 cell in range) 
     a1(0) = r1 
    End If 

End Sub 
関連する問題