vba - 检查一个值是否是列表的成员

标签 vba excel

  • 我必须根据项目列表检查一段用户输入;如果输入位于项目列表中,则以一种方式引导流程。如果没有,则将流量引导至另一个。
  • 此列表在工作表本身上可见;它必须在代码下进行混淆。

我想到了两种策略来做到这一点:

  1. 声明为枚举并检查输入是否是该枚举的一部分,尽管我不确定其语法 - 我是否需要初始化enum 每次我想使用它?
  2. 声明为数组并检查输入是否是该数组的一部分。

我想知道VBA在效率和可读性方面哪个更好?

最佳答案

您可以运行一个简单的数组测试,如下所示,将单词添加到单个列表中:

Sub Main1()
arrList = Array("cat", "dog", "dogfish", "mouse")
Debug.Print "dog", Test("dog")   'True
Debug.Print "horse", Test("horse") 'False
End Sub

Function Test(strIn As String) As Boolean
Test = Not (IsError(Application.Match(strIn, arrList, 0)))
End Function

或者,如果您想要进行更详细的搜索并返回子字符串匹配列表以供进一步工作,请使用Filter。如果查找 dog

,此代码将通过 vFilter 返回以下内容

dog, dogfish

在这种特殊情况下,代码会检查 dog 是否完全匹配。

Sub Main2()
arrList = Array("cat", "dog", "dogfish", "mouse")
Debug.Print "dog", Test1("dog")
Debug.Print "horse", Test1("horse")
End Sub

Function Test1(strIn As String) As Boolean
Dim vFilter
Dim lngCnt As Long
vFilter = Filter(arrList, strIn, True)
For lngCnt = 0 To UBound(vFilter)
    If vFilter(lngCnt) = strIn Then
        Test1 = True
        Exit For
    End If
Next
End Function

关于vba - 检查一个值是否是列表的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21378974/

相关文章:

VBA 错误处理不适用于 Excel 2016 中的一位用户

excel - 试图从多个网页获取数据到excel

vba - Do-While 循环 (VBA) 不循环

excel - 如何在Excel中将两种不同的日期格式更改为单一日期格式

要连接的 Excel 宏

vba - 向负责的用户发送电子邮件

excel - 在 VBA 中,用文本值替换公式输出

vba - 将复制的文件从剪贴板粘贴到文件系统

vba - 将单元格值从一个工作表复制到另一个工作表作为字符串

excel - 使用 VBA 复制不相交的范围