Guten Tag allerseits
Ich habe ein Excel problem wo ich trotz tiefgründiger Suche in den Foren nicht weiterkomme.
Wir möchten Mitgliedernummern in einer Mitgliederliste generieren lassen.
In Spalte B haben wir den Namen, dann Telefonnummer usw.
In Spalte A möchten wir es gerne so haben, dass sich automatisch eine Nummer generiert wenn der Name in Spalte B eingetragen wird.
Sprich, wenn wir ein neues Mitglied hinzufügen füllt sich die Mitgliedernummer automatisch aus. Soweit so gut. das bekomme ich mit der WENN Funktion hin.
Jedoch ist jetzt die vorgabe das die Nummer wie folgt aufgebaut ist (Jahr zweistellig, Monat zweistellig, Nummerierung aufsteigend). Für heute also 2311001 (001 für das erste Mitglied).
Die Nummerierung soll sich unabhängig vom vorherigen Datum weiterzählen.
Kann mir da bitte jemand helfen wie ich das machen kann?
Vielen Dank euch und einen schönen Tag.
Cinderella
Hola,
ungetestet:
=text(heute();"JJMM")&text(Zeile(A1);"000")
Gruß,
steve1da
Hallo,
ein Ansatz mit VBA (im Code des Sheets)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Pre As String, WSF As WorksheetFunction
Set WSF = Application.WorksheetFunction
Pre = Year(Date) & Month(Date)
If Target.Column = 2 Then
Target.Offset(, -1) = IIf(WSF.Max(Columns("A:A")) > Pre & "000", WSF.Max(Columns("A:A")), Pre & "000") + 1
End If
End Sub
mfg
Hallo Fennek
Danke für die schnelle Antwort und die Hilfsbereitschaft.
Das klappt ja wunderbar.
Jedoch zeigt es mir nun das Jahr als vierstellig an. wir hätten es gerne zweistellig, also anstatt "2023" nur "23". kann man das auch?
genau so die monate. auch wenn ich da im januar was eintrage dann soll "01" stehen.
Danke für deine Antwort und einen schönen Nachmittag.
MFG
Hallo Steve1da
Der Ansatz klappt leider nicht. Danke aber trotzdem=)
MFG
Hallo Fennek
Jetzt wird ein Fehler ausgespielt. Findest du den fehler gerade?
Habe die zwei für mich unverständlichen Befehle verglichen.
Der Unterschied mit dem Datum habe ich gefunden.
Meiner Meinung nach müsste der Fehler im unteren Bereich sein. Kann das sein?
Code:
If Target.Column = 2 Then
if Target.offset (,-1) = "" then
Target.Offset(, -1) = IIf(WSF.Max(Columns("A:A")) > Pre & "000", WSF.Max(Columns("A:A")), Pre & "000") + 1
End If
MFG
Hi
füge diesen Code in ein allg. Modul:
Code:
Function NeueID(t As Range) As String
NeueID = Format(Date, "YYMM - ") & Format(t.Row,"0000") 'wenn mehr als 9999 Zeilen gebraucht werden, dann eine 0 mehr im Format angeben....
End Function
Und in die Zelle, in der die neue ID geschrieben werden soll, gibst Du ein (im Bsp. soll in B2 die ID geschrieben werden):
= NeueID(B2)
als Parameter kann auch A2 oder jede beliebige Spalte übergeben werden....
AAAABER!!! Empfehlenswert ist solch ein Vorgehen nicht. Zumindest dann nicht, wenn auf referentielle Integrität zu anderen Tabellen geachtet werden muss. Denn eine Nummer, die gelöscht wird, kann nochmal vergeben werden. Noch schlimmer, wenn eine Zeile gelöscht wird, dann ändern sich alle nachfolgenden ID's..... böööse Falle!
Besser wäre, weder die Zeilennummer noch Max zu verwenden, sondern einen Zählerwert zu verwenden, der sich immer bei Neuanlage um mindestens 1 erhöht. Unabhängig vom Maxwert der Spalte oder der Zeilennummer...
Pre = Year(Date) & Month(Date)
Hallo Ralf
Danke für deine Antwort.
Das heisst, wenn wir das mit dem Code machen, dann werden die Mitgliedernummern, die eigentlich nur einmal vergeben werden sollen
und dann eigentlich fest bleiben sollen, verändert?
Hast du denn eine bessere idee wie ich das so darstellen kann das ich das jahr und den monat im format habe und hinten die nummern aufkalkuliert werden?
MFG
...hatte ich doch schon gesagt.... es geht ja im Wesentlichen nur um den letzten Teil. Also den, der hochgezählt werden soll. Für den solltest Du Dir eine Zelle reservieren, deren Wert bei Neuanlage immer um 1 erhöht wird. Am Besten natürlich noch in einem separaten und ausgeblendetem Adminblatt. In der Zelle soll immer der neu zu vergebende Wert stehen.
Aber sagen wir, dieser Wert soll im gleichen Blatt in Zelle H1 stehen.
Dann kannst Du im Modul des Blattes folgenden Code schreiben:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 And Target.Column = 2 And Target <> "" Then
Target.Offset(, -1) = Format(Date, "YYMM - ") & Format(Range("H1"), "000")
Range("H1") = Range("H1") + 1
End If
End Sub
...also, immer wenn sich was in Spalte B ändert, dann soll in Spalte A eine neue ID geschrieben werden.
Der Code hat allerdings auch einen Haken. Denn wird ein bestehender Wert in B geändert (also nicht neu angelegt), dann wird ja trotzdem die ID generiert und geändert. Du solltest also noch eine entsprechende Sicherheitsabfrage einbauen oder prüfen, ob in Spalte A schon was steht und H1 sicherheitshalber auch vor unbefugtem Überschreiben schützen (Blattschutz).
Oha... jetzt sind wir wieder an dem Punkt wo meine Excelkenntnisse überschritten werden.
Also ich kann das nicht auf einfache art und weise bauen? waren die ideen wieder grösser als meine kenntnisse=( schade.
Wie kann ich eine solche sicherheitsabfrage einbauen? Kann ich damit sagen, dass er eine bestehende nummer nicht überschreiben soll?
Sorry das blöde gefrage, komme mir selber doof vor
MFG