【发布时间】:2014-12-25 11:43:24
【问题描述】:
以下代码适用于一个值,但是,有没有一种方法可以为多个值执行此操作并找到?
Set Rng = Range("C1:B50").Find(What:="House", LookAt:=xlWhole, LookIn:=xlValues)
Rng.Offset(, -1).Value = "John"
【问题讨论】:
以下代码适用于一个值,但是,有没有一种方法可以为多个值执行此操作并找到?
Set Rng = Range("C1:B50").Find(What:="House", LookAt:=xlWhole, LookIn:=xlValues)
Rng.Offset(, -1).Value = "John"
【问题讨论】:
您可以循环访问一个或两个数组,在循环进行时将条件和值传递到您的代码中。
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 的问题在于知道何时退出循环,否则您将重复搜索 John,因为您没有更改原始值。为了涵盖这一点,我正在更改值,然后在事后删除更改。我添加的字符是 ASCII 215(例如 × 或 times 符号)。我相信添加或删除该符号不会以任何方式影响您的数据。
【讨论】:
v 将在同一位置从每个数组中拉出匹配对。例如如果 v=2,则 vFINDs(v) 为 School 且 vVALUs(v) 为 Bob(这些变量数组从零开始)。