Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: laufende Nummer einer Spalte in Spaltenbezeichung umwandeln

laufende Nummer einer Spalte in Spaltenbezeichung umwandeln
06.09.2024 15:44:59
Bot-Builder
Hallo ans Forum!

Ich muss auch die Spalten in einer Exceltabelle mit einer fortlaufenden Nummer ansprechen. Dazu versuche mir eine Funktion zu schreiben die eben diese laufende Nummer in die Spaltenbezeichnung umwandelt.

Nach diesem Schema
1 -> A
2 -> B
....
26 -> Z
27 -> AA
....
702 -> ZZ
703 -> AAA

Habe da auch schon was zusammen bekommen.

'--------+---------+---------+---------+---------+---------+---------+---------+

' Übergabewert: laufende Nummer der Spalte
' Rückgabewert: Name der Spalte als Buchstabenfolge
'********+*********+*********+*********+*********+*********+*********+*********+
Function Zahl_zu_Spaltenbezeichung(Zahl As Integer) As String

Zahl_zu_Spaltenbezeichung = Right(Chr(64 + Int((Zahl - 1) / 26)) + _
Chr(65 + (Zahl - 1) - (Int((Zahl - 1) / 26) * 26)), _
Int((Zahl - 1) / 26) + 1)

End Function
'--------+---------+---------+---------+---------+---------+---------+---------+


Habe meine Datei mit der ich das ausprobiert unter https://www.herber.de/bbs/user/172047.xlsm hochgeladen.

Nur leider funktionert meine bisherige Funktion nur bis 702. Dreistellige Spaltenbezeichnungen bekomme ich einfach nicht hin.

Gibt es eine solche Funktion bereits fertig in Excel? Dann habe ich mir zwar jetzt mehrere Stunden umsonst den Kopf zerbrochen, ist aber auch kein Fehler. Und falls nicht, könnte ich Hilfe gebrauchen.

Vielen Dank.

und viele Grüße

Uwe




Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Das könntest...
06.09.2024 15:55:18
Case
Moin, :-)

... du so probieren: ;-)

Option Explicit

Public Sub Main_1()
MsgBox Columns("ABC").Column
End Sub
Public Sub Main_2()
MsgBox Left(Columns(731).Address(0, 0), InStr(Columns(731).Address(0, 0), ":") - 1)
End Sub


Servus
Case
Anzeige
AW: laufende Nummer einer Spalte in Spaltenbezeichung umwandeln
06.09.2024 16:44:26
GerdL
Hallo Uwe,

sorum?
Sub Unit()

MsgBox Spaltenbuchstaben(16384)
End Sub

Public Function Spaltenbuchstaben(spaltennummer As Long) As String
If spaltennummer >= 1 And spaltennummer = 16384 Then
Spaltenbuchstaben = Split(Cells(1, spaltennummer).Address, "$")(1)
Else
Spaltenbuchstaben = "Fehler!"
End If
End Function

Gruß Gerd
Anzeige
AW: laufende Nummer einer Spalte in Spaltenbezeichung umwandeln
06.09.2024 17:19:29
Bot-Builder
Vielen herzlichen Dank an euch Drei! Alle drei Lösungen funktionieren einwandfrei.

Jetzt muss ich nur noch verstehen wie und warum es so funktioniert.

Bin aber zunächst einmal froh, dass auch andere (offensichtlich fähigere) User auch so eine Funktion benötigen. Ich arbeite auch schon seit Jahren damit. Meine hat mit den älteren Version von Excel auch gut funktioniert, die größte Spalte war früher mal "AA".

So, jetzt geht es ans analysieren.

Wenn ich so garnicht weiter komme melde ich mich bestimmt noch mal.

