Ich denke, Sie werden einige VBA müssen dies tun, . Und es wird kein super einfaches Zeug sein. @ Gary'sStudent hat ein großartiges Beispiel dafür, wie man Zahlen von einer großen Zeichenkette ergreift. Wenn Sie etwas benötigen, das für Ihr Szenario spezifischer ist, müssen Sie die Zeichenfolge Wort für Wort syntaktisch analysieren und herausfinden, ob sie in der URL auf eine Verfolgungsnummer trifft.
etwa wie folgt den Trick:
Function getTrackingNumber(bigMessage As String, numberPosition As Integer) As String
Dim intStrPos As Integer
Dim arrTrackNumbers() As Variant
'create a variable to hold characters we'll use to identify words
Dim strWorkSeparators As String
strWordSeparators = "()=/<>?. " & vbCrLf
'iterate through each character in the big message
For intStrPos = 1 To Len(bigMessage)
'Identify distinct words
If InStr(1, strWordSeparators, Mid(bigMessage, intStrPos, 1)) > 1 Then 'we found the start of a new word
'if foundTrackNumber is true, then this must be a tracking number. Add it to the array of tracking numbers
If foundTrackNumber Then
'keep track of how many we've found
trackNumbersFound = trackNumbersFound + 1
'redim the array in which we are holding the track numbers
ReDim Preserve arrTrackNumbers(0 To trackNumbersFound - 1)
'add the track
arrTrackNumbers(trackNumbersFound - 1) = strword
End If
'Check to see if the word that we just grabbed is "tracknumber"
If strword = "tracknumbers" Then
foundTrackNumber = True
Else
foundTrackNumber = False
End If
'set this back to nothing
strword = ""
Else
strword = strword + Mid(bigMessage, intStrPos, 1)
End If
Next intStrPos
'return the requested tracking number if it exists.
If numberPosition > UBound(arrTrackNumbers) + 1 Then
getTrackingNumber = ""
Else
getTrackingNumber = arrTrackNumbers(numberPosition - 1)
End If
End Function
Dies ist ein UDF, so dass Sie es in Ihrem Arbeitsblatt als Formel mit verwenden können:
=getTrackingNumber(A1, 1)
, die die erste zurück Tracking-Nummer, die es in Zelle A1 trifft. Folglich wird die Formel
die zweite Verfolgungsnummer usw. zurückgeben.
Dies wird jedoch keine schnelle Funktion sein, da es die große Zeichenfolge Zeichen für Zeichen analysiert und Entscheidungen trifft. Wenn Sie die Antwort von Gary's Student in etwas Umsetzbares streiten können, ist es bei größeren Daten viel schneller und weniger CPU-intensiv. Wenn Sie jedoch zu viele Ergebnisse bekommen und dies wie ein Chirurg tun müssen, dann sollte dies Sie in den Ballpark bringen.
Dieser Code ist wirklich ordentlich! ..................... Ich kann es selbst benutzen. –
Danke @ Gary'sStudent Ich bin immer noch nicht überzeugt, dass dies das Beste ist. Es ist definitiv reif für ein Refactoring. Ich könnte mit einem iterativen 'replace()' -Funktionswrapper basteln, der 'strWordSeparators' als Eingabe nimmt. Wenn das schnell genug ist, wäre es toll, die Ausgabe an 'split()' zu übergeben, da es viel schneller wäre, ein Array von Wörtern zu iterieren, als es eine Zeichenkette wäre. Speziell für große eingehende Saiten. – JNevill
Ich stimme zu, aber auch der Code ist sehr gut gepostet –