0
下面的代碼適用於一個值,但是有沒有一種方法可以爲多個值執行此操作並找到?VBA - 查找具有多個值的多個文本偏移量
設置RNG =範圍( 「C1:B50」)找到(什麼:= 「豪斯醫生」,注視:= xlWhole,看着:= xlValues)
Rng.Offset(-1)。 VALUE =「約翰」
任何幫助非常讚賞
下面的代碼適用於一個值,但是有沒有一種方法可以爲多個值執行此操作並找到?VBA - 查找具有多個值的多個文本偏移量
設置RNG =範圍( 「C1:B50」)找到(什麼:= 「豪斯醫生」,注視:= xlWhole,看着:= xlValues)
Rng.Offset(-1)。 VALUE =「約翰」
任何幫助非常讚賞
你可以通過一個或兩個數組循環,傳遞標準和值到您的代碼迴路的進展。
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(例如×或時間符號)。我相信添加或刪除該符號不會以任何方式影響您的數據。
謝謝Jeeped,這會讓我匹配每個發現的價值,例如房子=約翰,穀倉=蘇珊,學校=鮑勃等 – Elixir 2014-10-29 21:11:57
@ user3512530 - 如果你保持陣列的大小相同,那麼'用作增量的v'將把匹配對拉出相同的位置。例如如果v = 2,那麼vFIND(v)是* School *並且vVALU(v)是* Bob *(這些變體陣列是基於零的)。 – Jeeped 2014-10-29 21:34:43
代碼工作很好,但數據可以改變,不固定,有沒有一種方法來匹配文本,無論它在哪裏? 例如,如果我移動重複的房屋和平坦的宏將匹配的值無論細胞位置? – Elixir 2014-10-30 09:37:04