【问题标题】:How to match first 6 characters of a cell instead of the whole cell如何匹配单元格的前 6 个字符而不是整个单元格
【发布时间】:2021-11-10 01:55:27
【问题描述】:

专注于:

rows = w2.Columns("A:A").Find(What:=aCell, LookAt:=xlWhole).Row

我试图只匹配单元格的前 6 个字符,而不是查看整个单元格以匹配 (xlwhole)。我研究了 xlpart 和其他一些选项,但都没有成功。

Sub test()
Dim aCell
Dim A, B As Long, rows As Long
Dim w1, w2 As Worksheet
Dim cell As Range

Set w1 = Workbooks("Book1").Sheets("Sheet1")
Set w2 = Workbooks("Book2").Sheets("Sheet1")

A = w1.Cells(w1.Rows.Count, 1).End(xlUp).Row
B = w2.Cells(w2.Rows.Count, 1).End(xlUp).Row

For Each aCell In w1.Range("A2:A" & A)
On Error Resume Next
rows = w2.Columns("A:A").Find(What:=aCell, LookAt:=xlWhole).Row
On Error GoTo 0

If rows = 0 Then

Else
    w2.Range("B" & rows).Value = aCell.Offset(0, 1).Value
End If
rows = 0
Next

End Sub

【问题讨论】:

    标签: excel vba match


    【解决方案1】:

    Find 支持通配符*。使用Left$获取单元格值的前6个字符。

    For Each aCell In w1.Range("A2:A" & A)
       Dim rng As Range
       Set rng = w2.Columns("A:A").Find(What:=Left$(aCell.Value, 6) & "*", LookAt:=xlWhole)
    
       ' First test if the find succeeded
       If Not rng Is Nothing Then
           rng.Offset(,1).Value = aCell.Offset(,1).Value
       End If
    Next
    

    【讨论】:

    • 正是我想要的...谢谢!从现在开始我会记住“左”。
    • 啊。如果w2 中的值只是要匹配的6 个字符,那么您不需要& "*"。如果您想将abcdef123abcdef456 匹配,请保留通配符。
    • 明白。再次感谢!我将使用不同的数据进行确认,但它似乎工作得很好。
    • 我可能会为此创建第二个问题线程...查看上面的代码,知道如何循环宏,因此如果 A 列与 B 列有多个匹配项,它会继续填充用 A 列的数据输出 B 列?
    • 您可以使用FindNext 使用循环查找下一个匹配项。虽然我个人只是使​​用两个Variant 数组并循环遍历数组以找到匹配项,而不是使用Find/FindNext。取决于有多少行。
    猜你喜欢
    • 2019-01-23
    • 2016-10-22
    • 2015-07-08
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多