xxx*_*xxx 3 excel vba excel-vba excel-2013
现在,我有一长串用户通过表单提交的"行业"值.我编写了一个宏来搜索这些值中的特定术语,并粘贴符合我的"可接受的"行业值列表的重要值.关键是要将用户提交的所有当前行业价值重新分类到我现有的分类中.这是我的If-Then语句现在的样子:
If InStr(1, Cells(i, "A").Value, "Energy") > 0 Or InStr(1, Cells(i, "A").Value, "Electricity") > 0 Or InStr(1, Cells(i, "A").Value, "Gas") > 0 Or InStr(1, Cells(i, "A").Value, "Utilit") > 0 Then
Cells(i, "B").Value = "Energy & Utilities"
End If
Run Code Online (Sandbox Code Playgroud)
这很难看.工作得很好,但是要读一读.我的宏充满了这些几乎无法理解的If-Then语句,并且很难全部阅读.有没有办法将多个值传递给"String2"参数Instr?
[ On Edit:我修改了函数,以便如果最后一个参数是一个整数,它将扮演compareMode参数的角色Instr(0表示区分大小写的搜索,这是默认值,1表示不区分大小写).作为最后的调整,您还可以为可选的最终参数传递布尔值而不是整数,True并且False对应于不区分大小写并且对应于默认区分大小写]
如果你做了很多这样的事情,那么编写一个类似于inStr但可以处理多个模式的函数是有意义的.ParamArray是一个自然的工具:
Function Contains(str As String, ParamArray args()) As Boolean
Dim i As Long, n As Long, mode As Integer
n = UBound(args)
If TypeName(args(n)) <> "String" Then
mode = args(n)
mode = Abs(mode) 'So True => -1 => 1 for case-insensitive search
n = n - 1
End If
For i = 0 To n
If InStr(1, str, args(i), mode) > 0 Then
Contains = True
Exit Function
End If
Next i
Contains = False
End Function
Run Code Online (Sandbox Code Playgroud)
测试如下:
Sub Test()
Debug.Print Contains("General Electric", "Gas", "Electric", "Oil")
Debug.Print Contains("General electric", "Gas", "Electric", "Oil")
Debug.Print Contains("General electric", "Gas", "Electric", "Oil", False)
Debug.Print Contains("General electric", "Gas", "Electric", "Oil", True)
Debug.Print Contains("General electric", "Gas", "Electric", "Oil", 1)
Debug.Print Contains("General Motors", "Gas", "Electric", "Oil")
End Sub
Run Code Online (Sandbox Code Playgroud)
输出:
True
False
False
True
True
False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7422 次 |
| 最近记录: |