Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: ID einmalig vergeben

ID einmalig vergeben
08.03.2017 20:18:08
Thomas
Hallo Excelfreunde,
ich möchte gern eine einmalige ID in spalte a vergeben.
Dazu habe ich mir das untenstehende macro zusammen gebaut. Dies funktioniert soweit auch ganz gut
Nun ja, es ist noch das Wort ganz gut.
Das Problem ist ich darf jede Nummer nur einmal vergeben. Diese Regel bleibet auch wenn zwischendurch eine zeile gelöscht wird.
z.B. Zeile 5 wird gelöscht hier stand die ID Nr, 5 darf Sie nie wieder vergeben werden.
Bis hier klappt das Marco ganz gut.
Der Fehler tritt auf wenn die letzte Zeile gelöscht wird.
z.B. die letzte Zeile hatte die id Nr. 10 und ich lösche Sie dann bekommt mit meinem Macro der neue Datensatz wieder die 10.
Ich meine das ich schon mal etwas davon gehört oder gelesen habe das es im Tabellenblatt ein Bereich gibt in dem man so eine Nummer ablegen könnte.
CustomProperties Kann ich dies dafür irgendwie nutzen?
Weiss jemand rat bei meinem Problem?
mfg thomas
Private Sub Worksheet_Change(ByVal Target As Range)
Dim GetNewID
GetNewID = WorksheetFunction.Max(Tabelle5.Columns(1)) + 1
'nur etwas tun wenn nur 1 Zelle betroffen ist
If Target.Count > 1 Then Exit Sub
'Prüfung, ob sich etwas in Spalte C geändert hat
'und ob der Wert in Spalte C  "" ist
'und ob nicht schon eine ID vergeben wurde
'-> wenn alles zutrifft, dann neue ID eintragen
If Target.Column = 3 And _
Target.Value  "" And _
Cells(Target.Row, "A").Value = "" Then
Cells(Target.Row, "A").Value = GetNewID
End If
End Sub

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ID einmalig vergeben
08.03.2017 22:39:27
Werner
Hallo Thomas,
diesen Code ins CodeModul von "DieseArbeitsmappe"
Private Sub Workbook_Open()
oldId = WorksheetFunction.Max(Tabelle5.Columns(1))
End Sub
diesen Code ins CodeModul von Tabelle5
Private Sub Worksheet_Activate()
oldId = WorksheetFunction.Max(Tabelle5.Columns(1))
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim GetNewID As Long
GetNewID = WorksheetFunction.Max(Tabelle5.Columns(1)) + 1
'nur etwas tun wenn nur 1 Zelle betroffen ist
If Target.Count > 1 Then Exit Sub
'Prüfung, ob sich etwas in Spalte C geändert hat
'und ob der Wert in Spalte C  "" ist
'und ob nicht schon eine ID vergeben wurde
'-> wenn alles zutrifft, dann neue ID eintragen
If Target.Column = 3 And Target.Value  "" And Cells(Target.Row, "A").Value = "" Then
If Target.Row = 1 Then oldId = 0
If oldId > WorksheetFunction.Max(Tabelle5.Columns(1)) Then
Cells(Target.Row, "A").Value = oldId + 1
Else
Cells(Target.Row, "A").Value = GetNewID
End If
oldId = WorksheetFunction.Max(Tabelle5.Columns(1))
End If
End Sub
das in eine allgemeines Modul (keine Prozedur im Modul anlegen, nur ein Modul anlegen und die Codzeile ins Modul reinkopieren)
Public oldId As Long
Gruß Werner
Anzeige
besten dank an Werner das klappt
09.03.2017 05:34:31
Sipel
Hallo Werner,
hab recht vielen dank für diese Variante.
Es klappt super.
mfg thomas
AW: besten dank an Werner das klappt
09.03.2017 05:35:43
Thomas
Hallo Werner,
hab recht vielen dank für diese Variante.
Es klappt super.
mfg thomas
Gerne u.Danke für die Rückmeldung. o.w.T.
09.03.2017 13:05:40
Werner
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Einmalige IDs in Excel vergeben


Schritt-für-Schritt-Anleitung

