मेरे पास एक मैक्रो है जो एक के लिए 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