Excel Spaltenbuchstaben ermitteln

In VBA wird im Allgemeinen nicht der Spaltenbuchstabe, sondern die Spaltennummer verwendet. Spalte A entspricht der Spaltennummer 1, Spalte B der Spaltennummer 2, Spalte C der Spaltennummer 3 usw.

Möchten Sie nun aus einer Spaltennummer wieder den Spaltenbuchstabe ermitteln gibt es hierfür verschiedene Ansätze, die je nach Verwendungszweck mehr oder weniger geeignet sind.

Fehlerhafter VBA Code auf der Microsoft Support Seite

Im Internet gibt es allerdings auch Lösungsansätze, die nicht ungeprüft verwendet werden sollten. So stellt z.B. selbst Microsoft auf einer Support Seite einen fehlerhaften Algorithmus für die Ermittlung des Spaltenbuchstaben vor.

Zunächst einmal ist dieser generell nur auf zwei Stellen ausgelegt. Seit der Excel 2007 sind inzwischen jedoch 16.384 Spalten bis zum Spaltenbuchstabe XFD vorhanden. Um alle Spaltenbuchstaben ermitteln zu können muss also in jedem Fall ein Algorithmus genutzt werden, der dreistellig die Spaltennummer in den jeweiligen Spaltenbuchstabe(n) umwandeln kann. Davor gab es einen Spaltenbereich der nur 256 Spalten bis Spalte IV unterstützte.

Aber auch in diesem Fall hätte der Algorithmus auf der Microsoft Seite Fehler produziert. Der erste Fehler tritt nämlich bereits bei Spalte 53 (BA) auf. Hier wirft der Microsoft Alogrithmus A[ aus. Mit jedem Durchlauf von A bis Z verschiebt sich fortan der Fehler um eine weitere Spalte (CA, CB / DA, DB, DC / EA, EB, EC, ED / …). Ab Spalte 4508 (FQJ) erzeugt das Makro dann sogar die erste Fehlermeldung.

Excel VBA Spaltenbuchstabe aus Zahl ermitteln

Nachfolgend nun zwei Lösungsvorschläge, die für alle 16.384 Spalten aus der Spaltennummer den Excel Spaltenbuchstaben ermitteln.

Variante 1
Die erste Lösung verwendet eine selbst erstellte Funktion, die anschließend im gesamten VBA Projekt über einen einfachen Aufruf der Funktion genutzt werden kann.

Function Buchstabe(iCol As Integer) As String

Dim Buchstabe1 As Long, Buchstabe2 As Long, Buchstabe3 As Long

If iCol < 27 Then
    Buchstabe1 = 0
Else
    Buchstabe1 = Int(((iCol - 26) / 676) - 0.0001)
End If
 
If Buchstabe1 = 0 Then
    Buchstabe2 = Int((iCol / 26) - 0.0001)
Else
    Buchstabe2 = Int(((iCol / 26) - (Buchstabe1 * 26)) - 0.0001)
End If
 
Buchstabe3 = iCol - (Int((iCol / 26) - 0.0001) * 26)

If Buchstabe1 > 0 Then
    Buchstabe = Chr(Buchstabe1 + 64)
End If

If Buchstabe2 > 0 Then
   Buchstabe = Buchstabe & Chr(Buchstabe2 + 64)
End If

If Buchstabe3 > 0 Then
   Buchstabe = Buchstabe & Chr(Buchstabe3 + 64)
End If
    
End Function

Aufgerufen werden kann die Funktion aus jeder VBA-Routine unter Anwendung von:

Buchstabe(intSpaltennummer)

intSpaltennummer ist dabei eine Integer-Variable, in der Sie die Spaltennummer übergeben wird, die dann in den jeweiligen Spaltenbuchstaben umgewandelt werden soll.

Beispiel: Welcher Spaltenbuchstabe der Spaltennummer 27 entspricht, soll in einer Messagebox angezeigt werden.

Sub SpaltenbuchstabeAusgeben()

MsgBox "Der Spaltenbuchstabe lautet: " & Buchstabe(27)

End Sub

Der Vorteil bei dieser Variante ist, dass in jeder VBA Routine eine einfache Nutzung der Funktion mit dem Aufruf Buchstabe() möglich ist und die Funktion theoretisch für alle Buchstabenkombinationen von A bis ZZZ genutzt werden kann. Zudem bleibt die VBA Routine, in die diese Funktion integriert wird, weiterhin gut lesbar.

Variante 2
Die zweite Lösung kann vollständig in das jeweilige Makro mit einem Einzeiler eingebettet werden. Der Spaltenbuchstabe wird bei dieser Lösungsvariante nicht aus der Spaltennummer errechnet, sondern über die Zelladresse ausgelesen. Die Zeilennummer spielt dabei keine Rolle. Im Beispiel wurde daher einfach immer die Zeile 1 der jeweiligen Spalte genutzt.

Mid(Cells(1, intSpaltennummer).Address(), 2, InStr(2, Cells(1, intSpaltennummer).Address(), "$") - 2)

Auch in diesem Beispiel wird in der Integer Variable intSpaltennummer wieder die Spaltennummer übergeben. Aus der Zelladresse (Spaltennummer + Zeile 1) wird dann der Teil für den Buchstabenteil ermittelt und ausgegeben.

Sub SpaltenbuchstabeAusgeben()

MsgBox "Der Spaltenbuchstabe lautet: " & Mid(Cells(1, 27).Address(), 2, InStr(2, Cells(1, 27).Address(), "$") - 2)

End Sub

Vorteil dieser Lösung, ist dass keine zusätzliche Funktion benötigt wird. Dafür ist der VBA-Code nicht mehr so einfach lesbar.

Von der Geschwindigkeit betrachtet, sind beide vorgestellten Varianten nahezu gleich schnell. Welche Variante den Vorzug erhält, ist daher Geschmacksache. Beide Varianten funktionieren für den gesamten Spaltenbereich A bis XFD problemlos.

Excel Mustermappe:

Excel VBA Spaltenbuchstabe aus Zahlspaltenbuchstabe_ermitteln.xlsm

 
Gefällt Ihnen der Beitrag?

2 Gedanken zu „Excel Spaltenbuchstaben ermitteln“

  1. Die 2. Lösung finde ich besser.
    Eine andere wäre diese hier:

    Function Get_Col(r As Range) As String

    Get_Col = Split(r.Address, “$”)(1)

    End Function

    Eine Adresse, z.B. A1 wird standardmäßig als $A$1 ermittelt.
    Jetzt könnte man das 1. $ entfernen und das 2. suchen.
    Die Funktion Split zerlegt einen Text in ein Array (also eine Art Feld, ähnlich wie Excel) Ich zerlege also die Adresse $A$1 in ein Array. Da 2 x ein $ enthalten ist bekomme ich ein Array mit 2 Feldern. Im 1. steht das A im 2. die 1.
    Statt eine Variable zu bemühen lass ich mir nur das 1. Element zurück geben.

    Testen kann man es z.B. mit
    ?Get_Col(Cells(5,16384))
    im Direktbereich.

    Die Besonderheit ist das die Zelle als Range also als Bereich also ein Zellenobjekt (etwas vereinfacht) übergeben wird.

    Antworten

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.