Suchen der ersten Nicht-Ziffer in einem Textwert (Microsoft Excel)
Tony hat eine Reihe von Daten in einem Arbeitsblatt, das aus Ziffern und anderen Zeichen besteht. Zum Beispiel könnte er eine Zelle haben, die „1234567Blue“ enthält. Tony möchte in der Lage sein, die Zeichenposition herauszufinden, an der das erste nichtstellige Zeichen auftritt. Im Beispiel des Textes „1234567Blue“ möchte Tony herausfinden, dass sich das erste nichtstellige Zeichen an Position 8 befindet.
Es gibt zwei Möglichkeiten, um den gewünschten Wert zu erzielen. Die erste besteht darin, eine Array-Formel zu verwenden, um die Position zu berechnen. Die folgende Array-Formel (eingegeben mit Strg + Umschalt + Eingabetaste) funktioniert in den meisten Fällen:
=MATCH(TRUE,ISERROR(VALUE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))),0)
Die einzige Instanz, in der diese Arrayformel nicht funktioniert, ist, wenn die Zelle A1 entweder leer ist oder einen streng numerischen Wert enthält. Wenn Ihre Liste diese Art von Daten enthält (oder überhaupt keine Daten), sollten Sie eine etwas längere Array-Formel verwenden:
=IF(LEN(A1)=0,0,MIN(IF(1ISNUMBER(1MID(A1,ROW(INDIRECT("A1:A"& LEN(A1))),1))=0,ROW(INDIRECT("A1:A"&LEN(A1))),LEN(A1)+1)))* (ISNUMBER(A1)=FALSE)
Denken Sie daran, dass dies eine einzelne Array-Formel ist, die mit Strg + Umschalt + Eingabetaste eingegeben wird. Fälle, in denen A1 keine nichtstelligen Zeichen enthält (wie in einer leeren Zelle oder einem Wert wie „123“), werden ordnungsgemäß behandelt.
Die andere Möglichkeit, die Position des ersten nichtstelligen Zeichens herauszufinden, besteht darin, eine benutzerdefinierte Funktion zu erstellen. Es gibt viele verschiedene Möglichkeiten, wie ein solches Makro implementiert werden kann. Eine der einfachsten Möglichkeiten, das Makro zu implementieren, besteht darin, einfach jedes Zeichen in dem zu durchlaufen, was an das Makro übergeben wird. Wenn ein Zeichen gefunden wird, das außerhalb des ASCII-Codebereichs für Ziffern (48 bis 57) liegt, wissen Sie, dass Sie die erste Position gefunden haben. Das folgende Makro zeigt eine Möglichkeit, diese Art von Technik auszuführen:
Function FirstNonDigit(str As String) Dim iChar As Integer Dim iPos As Integer Dim J As Integer Application.Volatile iPos = 0 For J = 1 To Len(str) iChar = Asc(Mid(str, J, 1)) If iChar <= 47 Or iChar >= 58 Then iPos = J Exit For End If Next J FirstNonDigit = iPos End Function
Um die Funktion zu verwenden, verwenden Sie einfach eine Formel wie diese in Ihrem Arbeitsblatt:
=FirstNonDigit(A1)
Wenn die Zelle, auf die Sie verweisen, leer ist oder nur Ziffern enthält, gibt die Funktion einen Wert von 0 zurück.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (3364) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: