2017-01-31 77 views
0

我有讀取範圍並將其轉換爲數組進行處理的代碼。 不幸的是,當範圍只有一個單元。無法在VBA中的1個單元格範圍內創建數組

歸結的問題時,分別用1和2個細胞考慮以下範圍(R1,R2),我要轉換爲列A1和A2,分別爲:

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 

如何確保即使範圍只有一個元素,也會創建一個數組?

回答

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 
相關問題