Um in Excel eine einmalige ID in Spalte A zu vergeben, kannst du ein VBA-Makro verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und erstelle ein neues Arbeitsblatt oder öffne ein bestehendes.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf „VBAProject (DeinArbeitsblattName)“.
    • Wähle „Einfügen“ und dann „Modul“.
  4. Füge den folgenden Code in das Modul ein:

    Public oldId As Long
  5. Füge den folgenden Code in das CodeModul von „DieseArbeitsmappe“ ein:

    Private Sub Workbook_Open()
       oldId = WorksheetFunction.Max(Tabelle5.Columns(1))
    End Sub
  6. Füge den folgenden Code in das CodeModul von Tabelle5 ein:

    Private Sub Worksheet_Activate()
       oldId = WorksheetFunction.Max(Tabelle5.Columns(1))
    End Sub
    
    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim GetNewID As Long
       GetNewID = WorksheetFunction.Max(Tabelle5.Columns(1)) + 1
    
       If Target.Count > 1 Then Exit Sub
    
       If Target.Column = 3 And Target.Value <> "" And Cells(Target.Row, "A").Value = "" Then
           If Target.Row = 1 Then oldId = 0
           If oldId > WorksheetFunction.Max(Tabelle5.Columns(1)) Then
               Cells(Target.Row, "A").Value = oldId + 1
           Else
               Cells(Target.Row, "A").Value = GetNewID
           End If
           oldId = WorksheetFunction.Max(Tabelle5.Columns(1))
       End If
    End Sub
  7. Schließe den VBA-Editor und gehe zurück zu Excel.

Mit diesem Makro wird eine eindeutige ID in der Spalte A vergeben, wenn in Spalte C ein Wert eingegeben wird. Das Makro sorgt dafür, dass bereits vergebene IDs nicht überschrieben werden, auch wenn Zeilen gelöscht werden.


Häufige Fehler und Lösungen

  • Problem: ID wird erneut vergeben, wenn die letzte Zeile gelöscht wird.

    • Lösung: Stelle sicher, dass der Code in der Worksheet_Change-Prozedur korrekt aktualisiert wird, um die höchste ID zu bestimmen.
  • Problem: Das Makro funktioniert nicht.

    • Lösung: Überprüfe, ob die Makros in Excel aktiviert sind. Gehe zu „Datei“ > „Optionen“ > „Trust Center“ und aktiviere die Makros.

Alternative Methoden

Neben VBA kannst du auch sogenannte „Tabellen“ in Excel nutzen. Indem du deine Daten in einer Excel-Tabelle (Tabelle5) anordnest, kannst du die Funktion =MAX(A:A)+1 in Spalte A verwenden, um automatisch eine ID zu generieren, aber dies erfordert manuelles Eingreifen, wenn IDs gelöscht werden.

Eine weitere Methode ist die Verwendung von Excel-Formeln mit EINDEUTIG, jedoch erfordert dies eine manuelle Pflege der IDs.


Praktische Beispiele

  • Beispiel 1: Jedes Mal, wenn ein Wert in Spalte C eingegeben wird, wird automatisch eine ID in Spalte A vergeben.
  • Beispiel 2: Wenn Zeile 5 mit der ID 5 gelöscht wird, bleibt die ID 5 in der Datenbank und wird nicht erneut vergeben.

Tipps für Profis

  • Verwende Excel-Tabellen, um die Handhabung von Daten zu erleichtern. Tabellen bieten Funktionen wie das automatische Erkennen von Datenbereichen.
  • Du kannst das Makro anpassen, um komplexere ID-Formate zu generieren, z.B. „ID-001“, „ID-002“ usw.
  • Achte darauf, deine Daten regelmäßig zu sichern, um Datenverlust zu vermeiden, insbesondere wenn du mit Makros arbeitest.

FAQ: Häufige Fragen

1. Wie kann ich die ID in Excel automatisch generieren?
Du kannst ein VBA-Makro verwenden, um eine ID automatisch zu generieren, indem du die Worksheet_Change-Ereignisprozedur nutzt.

2. Was passiert, wenn ich eine Zeile lösche?
Das Makro sorgt dafür, dass die IDs nicht wiederverwendet werden, auch wenn Zeilen gelöscht werden. Die höchste ID bleibt gespeichert.

3. Ist VBA notwendig für die einmalige ID?
Ja, um eine eindeutige ID zu erzeugen, ist VBA eine effektive Methode, da Excel von Haus aus keine automatische ID-Generierung bietet.

4. Kann ich die IDs manuell vergeben?
Ja, du kannst die IDs auch manuell eingeben, jedoch verlierst du die Vorteile der automatischen Generierung und die Sicherheit, dass keine Duplikate entstehen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige