2014-02-24 50 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