2014-02-24 121 views
0

是否可以将.find一次用于多个字符串?例如,对多个字符串使用.find VBA

worksheet.find(什么:= “字符串1”, “字符串1”, “STRING3”,等...)

它现在无法正常工作,因为它期待After参数,但我需要检查表格中是否有一组字符串,以准确确定需要通读的行数(我的宏从工作簿中获取数据并将其张贴到另一个工作簿中)。

我知道我总是可以使用一个巨大的If Or声明并循环遍历所有的行和列,我只是想用.find会更清洁。

+0

你想要包含**任何**字符串的第一个单元格,还是想要全套单元格? –

+0

包含任何的第一个单元格。我得到所有数据的Excel表格在不同地方都有值,所以我只需要第一个实例来获取需要从中获取数据的行数。 – PointXIV

回答

1

你不能.find和.find做到这一点是非常低效的,循环使用IF,并且,如果你想避免大的或做:

if instr("st1#st2#st3#...",cells(..,..)) & "#")>0 then 

单元格值“保罗”

比赛

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

不匹配

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

不匹配

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

是的,我想我只需要用'If Or'做一个循环。不能做'instr',因为我需要直接匹配。谢谢! – PointXIV

+0

你是什么意思,为什么你不能直接使用instr? – CRondao

+0

不是'instr'检查字符串是否在整个单元格中,而不是直接匹配?有一种可能性,表格会包含读取'''String1'More Text“'和'String1''的单元格,并且我只希望它匹配它,如果它是'”String1“'。 – PointXIV

0

您可以使用双for循环,其中用于环外将迭代虽然所有的细胞内for循环的搜索你看串每个单元,并使用.find功能。它会发现第一次发生,你可以做任何你想做的事情。

组RNG = [范围要搜索](假设这是一个列,可以通过添加另一个for循环调整对于2D阵列代码)的搜索字符串的 串[] =阵列

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 
+0

这就是我迄今为止所做的,只是要看看是否有更快,更干净的方式来做到这一点。 “if”语句中有大约14个“Or”。 – PointXIV