查找一个范围,其中包含在第二个范围内也以相同顺序存在的值

发布于 2024-12-11 17:10:54 字数 224 浏览 0 评论 0原文

查找范围(例如范围(“A1:A2”))中以相同顺序存在于第二范围(例如范围(“B:B”))中的值的有效方法是什么。

到目前为止我的搜索只提出了两种可能性: 1)使用循环迭代第二个范围。 2) 使用 Range("B:B").Find 搜索“A1”中的值,然后测试连续单元格中 A2 的值。 Range("B:B") 中的值不是唯一的,因此需要继续查找,直到找不到任何值。

还有其他我没有考虑过的选择吗?

What is an efficient way to find values in a range, eg Range("A1:A2"), that exist in the same order within a second range, eg Range("B:B").

My seach has only come up with two possibilities so far:
1) Using a loop to iterate through the second range.
2) Using Range("B:B").Find to search for the value in "A1" and then testing for the value of A2 in the consecutive cell. Values in Range("B:B") is not unique so need to to keep finding until nothing found.

Is there another option I haven't considered?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

喵星人汪星人 2024-12-18 17:10:54

虽然 (2) 听起来很合理,但另一种快速方法是将 B1 和 B2 连接到工作列中的单个单元格中(手动或使用 VBA),对 B2 和 B2 重复操作。 B3 等等,然后在单个查找中匹配组合字符串

[更新]

您可以使用像这样的工作列。 ||连接器用于避免错误匹配,错误检查处理不匹配的情况

Sub ConCatMatch()
    Dim rng1 As Range
    Dim X
    Set rng1 = Range([b1], Cells(Rows.Count, "B").End(xlUp))
    rng1.Offset(0, 1).Columns.Insert
    With rng1.Offset(0, 1)
        .FormulaR1C1 = "=RC[-1]&""||""&R[1]C[-1]"
        X = .Value2
        .EntireColumn.Delete
    End With
    If IsError(Application.Match([a1].Value & "||" & [a2].Value, X, 0)) Then
        MsgBox "No match", vbCritical
    Else
        MsgBox "Match starting at " & rng1.Cells(1).Offset(Application.Match([a1].Value & "||" & [a2].Value, X, 0) - 1, 0).Address(0, 0)
    End If
End Sub

在此处输入图像描述

While (2) sounds sensible, another quick way would be to concatenate B1 and B2 into a single cell in a working column ( manually or with VBA), repeating for B2 & B3 Etc, and then match the combined string in a single lookup

[Update]

You could use a working column like so. The || concatenator is used to avoid false matches, an error check handles the no match situation

Sub ConCatMatch()
    Dim rng1 As Range
    Dim X
    Set rng1 = Range([b1], Cells(Rows.Count, "B").End(xlUp))
    rng1.Offset(0, 1).Columns.Insert
    With rng1.Offset(0, 1)
        .FormulaR1C1 = "=RC[-1]&""||""&R[1]C[-1]"
        X = .Value2
        .EntireColumn.Delete
    End With
    If IsError(Application.Match([a1].Value & "||" & [a2].Value, X, 0)) Then
        MsgBox "No match", vbCritical
    Else
        MsgBox "Match starting at " & rng1.Cells(1).Offset(Application.Match([a1].Value & "||" & [a2].Value, X, 0) - 1, 0).Address(0, 0)
    End If
End Sub

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文