Uwe
Anzeige
AW: laufende Nummer einer Spalte in Spaltenbezeichung umwandeln
06.09.2024 17:19:26
daniel
Hi
das mathematische Umrechnen der Spaltennummer in den Buchstaben der Adresse kannst du vergessen. Das wird viel zu kompliziert.
das liegt daran, dass die Spaltenbuchstaben kein reguläres Zahlensystem auf 26er-Basis sind, sondern eines, bei dem die 0 fehlt.
das ist so wie wenn in unserem 10er-System nach 9 nicht 10 folgt, sondern 11 (auf Z folgt AA und nicht A0). Da hast du so viele Sprünge drin, dass du das per Formel nur schwer erfassen kannst.

in VBA ist der einfachste Weg, dass du dir die Adresse der Spalte in A1-Format ausgeben lässt (also mit Spaltenbuchstaben) und aus dieser Adresse dann die einfache Spaltenbezeichnung rausfilterst.
wie das konkret in VBA gemacht wird, haben die Kollegen ja gezeigt
Anzeige
AW: laufende Nummer einer Spalte in Spaltenbezeichung umwandeln
06.09.2024 17:32:02
Bot-Builder
Hallo daniel!

Danke für den Hinweis. Das hat das Analysieren deutlich einfacher gemacht.

Bin mit meinem mathematischen Ansatz in die falsche Richtung gelaufen. Hätte sicherlich auch irgendwann und irgendwie funktioniert. Aber so ist es deutlich einfacher.

Wenn ich gleich in die richtige Richtung gedacht hätte, hätte ich auch die hier schon vorhandene Einträge zu dem Thema finden können.

Aber so ist das nun mal.

Nachmals Danke an alle.
Anzeige
AW: laufende Nummer einer Spalte in Spaltenbezeichung umwandeln
06.09.2024 17:31:35
onur
Könntest du vielleicht erläutern, warum du das brauchst?
Ich vermute, für dein Problem gibt es eine vieeeel einfachere Lösung.
AW: laufende Nummer einer Spalte in Spaltenbezeichung umwandeln
06.09.2024 18:13:43
GerdL
Du könntest die Spalte mit Application.Match oder der Find-Methode aus der Überschrift ermitteln.
Gruss Gerd
Ganz anderer Ansatz
06.09.2024 19:00:29
RPP63
Moin!
Du fragtest ja:
Gibt es eine solche Funktion bereits fertig in Excel?
In Deinem Excel365 brauchst Du dafür kein VBA:
 AB
114784UVP
2999ALK
3272JL

ZelleFormel
B1=TEXTVOR(ADRESSE(1;A1;2;1);"$")
B2=TEXTVOR(ADRESSE(1;A2;2;1);"$")
B3=TEXTVOR(ADRESSE(1;A3;2;1);"$")


Gruß Ralf
Anzeige
und es funktioniert auch (fast) mathematisch
09.09.2024 14:29:27
Bot-Builder
Jetzt wollte ich es doch wissen, ob sich die Spaltenadresse nicht doch aus der "laufenden Nummer" der Spalte berechnen lässt.

Zwar nicht rein mathematisch, also Funktion geht es
'--------+---------+---------+---------+---------+---------+---------+---------+

' Übergabewert: laufende Nummer der Spalte
' Rückgabewert: Name der Spalte als Buchstabenfolge
'********+*********+*********+*********+*********+*********+*********+*********+
Function Zahl_zu_Spaltenbezeichung_1(Zahl As Integer) As String

Zahl_zu_Spaltenbezeichung_1 = ""

Dim A As Integer

' linke Stelle
A = (Zahl + (Zahl \ (27 ^ 2 - 26)) * 27) \ (27 ^ 2 - 26)

If A > 0 Then
Zahl_zu_Spaltenbezeichung_1 = Chr(64 + A)
Zahl = Zahl - A * 26 ^ 2
End If

' mittlere Stelle
A = (Zahl + Zahl \ 27) \ 27

If A > 0 Then
Zahl_zu_Spaltenbezeichung_1 = Zahl_zu_Spaltenbezeichung_1 + Chr(64 + A)
Zahl = Zahl - A * 26
End If

