Hinzufügen von Leerzeichen vor Großbuchstaben (Microsoft Excel)
Muhammad hat eine lange Liste von Firmennamen in einem Arbeitsblatt. Bei jedem Firmennamen wurden irgendwie alle Leerzeichen entfernt, so dass sie (zum Beispiel) als „AstroPhysics“ anstelle von „Astro Physics“ angezeigt werden. Muhammad benötigt eine Möglichkeit, alle Firmennamen zu verarbeiten, um ein Leerzeichen zwischen dem Auftreten eines Großbuchstabens einzufügen, mit Ausnahme des ersten Buchstabens in der Zelle. Er fragt sich, ob es einen einfachen Weg gibt, dies zu tun.
Es gibt einige Möglichkeiten, wie Sie die Leerzeichen hinzufügen können. Bevor Sie zu den unvermeidlichen makrobasierten Lösungen gelangen, sollten Sie die Firmennamen untersuchen. Es kann sein, dass zwischen jedem Wort im Namen anstelle eines Leerzeichens einfach ein nicht druckbares Zeichen steht. Sie können dies feststellen, indem Sie die Zelle bearbeiten, die Einfügemarke einige Zeichen vor einem Großbuchstaben positionieren und dann mehrmals auf den Rechtspfeil drücken. Sie sollten sehen, dass die Einfügemarke nach jedem Drücken ein einzelnes Leerzeichen nach rechts verschiebt. Wenn es zu „zögern“ scheint, wo sich das Leerzeichen befinden soll, befindet sich dort ein nicht druckbares Zeichen.
In diesem Fall besteht die beste Lösung darin, einen Such- und Ersetzungsvorgang durchzuführen, um das nicht druckbare Zeichen durch ein tatsächliches Leerzeichen zu ersetzen. (Sie können das nicht druckbare Zeichen auswählen – halten Sie die Umschalttaste gedrückt, während Sie den Rechtspfeil über die Stelle drücken, an der Sie es glauben – und kopieren Sie es. Fügen Sie es dann in das Feld Suchen nach ein, um Ihre Suche durchzuführen.)
Angenommen, die Daten enthalten keine nicht druckbaren Zeichen, können Sie auch versuchen, einen nicht makroökonomischen Ansatz zu verwenden. Der vielleicht einfachste Ansatz besteht darin, eine oder zwei Hilfsspalten hinzuzufügen. Im ersten können Sie eine Formel eingeben, um die Position des zweiten Großbuchstabens innerhalb des Firmennamens herauszufinden. Angenommen, der Firmenname befindet sich in Zelle A1, sollte die folgende Formel als Array-Formel eingegeben werden:
=SMALL(FIND(0,SUBSTITUTE(A1,CHAR(ROW(INDIRECT("65:90"))),0)&0),2)
Wenn diese Formel in Zelle B1 eingegeben wurde, können Sie das Leerzeichen wie folgt in den ursprünglichen Firmennamen einfügen:
=LEFT(A1,B1-1)&" " & RIGHT(A1,(LEN(A1)-B1)+1)
Dieser Ansatz hat jedoch einen großen Nachteil: Es wird davon ausgegangen, dass Ihre Originaldaten einem sehr strengen Format folgen. Es funktioniert hervorragend mit Firmennamen, die mit einem Großbuchstaben beginnen und nur ein Leerzeichen einfügen müssen. Wenn der Name nicht zu diesen Parametern passt, funktioniert er nicht wie erwartet.
Natürlich können Sie diese Probleme lösen, wenn Sie die Leerzeichen mit einem Makro einfügen. Das Folgende ist ein einfacher Ansatz, der jedes Zeichen in der Zelle betrachtet. Wenn das Zeichen ein Großbuchstabe ist, wird vor dem Zeichen ein Leerzeichen eingefügt. Wenn das Makro fertig ist, wird die Zeichenfolge wieder in die Zelle gestopft.
Function Add_Spaces(ByVal sText As String) As String Dim CharNum As Long Dim FixedText As String Dim CharCode As Long FixedText = Left(sText, 1) For CharNum = 2 To Len(sText) CharCode = Asc(Mid(sText, CharNum, 1)) If CharCode >= 65 And CharCode <= 90 Then FixedText = FixedText & " " & Mid(sText, CharNum, 1) Else FixedText = FixedText & Mid(sText, CharNum, 1) End If Next CharNum Add_Spaces = FixedText End Function
Die Verwendung des Makros ist einfach. Wenn sich der Firmenname in Zelle A1 befindet, wird Folgendes verwendet:
=Add_Spaces(A1)
Ein kompakterer Ansatz besteht darin, sich auf reguläre Ausdrücke zu verlassen, um die Großbuchstaben zu lokalisieren und ein Leerzeichen einzufügen, wie im Folgenden gezeigt:
Function SplitCaps(str As String) As String Dim objRegex As Object Set objRegex = CreateObject("vbscript.regexp") With objRegex .Global = True .Pattern = "([a-z])([A-Z])" SplitCaps = .Replace(str, "$1 $2") End With End Function
Diese spezielle Makrotechnik erfordert, dass Sie reguläre Ausdrücke aktivieren. Sie tun dies im VB-Editor, indem Sie Extras | wählen Verweise und scrollen Sie dann durch die verfügbaren Verweise, um die Option Microsoft VBScript Regular Expressions 5.5 zu finden. Stellen Sie sicher, dass das Kontrollkästchen links neben der Referenz aktiviert ist, und klicken Sie dann auf OK. Sie können dann die SplitCaps-Funktion in Excel genauso verwenden wie die Add_Spaces-Funktion.
Natürlich hängt die Angemessenheit eines Ansatzes zum großen Teil von den Eigenschaften der Daten ab, mit denen Sie arbeiten. Wenn Ihre ursprünglichen Firmennamen mehrere aufeinanderfolgende Großbuchstaben enthalten (z. B. „ABCCorp“), werden in Ihrer Ausgabe zu viele Leerzeichen angezeigt, z. B. „ABCCorp“. wird zu „A B C Corp.“ anstelle von „ABC Corp.“. Auch Nicht-Buchstaben-Zeichen können einen Schraubenschlüssel in die Werke werfen, so dass „H & M“
wird zu „H & M“ oder bleibt als „H & M“ (abhängig vom verwendeten Makroansatz).
Um einige dieser seltsamen Firmennamen zu überwinden, können Sie einen anderen Makroansatz ausprobieren, bei dem überprüft wird, ob mehrere aufeinanderfolgende Großbuchstaben vorhanden sind, und die Ausgabe entsprechend angepasst wird.
Sub AddSpaces() Dim i As Integer Dim j As Integer Dim PriorCap As Boolean Dim temp As String j = 1 Do While Cells(j, 2) <> "" Cells(j, 3) = "" PriorCap = True For i = 1 To Len(Cells(j, 2)) Select Case Mid(Cells(j, 2), i, 1) Case "A" To "Z", "-" If PriorCap = False Then Cells(j, 3) = Cells(j, 3) & " " & _ Mid(Cells(j, 2), i, 1) Else Cells(j, 3) = Cells(j, 3) & _ Mid(Cells(j, 2), i, 1) End If PriorCap = True Case Else Cells(j, 3) = Cells(j, 3) & _ Mid(Cells(j, 2), i, 1) PriorCap = False End Select Next i j = j + 1 Loop End Sub
_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 (12810) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365.