Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1316to1320
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

alphanumerischen Zähler hochzählen per Makro

alphanumerischen Zähler hochzählen per Makro
12.06.2013 08:19:26
Rainer
Hallo!
Ich habe da eine kleines Problem und habe noch gar keinen Ansatz dazu, vielleicht könnt ihr mir helfen....
In einer Tabelle befinden sich in Spalte A Kundennummern 3stellig alphanumerisch.
Per Makro soll nun eine neue Kundennummer angelegt werden. Dazu muß ich bestimmen
- welche die zuletzt verwendete Nummer ist
- und dann die danach folgende freie Nummer soll die Nummer des Kundenstammes werden
Die höchste verwendete Nummer zu bestimmen mache ich per Sortieren, das krieg ich hin. Wie kann ich dann aber die nächste freie alphanumerische Nummer berechnen?
Danke für euer Feedback

31
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: alphanumerischen Zähler hochzählen per Makro
12.06.2013 08:22:25
Hajo_Zi
=Left(variable;3)+1

AW: alphanumerischen Zähler hochzählen per Makro
12.06.2013 08:34:42
Rainer
Hallo!
Danke für die schnelle Antwort, allerdings klappt das nicht so recht...
Als Bsp habe ich den Wert "A00". Die nächste freie Nummer wäre dann also "A01".
Wenn ich deinen Code verwende, kommt die Meldung 'Typen unverträglich'
Hab ich da was nicht beachtet?
Danke

AW: alphanumerischen Zähler hochzählen per Makro
12.06.2013 08:37:14
Hajo_Zi
="A" & Teil(DeinWert;2;Länge(DeinWert))+1
Gruß Hajo

Anzeige
AW: alphanumerischen Zähler hochzählen per Makro
12.06.2013 08:47:20
Rainer
Hallo nochmal!
Sorry, aber das klappt immer noch nicht und ich bin mir auch nicht sicher, ob die Formel das machen würde was ich benötige...
Deine Foremel nimmt die letzten 2 Ziffern und zählt die um 1 hoch, richtig?
Wenn ich die nun mit dem Wert A00 tests, erscheine als Ergebnis #WERT.
Als Kundennummer kann aber auch AAA vorkommen, dann sollte AAB draus werden

AW: alphanumerischen Zähler hochzählen per Makro
12.06.2013 09:01:57
Rainer
Hallo!
Das klappt jetzt super wenn ich in den letzten beiden Ziffern Zahlen habe. Wenn dort allerdings auch Buchstaben stehen, bin ich verloren...

Regeln?
12.06.2013 08:42:15
Klaus
Hallo Rainer,
die Regeln für deine alphanumerische Zählung können wir nur raten! Oder du verräts sie uns.
Ich vermute:
A01 / A02 / A03 / ... / A99 / B01 / B02
(dann funktioniert Hajos zweite Lösung - aber nur bis A99)
Es könnte aber genauso gut sein:
A01 / A02 / A03 / ... / A09 / A0A / A0B / A0C
wir wissen es nicht!
Bitte mehr Infos.
Grüße,
Klaus M.vdT.

AW: Regeln?
12.06.2013 08:52:43
Rainer
Hallo!
Ja, die Regel soll genauso sein wie im erstem Beispiel. Allerdings klappt Hajos Formel irgendwie nicht
Aus
A00 soll werden A01
AAA soll werden AAB
AAZ soll werde AB0

Anzeige
AW: Regeln?
12.06.2013 08:54:53
Hajo_Zi
ich kann die regeln nur für den Teil erstellen, der im Beitrag steht.
Das ist der Vorteil, wenn man die Aufgabe nicht komplett beschreibt, man darf sie anpassen
Gruß Hajo

AW: Regeln?
12.06.2013 09:03:36
Rainer
Hallo!
Ja, sorry für die fehlenden Infos. Wenn man schon zu viel darüber grübelt, gibt man oft nicht genug Infos weiter. Bin aber natürlich für alle eure Rückmeldungen dankbar

