/ /さまざまな参照長をカバーするためにExcelルックアップマルコを柔軟にする-excel、excel-vba、vlookup、vba

さまざまな参照の長さをカバーするためにExcelルックアップmarcoを柔軟にする - excel、excel-vba、vlookup、vba

3つのワークシートで検索しているマクロがあります invoice number ユーザーが入力する可能性のあるもの(合計で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は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