输入/输出值到数组中

时间:2013-09-06 16:58:59

标签: arrays excel vba

编辑:使用以下一些建议更新了问题。这会产生奇怪的输出。

Dim ProviderArray() As Variant

Sub GetProviderNumbers()
Dim InputRange As Range
Dim WorkRange As Range


Set InputRange = Range("ProviderList")

Set WorkRange = Application.Intersect(InputRange, ActiveSheet.UsedRange)

SizeOfArray = Application.WorksheetFunction.CountA(WorkRange)

ReDim ProviderArray(0 To SizeOfArray)

ProviderArray = WorkRange.Value

For r = 1 To UBound(ProviderArray, 1)
For C = 1 To UBound(ProviderArray, 2)
    Debug.Print r, C, ProviderArray(r, C)
Next C
Next r

End Sub

1 1 5555  2 1 4444654  3 1 654654  4 1 654654654  5 1
 6 1
 7 1
 8 1
 9 1
 10 1
 11 1  12 1  13 1
 14 1  15 1
 16 1
 17 1
 18 1  19 1

有人可以解释为什么输出这个?

3 个答案:

答案 0 :(得分:2)

如果将范围放入二维数组,则只能使用单线方法:您只有一维数组。

你可以这样做:

Dim ProviderArray()
Set WorkRange = .Intersect(InputRange, ActiveSheet.UsedRange)

'This makes ProviderArray a 2-D array, dimension 1 = # rows,
'   dimension2 = #cols.  Both dimensions are 1-based.  
ProviderArray = WorkRange.value 

for r=1 to ubound(ProviderArray,1)
for c=1 to ubound(ProviderArray,2)
    debug.print r,c,ProviderArray(r,c)
next c
next r

答案 1 :(得分:1)

也许更简单的事情:

Private Sub GetProviderNumbers()

    Dim InputRange() As Variant
    InputRange = Range("ProviderList")

    For Each i In InputRange
        Debug.Print i
    Next

End Sub

答案 2 :(得分:0)

这会捕获二维范围并将值存储在全局二维数组中:

Dim ProviderArray() As String
Sub MAIN()
Range("B2:C11").Name = "ProviderList"
Call GetProviderNumbers
End Sub
Sub GetProviderNumbers()
    ary = Range("Providerlist")
    ll = LBound(ary, 1)
    lm = LBound(ary, 2)
    ul = UBound(ary, 1)
    um = UBound(ary, 2)
    ReDim ProviderArray(ll To ul, lm To um)
    For i = ll To ul
        For j = lm To um
            ProviderArray(i, j) = ary(i, j)
        Next
    Next
End Sub