Excel VBA:不能添加到数组?

我遇到了一个问题,即时通讯相当新,但学习速度很快。 我一直在试图纠正下面的代码,通过一列查看,并挑出所有可能的值的行数据在此列中使用另一位代码中使用。

我不能让arrays工作,我可以做错了。 如果它不清楚,它应该检查列I中的单元格的值,如果它是一个值(如果它没有被存储(代码显示,但尚未使用)),那么值存储在数组中,数组中的位置和列向下的位置递增。

另一个问题,我还没有看,然后是如何安排在名称等数组中的值? 在这种情况下的值将是AHU1,AHU2,AHU3等高达约AHU5或6,我也打算实施一些代码,将扩大数组如果necassery(从小,所以它不是大于需要)

编辑:我havnt制定了另一个问题,但是为什么If语句总是导致值被添加到数组(它不)

Do If IsNull(V1.Range("I" & i)) = False Then 'And V1.Range("I" & i).Value <> (Val(AHUArray(1)) Or Val(AHUArray(2)) Or Val(AHUArray(3)) Or Val(AHUArray(4)) Or Val(AHUArray(5)) Or Val(AHUArray(6)) Or Val(AHUArray(7)) Or Val(AHUArray(8)) Or Val(AHUArray(9)) Or Val(AHUArray(10))) Then 'And (does not equal any other values in the array AHUArray(ArrayDim) = V1.Range("I" & i).Text i = i + 1 ArrayDim = ArrayDim + 1 Else i = i + 1 End If Loop While i <= LastRow 

任何想法?,帮助将不胜感激!

这些是这个代码之前的定义,包含它的一个概念(如过去一样,但我不认为它是?

 Dim V1 As Worksheet Dim LastRow As Long Dim C As Range Dim FirstAddress As String Dim AHUArray(1 To 10) As String Dim DestCell As Integer Dim i As Integer Dim ArrayDim As Integer Set V1 = ThisWorkbook.Sheets("V1") Set AHU = ThisWorkbook.Sheets("AHU") LastRow = V1.Range("A:A").Find("*", V1.Range("A1"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row DestCell = 3 ArrayDim = 1 i = 3 

更改

 IsNull(V1.Range("I" & i)) = False 

 V1.range("I" & i).value <> "" 

当你像这样使用IsNull ,你总是会变得真实,因为你在问:“这个范围值是我刚刚创build和定义的Null?

关于dynamic增长数组,请参阅此答案的示例如何这样做。

最后,这是我如何pipe理它。 使用IsNull实现是愚蠢的,并设法做一个检查函数如何UBound返回-1是否找不到对angular线

  Do If IsEmpty(V1.Range("I" & i)) = False And IsInArray(V1.Range("I" & i).Value, AHUArray) = False Then '(does not equal any other values in the array AHUArray(ArrayDim) = V1.Range("I" & i).Value i = i + 1 ArrayDim = ArrayDim + 1 Else i = i + 1 End If Loop While i <= LastRow 

这是其他检查function

 Function ArrayCountIs(ArrayToCount As Variant) As Integer Dim i As Integer Dim ArrayCount As Integer ArrayCount = 0 i = 0 For i = LBound(ArrayToCount) To UBound(ArrayToCount) If Not (ArrayToCount(i)) = "" Then ArrayCount = ArrayCount + 1 End If Next ArrayCountIs = ArrayCount End Function