使用VBA为多个字符串使用.find

使用VBA为多个字符串使用.find,vba,excel,Vba,Excel,是否可以一次对多个字符串使用.find?比如说, 工作表.查找(内容:=“String1”、“String1”、“String3”等) 它现在不起作用,因为它需要After参数,但我需要检查工作表中的特定字符串集,以准确确定需要读取的行数(我的宏从工作簿中获取数据并将其发布到另一个工作簿) 我知道我总是可以使用一个巨大的If或语句循环所有的行和列,我只是想使用。find会更干净一些。你不能用。find and。find效率很低,用If循环,如果你想避免一个大的Or,那么: if instr("s

是否可以一次对多个字符串使用
.find
?比如说,

工作表.查找(内容:=“String1”、“String1”、“String3”等)

它现在不起作用,因为它需要
After
参数,但我需要检查工作表中的特定字符串集,以准确确定需要读取的行数(我的宏从工作簿中获取数据并将其发布到另一个工作簿)


我知道我总是可以使用一个巨大的
If或
语句循环所有的行和列,我只是想使用
。find
会更干净一些。

你不能用。find and。find效率很低,用If循环,如果你想避免一个大的Or,那么:

if instr("st1#st2#st3#...",cells(..,..)) & "#")>0 then
单元值“保罗”

匹配

没有对手

MsgBox InStr("Peter#Paul#Ringo#", "Pau" & "#")
MsgBox InStr("Peter#Paul#Ringo#", "Paul Mc" & "#")
没有对手

MsgBox InStr("Peter#Paul#Ringo#", "Pau" & "#")
MsgBox InStr("Peter#Paul#Ringo#", "Paul Mc" & "#")

可以使用双for循环,其中外部for循环将遍历所有单元格,内部for循环将在每个单元格中搜索要查看的字符串,并使用.find函数。它会发现第一次发生,你可以做任何你想做的事

set rng=[您正在搜索的范围](假设这是一列,可以通过添加另一个for循环来调整二维数组的代码) strings[]=搜索字符串的数组

For i = 1 to rng.cells.count
    For j = 0 to strings.count
        found = instr(strings[j],rng.cells(i,1)
        If found >0 then
            'whatever you want to do
        Endif
    Next j
Next i

是要包含任何字符串的第一个单元格,还是要完整的单元格集??包含任何字符串的第一个单元格。我从中获取数据的excel表都有不同位置的值,所以我只需要第一个实例来获取需要从中提取数据的行数。是的,我想我只需要使用
If或
进行循环。无法执行安装,因为我需要直接匹配。谢谢什么意思,为什么不能将instr与直接匹配一起使用?不检查字符串是否在整个单元格中,而不是直接匹配吗?有一种可能性是,工作表中的单元格可以读取
“'String1'更多文本”
,也可以只读取
“String1”
,我只希望它匹配
“String1”
。是和否:)在这种情况下,您将单元格值(第二个参数)与值列表(第一个参数)匹配。只要您在第一个参数中写入精确匹配(“String1#String2#……”),它就会工作。问题是确保这不会发生。这会比“如果”或“如果”更有效吗?我遇到的最后一个问题是让它搜索整个工作簿,直到找到为止。这就是我到目前为止一直在做的事情,只是想看看是否有一种更快、更干净的方法来做到这一点。在
if
语句中大约有14个
s。