使用Excel进行查找marco灵活地覆盖不同的参考长度

我有一个macros正在search用户可能input的invoice number 3个工作表(总共超过260万条logging)。

数字进入一个单元格,它也有一个查阅参考。 forms: 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行,我尝试用FINDreplace,但是我认为我没有把它做对(我无法正常工作!)。

我会很感激帮助这个sorting。

我有一个进一步的vLookup是从最后一个字符,并从一个单独的工作表返回文本。

尝试这个

 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