Ich habe eine Formel in Excel VBA erstellt. die Zeichenfolge mit der Zahl aus einer Zelle extrahieren. Ein String enthält zum Beispiel: "121A Nariman Street" Es wird "121A" extrahiert.
Unten ist der Code
Function DoorNo(ADRESS)
Dim AddressArray() As String
AddressArray = Split(ADRESS)
Dim i As Integer
For i = 0 To UBound(AddressArray)
Dim iCnt As Integer
For iCnt = 1 To Len(AddressArray(i))
If IsNumeric(Mid(AddressArray(i), iCnt, 1)) Then
DoorNo = AddressArray(i)
Next iCnt
Next i
End Function
Wenn sich jedoch zwei Zahlen in einer Zeichenfolge befinden, wird die zweite zurückgegeben, z. B. "121A Nariman Street, 12. Block". Es wird "12." zurückgegeben.
Ich möchte, dass diese Funktion nur die erste Zeichenfolge zurückgibt. Wie macht man das ?
Ich bin sehr neu in Excel VBA.
vba
microsoft-excel-2013
Akhil Kumar
quelle
quelle
End If
Antworten:
Wenn alle Adressen mit einer Zahl beginnen, können Sie den ersten Artikel zurückgeben:
Andernfalls beenden Sie die Funktion, wenn die erste Ziffer gefunden wurde:
quelle
Bei Ihrer Frage geht es darum, zu entscheiden, wann Sie zum ersten Mal auf etwas stoßen, bei dem die
IsNumeric()
Rückgabe wahr istDiese aktualisierte Version sollte es tun
Wenn Sie alle anderen Fehler ignorieren (und Ihre derzeitige Logik beibehalten, wo dies möglich ist), können Sie die Logik verwenden, indem Sie eine
Exit For
(und dieIF
Anweisung schließen).Exit For
verlässt dieFor
Schleife. Sie tun dies, nachdem das erste Wort analysiert und erstellt wurde.Dann prüfen Sie einfach, ob das neue erste Wort (
DoorNo
) einen Wert hat oder nicht. Wenn dies der Fall ist, weisen Sie es zu und beenden Sie die SchleifeDa Ihre Funktion auch etwas zurückgibt, sollten Sie dies mit explizit angeben
As
Es macht jedoch keinen Sinn, da Ihre gesamte aktuelle Logik prüft, ob ein Zeichen in der Zeichenfolge numerisch ist, und es zurückgibt, wenn dies der Fall ist! Dies bedeutet, dass die Adresse a12 (falls vorhanden) niemals abgeholt werden würde. Wo als mein Geschäft, das keine Nummer hat, aber den blöden Namen von hat,
5tars C3entre
würde von Ihrer Logik akzeptiertOhne die Situation, Ihre Logik und die Art der Werte zu kennen, die Sie erhalten (z. B. 12 House, 12 House, 12a House, House, Other usw.), ist es schwierig, mehr zu helfen, aber dies sollte Sie zum Laufen bringen
quelle
Sie müssen dafür nicht einmal VBA verwenden.
Ich verwende das RegEx- Add-In " Suchen / Ersetzen" , um Funktionen für reguläre Ausdrücke in Excel zu erhalten.
( Ich bin in keiner Weise mit diesem Add-In oder seinem Autor verbunden, ich bin nur ein begeisterter Benutzer. )
Damit können Sie einfach diese Formel verwenden:
=RegExFind(A1,"\d+[a-zA-Z]*")
In Bezug auf Ihren Code:
Schnellkorrektur Sie sollten die äußere
For
Schleife verlassen, sobald Sie eine Nummer gefunden habenlänger fix:
for
,do ... loop
wäre effizienter (oder verwende reguläre Ausdrücke in Ihrem Code, wenn Sie davon überzeugt sind, Code zu schreiben)quelle