由数组返回的空单元格

我一直在研究这个特定的问题,而且显然错过了一些非常简单的事情。 我可以尝试在Excel中创build一个基于dynamic范围的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 

正常的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 

这会将范围/数组的第一行复制到一维数组中,并将其用于进一步处理。

然而,从你的代码和问题来看,我没有看到把它调整到一个维度的好处 – 你可以很容易地将你的循环做成一个二维数组 – 只要在第一列和唯一一列。