A99
12.06.2013 09:09:40
Klaus
Hallo Rainer,
was folgt auf A99 ?
Grüße,
Klaus M.vdT.

AW: BAA
12.06.2013 09:21:29
Hajo_Zi
Hallo Klaus,
nach den bisherigen Informationen BAA da a-z und 0-9
Gruß Hajo

Anzeige
AW: BAA
12.06.2013 09:31:51
Rainer
Hallo! nochmal.
Die Regeln für die Nummern sind:
jede Ziffen durchläuft 0-9, danach A-Z
Wir fangen mit 001 an. Wenn Alle Werte der letzten Ziffern durchlaufen sind, wird die Vorziffer um 1 Stelle erhöht
Aus 00Z wird dann 010

AW: BAA
12.06.2013 09:34:13
Hajo_Zi
ja und nach Z kommt Null dann bis 9 und dann geht es wieder weiter mit 0.
Ich bin raus.
Gruß Hajo

AW: BAA
12.06.2013 09:45:53
Klaus
Ich bin raus.
ich auch.
Viel Erfolg!
Grüße,
Klaus M.vdT.

AW: A99
12.06.2013 09:29:10
Rainer
Hallo!
AA0

Anzeige
wirklich A99 ?
12.06.2013 11:18:20
Erich
Hi Rainer,
wenn nach A99 die AA0 folgt, was folgt auf A9Z ?
Und was ist der Vorgänger von A9A ?
Oder können A9A und A9Z bei dir gar nicht vorkommen?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

letzte Chance:
12.06.2013 09:54:43
Klaus
Hallo Rainer,
anbei eine Lösung ohne VBA dafür mit Hilfsspalten und Hilfsblättern:
https://www.herber.de/bbs/user/85769.xlsx
Darauf kannst du aufbauen. Schlimmstenfalls alle 17576 Kombinationen in einer Hilfstabelle speichern und darauf dann INDEX(VERGLEICH()) anwenden.
Grüße,
Klaus M.vdT.

Anzeige
AW: alphanumerischen Zähler hochzählen per Makro
12.06.2013 09:57:30
Rainer
Hallo!
Sorry wenn ich für Unmut gesorgt haben sollte, war definitv nicht meine Absicht.
Denke ich werde den Ansatz mit dem Hilfblatt weiter verfolgen.
Danke an ALLE

es fehlt ja nur die eindeutige Regel
12.06.2013 10:05:29
Matthias
Hallo
So hab ich es verstanden:
Du fängst also mit 000 an bis 999 dann A00
weiter von A00 bis A99 dann AA0
weiter von AA0 bis AA9 dann AB0 ?
weiter von AB0 bis AB9 dann AC0 ?
irgendwann sind wir bei AZ9 dann weiter mit B00 - B99 dann BB0 - BB9 ?
Es hat nur niemand die Regel verstanden wann Du von Zahl auf Buchstabe umstellst
Gruß Matthias

Anders oder?
12.06.2013 10:57:32
JACKD
Wenn ich mich mal reinhängen dürfte..
Ich glaub das Rainer einfach das Alphabet "verlängern" will
das Problem wenn man lediglich mit 3 stelligen Zahlen arbeitet das man 1000 (10 x 10 x 10)
Möglichkeiten hat (incl. 000)
Braucht man mehr nimmt man Buchstaben 17576(26 x 26 x 26)
Wenn man nun noch mehr Kunden hat kombiniert man das ganze
0-9 & A-Z
Die Kette läuft dann
0-1-2-3-4-5-6-7-8-9-A-B-C...... (hier gilt zu klären ob die Zahlenkette mit 0 Beginnt oder mit 0 endet)
an jeder position "hoch"
Dh. ist an der letzten Stelle die Kette einmal durch erhöht sich die vorletzte stelle um 1 und die Kette läuft erneut an der letzten stelle durch
Im Ergebnis hat man dann 46656(36 x 36 x 36) Varianten
Die nächste Stufe sind dann klein und großbuchstaben
dann könnte man 238328(62 x 62 x 62) Kombinationen innerhalb eine 3-stelligen Kombination realisieren
Grüße

