我有下面的一些代码,这是应该检查,如果一个值是在一个数组或没有.
Sub test()
vars1 = Array("Examples")
vars2 = Array("Example")
If IsInArray(Range("A1").Value, vars1) Then
x = 1
End If
If IsInArray(Range("A1").Value, vars2) Then
x = 1
End If
End Sub
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
如果单元A1
由于某种原因包含字Examples
,则两个IsInArray
都检测到它存在于两个数组中,而实际上它应该只发现它存在于vars1
数组中
要使IsInArray
函数完全匹配,需要做哪些更改?
8条答案
按热度按时间jgzswidk1#
你可以像这样强制执行:
使用类似
r6vfmomb2#
这个问题是在这里提出的:VBA Arrays - Check strict (not approximative) match
cbeh67ev3#
我搜索了这个问题,当我看到答案时,我最终创建了一些不同的东西(因为大多数时候我喜欢更少的代码),这些东西应该在绝大多数情况下都能工作。基本上,把数组变成一个字符串,数组元素由一些分隔符分隔,然后把搜索值 Package 在分隔符中,并通过instr传递。
你可以这样执行这个函数:
mbskvtky4#
使用excel VBA中的Match()函数检查数组中是否存在该值。
jutyujz05#
如果不匹配,则以下函数返回“0”,如果匹配,则返回“正整数”:
注意:函数首先使用'Join'将整个数组内容连接到一个字符串(不确定join方法是否使用内部循环),然后使用
InStr
检查该字符串中的匹配项。zfciruhq6#
虽然这基本上又是@布拉德的回答,但我认为可能值得包含一个稍微修改的函数,如果数组中存在要搜索的项,它将返回该项的索引;如果该项不在数组中,它将返回
-1
。这个函数的输出可以像“in string”函数
If InStr(...) > 0 Then
一样进行检查,所以我在它下面做了一个小测试函数作为例子。然后我做得有点过火,充实了一个二维数组,因为当你generate an array based on a range的时候,它通常是这样的。
它返回一个只有两个值的一维变量数组,数组的两个索引用作输入(假设找到值),如果没有找到值,它返回一个
(-1, -1)
数组。下面是我为测试设置的数据的图片,后面是测试:
zaqlnxep7#
我想提供另一个变体,它应该是高性能和强大的,因为
Match
)*支持
String
、Integer
、Boolean
等(notString
-only)*返回搜索项目的 * 索引
支持 * 第n次出现
...
像这样使用它:
rkue9o1l8#
你想检查Examples是否存在于Range("A1"). Value如果失败,那么检查Examples对吗?我认为mycode将工作完美。请检查。
末端子组件