【问题标题】:Excel VBA: Cant add to an array?Excel VBA:无法添加到数组?
【发布时间】:2013-09-02 19:42:53
【问题描述】:

我遇到了一个问题,我对 VBA 相当陌生,但学习速度很快。我一直在尝试纠正下面的这段代码,以查看一列并挑选出该列中的数据行所采用的所有可能值,以便在另一段代码中使用。

我无法让阵列工作,我可能只是做错了。 如果不清楚,它应该检查 I 列中单元格的值,如果它是一个值(并且如果它尚未存储(代码显示但尚未使用)),则该值存储在数组中,并且数组中的位置和列向下的位置递增。

我还没有看过的另一个问题是如何按名称等排列数组中的值?在这种情况下,值将是 AHU1、AHU2、AHU3 等,最多约为 AHU5 或 6,我还打算实现一些代码,如果需要,将扩展数组(从更小,所以它不会比它需要的大)

编辑:我还没有解决的另一个问题是为什么 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

【问题讨论】:

    标签: arrays excel vba filter


    【解决方案1】:

    改变

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

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

    当你像这样使用IsNull 时,你总是会得到正确的,因为你在问,“这个范围值是我刚刚创建并定义的 Null 吗?”

    关于动态增长数组,请参阅this answer 了解如何执行此操作的示例。

    【讨论】:

    • 谢谢,意识到这一点,我选择了一个 IsEmpty 并制作了另一个函数。我的解决方案被添加为另一个答案。
    • 感谢您的帮助:D
    【解决方案2】:

    最后这就是我管理它的方式。使用 IsNull 实现是愚蠢的,并设法使用 UBound 返回 -1 的方式进行检查功能是否找不到任何东西

       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 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
    

    【讨论】:

      猜你喜欢
      • 2013-10-16
      • 2015-10-20
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多