Anzeige
36er-System
12.06.2013 11:04:42
Erich
Hi Jack,
ja, so sehe ich das auch. Man könnte es auch so ausdrücken:
Rainer möchte im 36er-Zahlsystem hochzählen, wobei die 36 Ziffern mit
0-1-2-3-4-5-6-7-8-9-A-B-C-...-Z gegeben sind.
Das ist im Prinzip nichts anderes als das Rechnen im Hexadezimalsystem,
da gehen die "Ziffern" halt nur bis "F".
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

nur eine Formel
12.06.2013 10:34:44
Erich
Hi Rainer,
vielleicht hilft da eine wohl etwas längere Formel, die aber ohne Hilfszellen usw. auskommt.
Du brauchst nur die Formel in B2, die in D:F sind nur hier zur Info:
 ABCDEF
1QuelleZiel Teile
2000001 001
300900A 00A
409909A 09A
509A09B 09B
609Z0A0 0A0
70ZZ100 100
89ZZA00 A00
9ZZZ000 000

Formeln der Tabelle
ZelleFormel
B2=ZEICHEN(CODE(LINKS(A2))+(CODE(RECHTS(A2))=90)*(CODE(TEIL(A2;2;1))=90) * (1-43*(CODE(LINKS(A2))=90)+7*(CODE(LINKS(A2))=57))) & ZEICHEN(CODE(TEIL(A2;2;1))+(CODE(RECHTS(A2))=90) * (1-43*(CODE(TEIL(A2;2;1))=90)+7*(CODE(TEIL(A2;2;1))=57))) & ZEICHEN(CODE(RECHTS(A2))+1-43*(CODE(RECHTS(A2))=90)+7*(CODE(RECHTS(A2))=57))
D2=ZEICHEN(CODE(LINKS(A2))+(CODE(RECHTS(A2))=90)*(CODE(TEIL(A2;2;1))=90) * (1-43*(CODE(LINKS(A2))=90)+7*(CODE(LINKS(A2))=57)))
E2=ZEICHEN(CODE(TEIL(A2;2;1))+(CODE(RECHTS(A2))=90) * (1-43*(CODE(TEIL(A2;2;1))=90)+7*(CODE(TEIL(A2;2;1))=57)))
F2=ZEICHEN(CODE(RECHTS(A2))+1-43*(CODE(RECHTS(A2))=90)+7*(CODE(RECHTS(A2))=57))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
Hier mal eine VBA Lösung
12.06.2013 12:00:37
JACKD
Nicht die Schönste, aber müsste das machen was sie soll
Sub Dreier() With ActiveSheet wert3 = Asc(Left(.Cells(1, 5).Value, 1)) wert2 = Asc(Mid(.Cells(1, 5).Value, 2, 1)) wert1 = Asc(Right(.Cells(1, 5).Value, 1)) ''Rechts Zahl +1 If wert1 > "47" And wert1 "64" And wert1 "47" And wert2 "64" And wert2 "47" And wert3 "64" And wert3 Grüße
Und Rückmeldung wär nett

Korrektur
12.06.2013 12:27:39
JACKD

Sub Dreier()
With ActiveSheet
wert3 = Asc(Left(.Cells(1, 5).Value, 1))
wert2 = Asc(Mid(.Cells(1, 5).Value, 2, 1))
wert1 = Asc(Right(.Cells(1, 5).Value, 1))
''Rechts Zahl +1
If wert1 > "47" And wert1  "64" And wert1  "47" And wert2  "64" And wert2  "47" And wert3  "64" And wert3 
Hatte nicht bedacht das durch eine Änderung des indizes sich auch der Bereich ändern kann
Daher mit Sprüngen...
Auch hier wenig schön. macht diesmal aber wirklich dass was er soll
Grüße

