使Excel查找marco灵活,以涵盖不同的参考长度

时间:2015-09-14 14:21:06

标签: excel excel-vba vlookup vba

我有一个宏,它正在搜索用户可能输入的invoice number的3个工作表(总共超过260万条记录)。

这些数字来自单个单元格,其中也有一个查找引用。形式:invoicenumber, reference_letter

最初,这很好,因为invoice numbers是10位数。现在它们可以是任何东西,但在单个字符引用之前总是有一个逗号。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address <> "$A$5" Then Exit Sub
If Target.Value = "" Then Exit Sub

Application.EnableEvents = False

Range("B5") = ""

For Each sh In Sheets
    If sh.Name = ActiveSheet.Name Then GoTo 111
    sh.Range("B1").FormulaArray = "=IFERROR(MATCH(Main!A5,LEFT(A:A,10),0),"""")"
    If sh.Range("B1") <> "" Then
        x = sh.Range("B1")
        Range("B5") = Right(sh.Range("A" & x), 1)
        Exit For
    End If
111
Next sh

Application.EnableEvents = True

If x = "" Then MsgBox "Not Found!"

End Sub

我知道这10个字符串限制在第8行,我尝试用FIND替换,但我认为我没有正确(因为我无法让它工作!)。

我很感激能帮助您完成这项工作。

我还有一个vLookup,它取出了最后一个字符并从单独的工作表中返回文本。

1 个答案:

答案 0 :(得分:1)

试试这个

Private Sub Worksheet_Change(ByVal Target As Range)
Dim InvLen As Integer
If Target.Address <> "$A$5" Then Exit Sub
If Target.Value = "" Then Exit Sub
Application.EnableEvents = False
Range("B5") = ""
    For Each sh In Sheets
        If sh.Name = ActiveSheet.Name Then GoTo 111
        InvLen = Len(Worksheets("Main").Range("A5").value)
        sh.Range("B1").FormulaArray = "=IFERROR(MATCH(Main!A5,LEFT(A:A," & InvLen & "),0),"""")"
        If sh.Range("B1") <> "" Then
            x = sh.Range("B1")
            Range("B5") = Right(sh.Range("A" & x), 1)
            Exit For
        End If
111
    Next sh
Application.EnableEvents = True
If x = "" Then MsgBox "Not Found!"
End Sub