我一直在研究这个特定的问题,显然我很遗憾。我试图在Excel中基于动态范围创建一个aray,并使用各个元素与另一个数组进行比较。附加代码的唯一问题是它继续显示空元素。任何指导将不胜感激。 我的整体代码的一部分。
Sub Test_Again()
Dim R As Long
Dim C As Long
Dim List() As Variant
Dim i As Integer
List = Sheets("Sheet11").Range("A2:A17").Value
For R = 1 To UBound(List, 1) ' First array dimension is rows.
For C = 1 To UBound(List, 2) ' Second array dimension is columns.
Debug.Print List(R, C)
Next C
Next R
ReDim List(UBound(List, 1))
Do Until i = UBound(List)
If List(i) = Now() Then
End If
i = i + 1
Loop
End Sub
答案 0 :(得分:2)
正常Redim
将清除您的数组 - 除非您使用Redim Preserve
。但是,根据帮助:
如果使用Preserve关键字,则只能调整最后一个数组维度的大小,并且根本无法更改维度数。例如,如果您的数组只有一个维度,则可以调整该维度的大小,因为它是最后一个维度。但是,如果您的数组有两个或更多维度,则可以仅更改最后一个维度的大小,并仍保留数组的内容。
因此,在您的情况下,Redim
对您没有帮助。如果要将二维数组传输到一维数组,则需要手动执行此操作:
Sub Test_New()
Dim lRow As Long, lCol As Long
Dim vListSource() As Variant, vListTarget() As Variant
'Assign soure array
vListSource = Sheets("Sheet11").Range("A2:A17").Value
'Show full content for debug
For lRow = LBound(vListSource) To UBound(vListSource) ' First array dimension is rows.
For lCol = LBound(vListSource, 2) To LBound(vListSource, 2) ' Second array dimension is columns.
Debug.Print vListSource(lRow, lCol)
Next lCol
Next lRow
'Transfer array to one dimension
ReDim vListTarget(LBound(vListSource) To UBound(vListSource))
For lRow = LBound(vListSource) To UBound(vListSource)
vListTarget(lRow) = vListSource(lRow, LBound(vListSource, 2))
Next lRow
'Your check code
For lRow = LBound(vListTarget) To UBound(vListTarget)
If vListTarget(lRow) = Now() Then
'Do something here
End If
Next lRow
End Sub
这会将范围/数组的第一行复制到一维数组,并将其用于进一步处理。
但是,从您的代码和问题中我看不到将其重新调整到一个维度的优势 - 您可以轻松地将循环视为二维数组 - 并且只需查看第一个也是唯一的列。