VBA - einfacher
12.06.2013 13:57:02
Erich
Hi Jack,
das tut es wohl auch schon:

Sub Dreier3()
Dim ii As Integer, strQ As String, aa As Integer, strE As String
Dim blnW As Boolean
strQ = ActiveSheet.Cells(1, 5)
strE = ""
For ii = Len(strQ) To 1 Step -1
aa = Asc(Mid(strQ, ii, 1))
If ii = Len(strQ) Or blnW Then aa = aa + 1
blnW = False
Select Case aa
Case 48 To 57           ' Ziffern 0-8
strE = Chr(aa) & strE
Case 58                 ' Ziffer 9
strE = Chr(65) & strE
Case 65 To 90           ' Buchstabe A-Y
strE = Chr(aa) & strE
Case 91                 ' Buchstabe Z
strE = Chr(48) & strE
blnW = True
End Select
Next ii
ActiveSheet.Cells(2, 5).Value = strE
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

noch eins
12.06.2013 14:01:18
Erich
Hi,
hier noch ein wenig einfacher:

Sub Dreier3()
Dim ii As Integer, strQ As String, aa As Integer, strE As String
Dim blnW As Boolean
strQ = ActiveSheet.Cells(1, 5)
strE = ""
For ii = Len(strQ) To 1 Step -1
aa = Asc(Mid(strQ, ii, 1))
If ii = Len(strQ) Or blnW Then aa = aa + 1
blnW = False
Select Case aa
Case 48 To 57           ' Ziffern 0-8
strE = Chr(aa) & strE
Case 58                 ' Ziffer 9
strE = "A" & strE
Case 65 To 90           ' Buchstabe A-Y
strE = Chr(aa) & strE
Case 91                 ' Buchstabe Z
strE = "0" & strE
blnW = True
End Select
Next ii
ActiveSheet.Cells(2, 5).Value = strE
End Sub
Dass Chr(65) = "A" ist, muss ja nicht erst zur Laufzeit berechnet werden...
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Das ist
12.06.2013 14:07:47
JACKD
natürlich die schönere Variante =)
Ich hatte auch erst mit Case überlegt, bin dann aber an den "spannen" gescheitert =)
Grüße

und noch zwei
12.06.2013 18:17:57
Erich
Hi,
auch auf das Select Case kann man verzuichten, ein If - ElseIf reicht auch aus.
Die Funktion lässst sich auch nett im Tabellenblatt verwenden:

Function alphaNext(sEin As String) As String
Dim ii As Integer, aa As Integer, strE As String, blnW As Boolean
For ii = Len(sEin) To 1 Step -1
aa = Asc(Mid(sEin, ii, 1))
If strE = "" Or blnW Then aa = aa + 1
blnW = False
If aa = 58 Then aa = 65 Else If aa = 91 Then aa = 48: blnW = True
strE = Chr(aa) & strE
Next ii
If blnW Then strE = "1" & strE ' Erhöhung der Stellenzahl
alphaNext = strE
End Function
Sub Dreier4()
Dim ii As Integer, strQ As String, aa As Integer, strE As String
Dim blnW As Boolean
strQ = ActiveSheet.Cells(1, 5)
strE = ""
For ii = Len(strQ) To 1 Step -1
aa = Asc(Mid(strQ, ii, 1))
If strE = "" Or blnW Then aa = aa + 1
blnW = False
If aa = 58 Then aa = 65 Else If aa = 91 Then aa = 48: blnW = True
strE = Chr(aa) & strE
Next ii
ActiveSheet.Cells(2, 5).Value = strE
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Die Function
13.06.2013 09:17:09
JACKD
find ich besonders gelungen Erich =)
Das "blöde" ist nur das es den Fragesteller scheinbart nicht mehr interessiert -.-
Grüße

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige