相关疑难解决方法(0)

从VBA中的范围创建数组

我有一个看似基本的问题,但无法找到解决它的任何资源.

简单地说,我只想将一系列单元格(所有一列)的内容加载到一个数组中.

我能够通过以下方式实现这一目标

DirArray = Array(Range("A1"), Range("A2"))
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,我不能以这种方式表达时创建数组:

DirArray = Array(Range("A1:A2"))
Run Code Online (Sandbox Code Playgroud)

我的真实范围要长得多(并且长度可能不同),所以我不想以这种方式单独枚举单元格.谁能告诉我如何将整个范围正确加载到数组中?

后面的代码:

MsgBox UBound(DirArray, 1)
Run Code Online (Sandbox Code Playgroud)

MsgBox UBound(DirArray)
Run Code Online (Sandbox Code Playgroud)

返回0,而前者返回1.

arrays excel vba range

27
推荐指数
6
解决办法
16万
查看次数

匹配字符串数组中的值

问题:寻找一种更有效的方法来查找1d数组中是否存在精确匹配值 - 本质上是一个布尔值true/false.

我忽略了一些明显的东西吗 或者我只是使用错误的数据结构,当我可能应该使用集合对象或字典时使用数组?在后者中,我可以分别检查.Contains.Exists方法

在Excel中,我可以检查向量数组中的值,如:

If Not IsError(Application.Match(strSearch, varToSearch, False)) Then
' Do stuff
End If
Run Code Online (Sandbox Code Playgroud)

这将返回一个精确的匹配索引,显然受到Match函数的限制,该函数仅在此上下文中找到第一个匹配值.这是一种常用的方法,也是我长期使用的方法.

这对Excel来说足够令人满意 - 但其他应用程序呢?

在其他应用程序中,我基本上可以做同样的事情,但需要启用Excel对象库的引用,然后:

   If Not IsError(Excel.Application.match(...))
Run Code Online (Sandbox Code Playgroud)

但这看起来很愚蠢,并且由于权限/信任中心/等原因而难以管理分布式文件.

我试过使用Filter()函数:

 If Not Ubound(Filter(varToSearch, strSearch)) = -1 Then
    'do stuff
 End If
Run Code Online (Sandbox Code Playgroud)

但是这种方法的问题是Filter返回部分匹配的数组,而不是完全匹配的数组.(我不知道为什么返回子串/部分匹配会有用.)

另一种选择是逐字迭代数组中的每个值(我认为这也是非常常用的) - 这似乎比调用Excel的Match函数更加麻烦.

For each v in vArray
   If v = strSearch Then
    ' do stuff
   End If
Next
Run Code Online (Sandbox Code Playgroud)

arrays excel vba excel-vba data-structures

17
推荐指数
1
解决办法
9万
查看次数

VBA阵列-检查严格(非近似)匹配

If UBound(Filter(myArray, Sheets(i).Cells(1, j).Value, True)) = -1 Then
 'take action
End if
Run Code Online (Sandbox Code Playgroud)

我使用此语法将在Cells(1,j)中找到的元素(例如“ ally”)与数组的所有元素(例如“ mally”,“ kate”,“ becks”)进行比较,并在没有找到完全匹配。麻烦的是,根据这一行代码,似乎“盟友”被视为与“盟友”匹配(可能是因为“盟友”是“盟友”的子字符串),而我希望“盟友”被识别为与“盟友”不同”。

对实现这一点的语法有帮助吗?谢谢!

vba excel-2007

2
推荐指数
1
解决办法
1万
查看次数

编译错误:ByRef arugment type mismatch:如何调用数组中的值

在循环中,我想检查值是否在数组中,如果是,则跳到下一次迭代.

我对阵列的低级理解阻止了我:

我正在使用下面的函数(来自:检查值是否在数组中与Excel VBA),以查看值是否在数组中.

Public Function IsInArray(Vtobefound As Long, arr As Variant) As Boolean
    Dim i
    For i = LBound(arr) To UBound(arr)
        If arr(i) = Vtobefound Then
            IsInArray = True
            Exit Function
        End If
    Next i
    IsInArray = False

End Function
Run Code Online (Sandbox Code Playgroud)

但我的Sub下面仍然不起作用:

Sub CountCellstest()

    Dim i, k As Long
'   Dim iArray() As Single

    ReDim iArray(1 To 1) As Single

    For i = 1 To 3
        If IsInArray(i, iArray) Then 'ERROR HERE on the i

    GoTo next_iteration

        End …
Run Code Online (Sandbox Code Playgroud)

arrays excel vba excel-vba

1
推荐指数
1
解决办法
43
查看次数

标签 统计

vba ×4

arrays ×3

excel ×3

excel-vba ×2

data-structures ×1

excel-2007 ×1

range ×1