/ / विभिन्न संदर्भ लंबाई को कवर करने के लिए एक एक्सेल लुकअप मार्को लचीला बनाना - एक्सेल, एक्सेल-वीबीए, vlookup, vba

विभिन्न संदर्भ लंबाई को कवर करने के लिए एक्सेल लुकअप मार्को लचीला बनाना - एक्सेल, एक्सेल-वीबीए, vlookup, vba

मेरे पास एक मैक्रो है जो एक के लिए 3 वर्कशीट खोज रहा है invoice number कि एक उपयोगकर्ता प्रवेश कर सकता है (2.6 मिलियन से अधिक रिकॉर्ड में)।

संख्याएं एक ही सेल में आती हैं जिसमें इसके बारे में एक संदर्भ भी है। प्रपत्र: 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