' rechte Stelle
Zahl_zu_Spaltenbezeichung_1 = Zahl_zu_Spaltenbezeichung_1 + Chr(64 + Zahl)

End Function
'--------+---------+---------+---------+---------+---------+---------+---------+


Bin mir schon darüber im Klaren, dass das jetzt rein akademisch ist. Aber manchmal halte ich es nach Konfuzius: der Weg ist das Ziel.

Viele Grüße
Anzeige
AW: laufende Nummer einer Spalte in Spaltenbezeichung umwandeln
06.09.2024 17:50:15
Bot-Builder
Irgendwie bin ich heute zu langsam!

Hallo onur!

Ich bin mir sicher, dass es hierzu einfachere Lösung gibt. Das ist eine Anwendung, der Code schon seit 2010 mehr oder weniger organisch vor sich hinwächst.

Ich versuche das jetzt mal vereinfacht und anschaulich zu beschreiben. Es gibt eine Tabelle mit vielen Artikel. Jeder Zeile steht für einen Artikel und beginnt mit der Artikelnummer, dann folgen jede Menge zusätzliche Merkmale wie z.B. Größe, Farbe, Materialzusammensatzung usw. Die Anzahl und auch die Reihenfolge dieser Spalten ändert sich aber und es kommen Spalten hinzu, manchmal fallen auch welche weg. Wie gesagt, den Code dazu habe ich schon vor Jahren angefangen zu geschrieben. Damals habe ich im Programm den Spaltenüberschriften Nummern gegeben, diese Zuweisungen stehen im Kopf des Codes als Konstanten. Über die Nummer bastel ich mir dann die range-Objekte mit denen ich auf die Werte zugreife. Wenn ich nun an der Tabelle was ändere bekommen die Spalten andere Nummern. Brauche mir über den Rest des Codes dann keine großen Gedanken zu machen.

War halt vor Jahren mal mein Ansatz. Ich glaube mich erinnern zu können, dass ich das mal aus einem Beispiel in einem Buch abgeleitet habe. Und habe es immer so weiter gezogen. An dieser Anwendung mache ich nun auch so weiter, da fehlen mir die Resoursen um da was zu ändern.

Ich hoffe, ich habe mich einigermaßen verständlich ausdrücken können.

Bin gerade an was neuem, aber ähnlichen dran. Hier muss ich die Tabelle per Code erweitern, die inhaltlich zusammenhängenden Felder liegen in der Tabelle auch nicht nebeneinander. Hier habe ich mal versucht diese über Namen an zu spechen. Bin aber auch noch nicht sehr weit bei der Sache.

Viele Grüße

Uwe


Anzeige
AW: laufende Nummer einer Spalte in Spaltenbezeichung umwandeln
06.09.2024 17:59:13
onur
Wenn du immer nur (oder zumindest in der betroffenen Datei) mit Z1S1-Schreibweise arbeiten würdest, würdest du dieses Problem gar nicht erst haben. Das kannst du einfach bei Optionen/Formeln/Arbeiten mit Formeln/Z1S1-Bezugsart.
Dann hast du statt der blöden Buchstaben die SpaltenNUMMERN (wie bei den Zeilen auch), wo solche komplizierten Umrechnung völlig überflüssig sind.
Aus D7 wird dann Z7S4.

In VBA hingegen kannst du statt Range("A3") aber auch Cells(3,1) nehmen und brauchst wiederum keine Buchstaben mehr.
Anzeige
AW: Das könntest...
06.09.2024 16:42:12
Luschi
Hallo Uwe,

dies benutz ich schon seit Jahr(zehnt)en:
Function spBuchst(spalte As Integer) As String

''Debug.Print Cells(1, spalte).Address(0, 0)
spBuchst = Replace(Cells(1, spalte).Address(0, 0), 1, "")
End Function
Gruß von Luschi
aus klein-Paris
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige