Bill hat eine Textspalte, in der er alle Buchstabeninstanzen durch die Zahl ersetzen muss, die die Position des Buchstabens im Alphabet darstellt. Wenn eine Zelle beispielsweise „T10A22“ enthält, muss Bill die Buchstaben wie „2010122“ ersetzen, wobei T durch 20 und A durch 1 ersetzt wird. Er stellt fest, dass eine beliebige Anzahl von Buchstaben enthalten sein kann jede gegebene Zelle.

Wenn Sie dies nur einmal tun müssen (in einem einzelnen Arbeitsblatt), ist es möglicherweise einfach genug, die Spalte auszuwählen und einfach Suchen und Ersetzen zu verwenden. Sie können nach A suchen und durch 1 ersetzen, nach B suchen und durch 2 ersetzen und so weiter. Es müssten nur 26 Iterationen durchgeführt werden, was zwar lästig klingt, aber in kürzerer Zeit als zum Erstellen eines Makros für die Änderungen erforderlich ist.

Wenn Sie diese Aufgabe jedoch regelmäßig ausführen müssen, ist ein Makro die beste Lösung. Sie können den Find and Replace-Ansatz mithilfe eines Makros folgendermaßen implementieren:

Sub ReplaceLetters1()

Selection.Replace What:="A", Replacement:="1", LookAt:=xlPart, _       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _       ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2     Selection.Replace What:="B", Replacement:="2"

Selection.Replace What:="C", Replacement:="3"

Selection.Replace What:="D", Replacement:="4"

Selection.Replace What:="E", Replacement:="5"

Selection.Replace What:="F", Replacement:="6"

Selection.Replace What:="G", Replacement:="7"

Selection.Replace What:="H", Replacement:="8"

Selection.Replace What:="I", Replacement:="9"

Selection.Replace What:="J", Replacement:="10"

Selection.Replace What:="K", Replacement:="11"

Selection.Replace What:="L", Replacement:="12"

Selection.Replace What:="M", Replacement:="13"

Selection.Replace What:="N", Replacement:="14"

Selection.Replace What:="O", Replacement:="15"

Selection.Replace What:="P", Replacement:="16"

Selection.Replace What:="Q", Replacement:="17"

Selection.Replace What:="R", Replacement:="18"

Selection.Replace What:="S", Replacement:="19"

Selection.Replace What:="T", Replacement:="20"

Selection.Replace What:="U", Replacement:="21"

Selection.Replace What:="V", Replacement:="22"

Selection.Replace What:="W", Replacement:="23"

Selection.Replace What:="X", Replacement:="24"

Selection.Replace What:="Y", Replacement:="25"

Selection.Replace What:="Z", Replacement:="26"

End Sub

Um das Makro zu verwenden, wählen Sie einfach die Zellen aus, die Sie verarbeiten möchten, und führen Sie es dann aus. Sie können auch einen anderen Ansatz verwenden, der auf einer For …​ Next-Schleife beruht:

Sub ReplaceLetters2()

Dim J As Integer

Selection.Replace What:="A", Replacement:="1", LookAt:=xlPart, _         SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _         ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2     For J = 66 To 90         Selection.Replace What:=Chr(J), Replacement:=J - 64     Next J End Sub

Während die erste .Replace-Operation in der For …​ Next-Schleife platziert werden konnte, habe ich mich dafür entschieden, sie getrennt zu halten, damit die Schleife (zumindest für mich) einfacher erscheint. Dies ist mehr als alles andere eine stilistische Wahl.

Wenn Sie aus irgendeinem Grund die .Replace-Methode nicht verwenden möchten, können Sie den altmodischen Ansatz verwenden, jedes Zeichen in dem zu betrachten, was Sie bewerten. Dies ist der Ansatz, der in dieser benutzerdefinierten Funktion verwendet wird:

Function LetterToNum(c As Range) As String     Dim sRaw As String     Dim J As Integer

sRaw = UCase(c)

For J = 1 To 26         sRaw = Replace(sRaw, Chr(J + 64), J)

Next J     LetterToNum = sRaw End Function

Um diese Funktion zu verwenden, fügen Sie einfach Folgendes in Ihr Arbeitsblatt ein, wobei A1 die Zelle ist, die Sie konvertieren möchten:

=LetterToNum(A1)

Wenn Sie keine Makros verwenden möchten, können Sie für die Konvertierung einer Zelle eine ziemlich lange Formel verwenden:

=TEXTJOIN("",FALSE, IF(ISNUMBER(VALUE(MID(A1,SEQUENCE(1,LEN(A1)),1))), MID(A1,SEQUENCE(1,LEN(A1)),1), COLUMN(INDIRECT(MID(A1,SEQUENCE(1,LEN(A1)),1) & ":" & MID(A1,SEQUENCE(1,LEN(A1)),1)))))

Diese Formel setzt voraus, dass sich der zu konvertierende Text in Zelle A1 befindet. Grundsätzlich werden alle Zeichen in der Textzeichenfolge betrachtet und festgestellt, ob es sich um eine Ziffer handelt oder nicht. Wenn dies der Fall ist, wird das ursprüngliche Zeichen verwendet. Ist dies nicht der Fall, verwendet es die INDIRECT-Funktion, um eine Spalte basierend auf dem Buchstaben zu bestimmen, und verwendet dann COLUMN, um einen numerischen Wert für diese Spalte zurückzugeben. Dies alles wird dann mit der TEXTJOIN-Funktion neu kombiniert.

_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 (7820) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365.