Ryf*_*lex 11 arrays excel vba excel-vba
我在下面有一些代码,应该检查一个值是否在数组中.
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
Run Code Online (Sandbox Code Playgroud)
如果单元格A1中包含单词Examples出于某种原因两者的IsInArray检测为现有两个数组时,它应该只找到它存在的在vars1阵
我需要更改什么才能使我的IsInArray功能完全匹配?
Bra*_*rad 20
你可以这样强行:
Public Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
Dim i
For i = LBound(arr) To UBound(arr)
If arr(i) = stringToBeFound Then
IsInArray = True
Exit Function
End If
Next i
IsInArray = False
End Function
Run Code Online (Sandbox Code Playgroud)
用得像
IsInArray("example", Array("example", "someother text", "more things", "and another"))
Run Code Online (Sandbox Code Playgroud)
小智 9
这里提出了这个问题:VBA阵列 - 检查严格(非近似)匹配
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 = Not IsError(Application.Match(stringToBeFound, arr, 0))
End Function
Run Code Online (Sandbox Code Playgroud)
小智 6
我搜索了这个问题,当我看到答案时,我最终创建了一些不同的东西(因为在大多数情况下,我更喜欢用更少的代码而不是大多数其他东西)在绝大多数情况下都可以使用。基本上把数组变成一个字符串,数组元素由一些定界符分隔,然后将搜索值包裹在定界符中并通过instr。
Function is_in_array(value As String, test_array) As Boolean
If Not (IsArray(test_array)) Then Exit Function
If InStr(1, "'" & Join(test_array, "'") & "'", "'" & value & "'") > 0 _
Then is_in_array = True
End Function
Run Code Online (Sandbox Code Playgroud)
你会像这样执行函数:
test = is_in_array(1, array(1, 2, 3))
Run Code Online (Sandbox Code Playgroud)
使用 Excel VBA 中的 Match() 函数检查数组中是否存在该值。
Sub test()
Dim x As Long
vars1 = Array("Abc", "Xyz", "Examples")
vars2 = Array("Def", "IJK", "MNO")
If IsNumeric(Application.Match(Range("A1").Value, vars1, 0)) Then
x = 1
ElseIf IsNumeric(Application.Match(Range("A1").Value, vars2, 0)) Then
x = 1
End If
MsgBox x
End Sub
Run Code Online (Sandbox Code Playgroud)
小智 5
如果没有匹配,下面的函数返回“0”;如果匹配则返回“正整数”:
Function IsInArray(stringToBeFound As String, arr As Variant) As Integer
IsInArray = InStr(Join(arr, ""), stringToBeFound)
End Function
Run Code Online (Sandbox Code Playgroud)
注意:该函数首先使用“Join”将整个数组内容连接到一个字符串(不确定 join 方法是否在内部使用循环),然后使用 检查该字符串中的匹配项InStr。
Sum*_*ary -1
您想检查 Range("A1").Value 中是否存在Examples如果失败,那么检查Examples对吧?我认为我的代码会完美运行。请检查。
Sub test()
Dim string1 As String, string2 As String
string1 = "Examples"
string2 = "Example"
If InStr(1, Range("A1").Value, string1) > 0 Then
x = 1
ElseIf InStr(1, Range("A1").Value, string2) > 0 Then
x = 2
End If
Run Code Online (Sandbox Code Playgroud)
结束子
| 归档时间: |
|
| 查看次数: |
85728 次 |
| 最近记录: |