2014-10-29 85 views
0

下面的代碼適用於一個值,但是有沒有一種方法可以爲多個值執行此操作並找到?VBA - 查找具有多個值的多個文本偏移量

設置RNG =範圍( 「C1:B50」)找到(什麼:= 「豪斯醫生」,注視:= xlWhole,看着:= xlValues)

Rng.Offset(-1)。 VALUE =「約翰」

任何幫助非常讚賞

回答

0

你可以通過一個或兩個數組循環,傳遞標準和值到您的代碼迴路的進展。

Dim rng As Range, rang As Range, v As Long, vFINDs As Variant, vVALUs As Variant 

vFINDs = Array("House", "Barn", "School") 
vVALUs = Array("John", "Susan", "Bob") 
Set rang = Range("C1:B50") 

For v = LBound(vFINDs) To UBound(vFINDs) 
    Set rng = rang.Find(what:=vFINDs(v), lookat:=xlWhole, LookIn:=xlValues) 
    Do While Not rng Is Nothing 
     rng.Value = Chr(215) & rng.Value & Chr(215) 
     rng.Offset(0, -1).Value = vVALUs(v) 
     Set rng = rang.FindNext(after:=rng) 
    Loop 
    rang.Replace what:=Chr(215), replacement:=vbNullString, lookat:=xlPart 
Next v 

Set rng = Nothing 
Set rang = Nothing 

附錄:我已經通過多個匹配成立的.FindNext循環。 .FindNext的問題是知道何時開始循環,或者您將反覆搜索約翰,因爲您沒有更改原始值。爲了彌補這一點,我正在改變價值,然後在事後刪除這些變化。我要添加的字符是ASCII 215(例如×或時間符號)。我相信添加或刪除該符號不會以任何方式影響您的數據。

+0

謝謝Jeeped,這會讓我匹配每個發現的價值,例如房子=約翰,穀倉=蘇珊,學校=鮑勃等 – Elixir 2014-10-29 21:11:57

+0

@ user3512530 - 如果你保持陣列的大小相同,那麼'用作增量的v'將把匹配對拉出相同的位置。例如如果v = 2,那麼vFIND(v)是* School *並且vVALU(v)是* Bob *(這些變體陣列是基於零的)。 – Jeeped 2014-10-29 21:34:43

+0

代碼工作很好,但數據可以改變,不固定,有沒有一種方法來匹配文本,無論它在哪裏? 例如,如果我移動重複的房屋和平坦的宏將匹配的值無論細胞位置? – Elixir 2014-10-30 09:37:04