input/输出值到数组中

编辑:使用下面的一些build议更新了问题。 这虽然产生怪异的输出。

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

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

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

你可以这样做:

 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 

也许有点简单:

 Private Sub GetProviderNumbers() Dim InputRange() As Variant InputRange = Range("ProviderList") For Each i In InputRange Debug.Print i Next End Sub 

这捕获了一个二维的范围,并将这些值存储在一个全局的二维数组中:

 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