【问题标题】:How can I find multiple text offset with multiple values?如何找到具有多个值的多个文本偏移量?
【发布时间】:2014-12-25 11:43:24
【问题描述】:

以下代码适用于一个值,但是,有没有一种方法可以为多个值执行此操作并找到?

Set Rng = Range("C1:B50").Find(What:="House", LookAt:=xlWhole, LookIn:=xlValues)

Rng.Offset(, -1).Value = "John"

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    您可以循环访问一个或两个数组,在循环进行时将条件和值传递到您的代码中。

    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 符号)。我相信添加或删除该符号不会以任何方式影响您的数据。

    【讨论】:

    • 感谢 Jeeped,这是否允许我将每个查找匹配到一个值,例如 house = John 、 Barn = Susan 、School = Bob 等
    • @user3512530 - 如果保持数组的大小相同,则用作增量的v 将在同一位置从每个数组中拉出匹配对。例如如果 v=2,则 vFINDs(v) 为 School 且 vVALUs(v) 为 Bob(这些变量数组从零开始)。
    • 代码效果很好,但是数据可以改变,而不是固定的,有没有办法匹配文本,不管它在哪里?例如,如果我移动重复的房子并放平,无论单元格位置如何,宏都会匹配这些值?
    • @user3512530 - 恐怕我真的不明白你在这里问什么。如果您想更改问题的条款,则应更改原始帖子或发布新问题。
    • 抱歉,如果 B 列包含 John 的重复项,我希望代码能够识别这一点,并在 A 列中的对面单元格中填入所声明的值,例如House = John 代码提取了第一个字符串 House 但没有将其应用到其余部分 希望有道理,非常感谢您的帮助
    猜你喜欢
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多