Vba 如何检查数组中的值是否为真
我使用vba,我得到str作为字符串 我想完成以下任务 有以下数组Vba 如何检查数组中的值是否为真,vba,ms-word,Vba,Ms Word,我使用vba,我得到str作为字符串 我想完成以下任务 有以下数组 array1 = (string1, string2, string4) array2 = (string3, string6, string7) array3 = (string3, string6, string7) str = some string if str is present in array2 then sbj = "subject2" if str is present in array1 then
array1 = (string1, string2, string4)
array2 = (string3, string6, string7)
array3 = (string3, string6, string7)
str = some string
if str is present in array2 then
sbj = "subject2"
if str is present in array1 then
sbj = subject1
像智者一样
我知道我很困惑,但目前我一直在使用长开关功能(它工作得很好)
意思是a和c都是苹果,b和d都是香蕉。我们可以使用其他方法吗?您可以定义一个私有函数来检查元素是否在数组中,并在IF中使用此函数。。然后是条款
Public Function elemInArray(ByVal elem As Variant, ByVal Arr As Variant) As Boolean
Dim el As Variant
elemInArray = False
Select Case IsObject(elem)
Case True
For Each el In Arr
If el Is elem Then elemInArray = True: Exit Function
Next el
Case False
For Each el In Arr
If el = elem Then elemInArray = True: Exit Function
Next el
End Select
End Function
编辑:如果数组只包含基元类型,则此函数更简单
Public Function elemInArray(ByVal elem As Variant, ByVal Arr As Variant) As Boolean
Dim el As Variant
elemInArray = False
For Each el In Arr
If el = elem Then elemInArray = True: Exit Function
Next el
End Function
然后你可以问这样的问题:
if elemInArray(str, arr1) then
sbj = "subject1"
IF s = "a" or s = "c" then
sw = "Apple"
ELSEIF s = "b" or s = "d" then
sw = "banana"
ELSE
err.raise 10000,"Unexpected value"
ENDIF
至于第二个问题,还可以使用IF条件或SELECT CASE语句,如下所示:
if elemInArray(str, arr1) then
sbj = "subject1"
IF s = "a" or s = "c" then
sw = "Apple"
ELSEIF s = "b" or s = "d" then
sw = "banana"
ELSE
err.raise 10000,"Unexpected value"
ENDIF
或
如果可以保证s是“a”、“b”、“c”或“d”中的一个,则可以省略“ELSE”部分
关于您可以定义一个专用函数来检查元素是否在数组中,并在IF中使用此函数。。然后是条款
Public Function elemInArray(ByVal elem As Variant, ByVal Arr As Variant) As Boolean
Dim el As Variant
elemInArray = False
Select Case IsObject(elem)
Case True
For Each el In Arr
If el Is elem Then elemInArray = True: Exit Function
Next el
Case False
For Each el In Arr
If el = elem Then elemInArray = True: Exit Function
Next el
End Select
End Function
编辑:如果数组只包含基元类型,则此函数更简单
Public Function elemInArray(ByVal elem As Variant, ByVal Arr As Variant) As Boolean
Dim el As Variant
elemInArray = False
For Each el In Arr
If el = elem Then elemInArray = True: Exit Function
Next el
End Function
然后你可以问这样的问题:
if elemInArray(str, arr1) then
sbj = "subject1"
IF s = "a" or s = "c" then
sw = "Apple"
ELSEIF s = "b" or s = "d" then
sw = "banana"
ELSE
err.raise 10000,"Unexpected value"
ENDIF
至于第二个问题,还可以使用IF条件或SELECT CASE语句,如下所示:
if elemInArray(str, arr1) then
sbj = "subject1"
IF s = "a" or s = "c" then
sw = "Apple"
ELSEIF s = "b" or s = "d" then
sw = "banana"
ELSE
err.raise 10000,"Unexpected value"
ENDIF
或
如果可以保证s是“a”、“b”、“c”或“d”中的一个,则可以省略“ELSE”部分
加入阵列并进行检查
Dim test As Boolean
Dim findStr As String
Dim result As String
findStr = "apple"
varArray = Array("banana", "apple", "pear", "orange")
test = Join$(varArray, " ") Like "*apple*"
result = "apple is " & IIf(test, vbNullString, "not ") & "included"
避免在阵列中循环
更好的办法是重新思考你的方法。数组是用来以一种非常基本的方式存储相似数据集的,但您需要一些更有用的东西,所以请考虑使用、或对象来代替。加入数组并进行检查
Dim test As Boolean
Dim findStr As String
Dim result As String
findStr = "apple"
varArray = Array("banana", "apple", "pear", "orange")
test = Join$(varArray, " ") Like "*apple*"
result = "apple is " & IIf(test, vbNullString, "not ") & "included"
避免在阵列中循环
更好的办法是重新思考你的方法。数组是用来以一种非常基本的方式存储相似数据集的,但您需要一些更有用的东西,所以请使用、或对象来代替。谢谢您的回答。让我检查一下,在elemInArray函数中,您并不真正需要SELECT大小写。您可以只保留(对于Arr中的每个el…,如果el=elem,则…,下一个el)部分。剩下的只是万一你想用一个对象数组来使用这个函数。谢谢你的回答。让我检查一下,在elemInArray函数中,您并不真正需要SELECT大小写。您可以只保留(对于Arr中的每个el…,如果el=elem,则…,下一个el)部分。剩下的只是万一你想用一个对象数组来使用这个函数。谢谢你的回答。让我检查一下。问题是数组中可以有pinneaple,测试将返回true,但apple不在数组中。@Clon对模糊问题的模糊回答-有一些方法可以使其更准确(例如使用匹配模式中的分隔符)但我想说的真正一点是,泛型
Array
类可能是解决这类问题最不合适的对象。@MacroMan:我也讨厌我这样做。我的实际问题要复杂得多,因此我认为应该使用json@Scripting.FileSystemObject:如果按照宏Man的建议使用Scripting.Dictionary对象,则它有一个Exists(key)内置函数,用于检查字典中是否存在具有该键的元素。如果要使用早期绑定变量,需要添加对“Microsoft脚本运行时”的引用。谢谢您的回答。让我检查一下。问题是数组中可以有pinneaple,测试将返回true,但apple不在数组中。@Clon对模糊问题的模糊回答-有一些方法可以使其更准确(例如使用匹配模式中的分隔符)但我想说的真正一点是,泛型Array
类可能是解决这类问题最不合适的对象。@MacroMan:我也讨厌我这样做。我的实际问题要复杂得多,因此我认为应该使用json@Scripting.FileSystemObject:如果按照宏Man的建议使用Scripting.Dictionary对象,则它有一个Exists(key)内置函数,用于检查字典中是否存在具有该键的元素。如果要使用早期绑定变量,需要添加对“Microsoft脚本运行时”的引用。只需创建名为IsPresent(str,arr)
的函数,并在此函数中通过arr循环,并将str与每个项进行比较。匹配后,退出循环并返回true
。创建名为IsPresent(str,arr)
的简单函数,并在此函数中通过arr循环,并将str与每个项进行比较。匹配后,退出循环并返回true
。