gpt4 book ai didi

VBA:将多个值传递给 Instr

转载 作者:行者123 更新时间:2023-12-02 10:27:20 24 4
gpt4 key购买 nike

现在我有一长串用户通过表单提交的“行业”值。我编写了一个宏,它将搜索这些值中的特定术语,并粘贴符合我的“可接受”行业值的小得多的列表的值。重点是将用户提交的所有当前行业值重新分类到我现有的分类法中。这是我的 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

实在是太丑了。工作得很好,但读起来很费劲。我的宏中充斥着这些难以理解的 If-Then 语句,很难通读全部内容。有没有办法将多个值传递给 Instr 的“String2”参数?

最佳答案

[编辑时:我修改了该函数,以便如果最后一个参数是整数,则它扮演 InstrcompareMode 参数的角色> (0 表示区分大小写,这是默认值,1 表示不区分大小写)。作为最后的调整,您还可以为可选的最终参数传递 bool 值而不是整数,其中 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

测试如下:

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

输出:

True
False
False
True
True
False

关于VBA:将多个值传递给 Instr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33881040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com