Bill muss häufig Informationen in ein Arbeitsblatt importieren, damit er sie für sein Unternehmen verarbeiten kann. In Bills Situation besteht einer der ersten Schritte darin, alle 8-Bit-ASCII-Zeichen zu entfernen, die möglicherweise in den importierten Daten enthalten sind. Diese Zeichen müssen nicht durch irgendetwas ersetzt werden. Sie müssen nur gelöscht werden, damit nur noch 7-Bit-ASCII-Zeichen übrig bleiben. Bill fragt sich, ob es einen einfachen Weg gibt, dies zu tun, vielleicht mit einem Makro.

Abhängig von den Eigenschaften der Daten, mit denen Sie beginnen, gibt es einige Möglichkeiten, wie Sie dieses Problem angehen können. Angenommen, Sie haben nur 8-Bit-Zeichen in Ihrem Arbeitsblatt, dann sind die einzigen Zeichencodes, die für Zeichen verwendet werden können, 0 bis 255. Wenn Sie Ihre Daten auf nur 7-Bit-Zeichen beschränken möchten, bedeutet dies, dass Sie nur Dinge möchten Sie können also ein Makro verwenden, um auf einfache Weise nach Zeichen im Bereich von 128 bis 255 zu suchen und diese einfach zu löschen. Dieses Makro verfolgt diesen Ansatz:

Sub Remove8Bit1()

Cells.Select     For i = 128 To 255         X = Chr(i)

Selection.Replace What:=X, Replacement:="", _           LookAt:=xlPart, SearchOrder:=xlByRows, _           MatchCase:=False, SearchFormat:=False, _           ReplaceFormat:=False     Next End Sub

Der Ansatz findet nur die Werte in Ihrem Arbeitsblatt, die im 8-Bit-Bereich liegen. Es wird nichts berührt, was im 8-Bit-Bereich liegt, der tatsächlich durch eine Formel erstellt wird. (In den meisten Fällen sollte dies kein Problem sein. Wenn es sich um ein Problem handelt, müssen Sie die Formeln ändern, um die fehlerhaften Ergebnisse zu erzielen.)

Wenn Ihre Daten Unicode-Zeichen enthalten, sollten Sie einen anderen Ansatz verwenden. Technisch gesehen sind Unicode-Zeichen keine 8-Bit-Zeichen. Sie bestehen aus 16-Bit-Zeichen und können Zeichencodewerte im Bereich von 0 bis 65.535 aufweisen. Da Sie alles mit einem Wert über 127 ignorieren möchten, wird die Verwendung des zuvor beschriebenen suchbasierten Ansatzes unhandlich – Sie würden am Ende mehr als 65.000 Suchvorgänge anstelle von nur 128 durchführen.

Ein besserer Ansatz besteht darin, einfach alle Zeichen in allen ausgewählten Zellen zu betrachten und sie zu ignorieren, wenn sie einen Zeichencode über 127 haben.

Dies ist der Ansatz des folgenden Makros:

Sub Remove8Bit2()

Dim rngCell As Range     Dim intChar As Integer     Dim strCheckString As String     Dim strCheckChar As String     Dim intCheckChar As Integer     Dim strClean As String

For Each rngCell In Selection         strCheckString = rngCell.Value         strClean = ""

For intChar = 1 To Len(strCheckString)

strCheckChar = Mid(strCheckString, intChar, 1)

intCheckChar = Ascw(strCheckChar)

If intCheckChar < 128 Then                 strClean = strClean & strCheckChar             End If         Next intChar         rngCell.Value = strClean     Next rngCell End Sub

Beachten Sie, dass das Makro die Ascw-Funktion anstelle der herkömmlichen Asc-Funktion verwendet, um Unicode-Werte anzuzeigen.

_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 (3142) 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: