Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1504to1508
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

Tabelle auf doppelte Einträge prüfen mit ausgabe

Tabelle auf doppelte Einträge prüfen mit ausgabe
14.07.2016 21:49:58
Peter
Hallo,
ich möchte über ein GUI eine Eingabe ermöglichen (funktioniert) welche von Tabelle1 Emailadressen in Emails speichert. Kein Problem soweit.
Jetzt möchte ich die Funktion erweitern, dass zusätzlich informirt wird, wenn der Eintrag schon vorhanden ist. Zusätzlich soll dann die Eingabe nicht erfolgen sondern die Userform geschlossen werden.
Wenn aber nicht vorhanden soll der User natürlich angelegt werden.
For i = 1 To zeilemax
If Sheets("Emails").Cells(i, 2) = varNachname And Sheets("Emails").Cells(i, 1) = varVorname Then
MsgBox ("Nutzer: " & varVorname & " " & varNachname & vbCrLf & "Email: " & Sheets("Emails").Cells(i, 3) & vbCrLf & vbCrLf & "existiert bereits in der Liste!") ', vbOKOnly, "Nutzer vorhanden!"
MsgBox ("1")
Unload Mail_anlegen
Else
Sheets("EMails").Cells(Ersteleere, 1).Resize(1, 2) = Array(varVorname, varNachname)
Sheets("EMails").Cells(Ersteleere, 3) = Left(varVorname, 1) & "." & varNachname & "bla.de"
MsgBox ("2")
End If
Next i

Wenn ich das aber so mache geht er mir natürlich jeden Eintrag einzeln durch und schreibt, wenn der erste Eintrag nicht gleich passend ist IMMER den user rein wodurch er dann auf jeden fall doppelt ist.
Nur leider bin ich grad zu blöd den richtigen weg zu finden um erstmal ALLES zu prüfen und anschließend zu schauen ob vor und nachname vorhanden sind.
Ideen?
Grüße und Danke schonmal

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Tabelle auf doppelte Einträge prüfen Zählenwenns
14.07.2016 22:02:54
Daniel
Hi
im Prinzip so:
for i = 1 to ZeileMax
If Sheets("Emails").Cells(i, 2) = varNachname And Sheets("Emails").Cells(i, 1) = varVorname  _
Then Exit For
Next
if i > ZeileMax then
hier der Code zum Hinzufügen des Eintrags
Else
hier die Meldung, "Eintrag schon vorhanden"
End if
man nutzt hier aus, dass nach einem vollständigen Schleifendurchlauf der Schleifenzähler immer grösser ist als der festgelegte Schleifenendwert.
wird die Schleife jedoch abgebrochen (Exit For) so behält der Schleifenzähler den Wert, den er beim Abbruch hat.
aber warum arbeitest du hier nicht einfach mit ZählenWenns? das kann man über Worksheetfunctions auch in VBA einsetzen.
If Worksheetfunction.CountIfs(Sheets("Emails").Columns(2), varNachname, Sheets("Emails"). _
Columns(1), varVorname) = 0 Then
hier der Code zum Hinzufügen des Eintrags
else
hier die Meldung, Eintrag schon vorhanden
End If
damit vermeidest du die Schleife, was zumindest beim Testen des Codes im Einzelstep hilfreich ist.
Gruß Daniel
Anzeige
AW: Tabelle auf doppelte Einträge prüfen Zählenwenns
14.07.2016 22:20:49
Werner
Hallo Daniel,
Verständnisfrage eines Mitlesers. Wäre diese If Anordnung besser, weil der zweite If Zweig nur dann durchlaufen wird wenn der erste If Zweig erfolgreich war. Bei der Verknüpfung mit And werden doch immer beide If Anweisungen geprüft.
for i = 1 to ZeileMax
If Sheets("Emails").Cells(i, 2) = varNachname Then
If Sheets("Emails").Cells(i, 1) = varVorname Then
Exit For
End If
End If
Next
if i > ZeileMax then
hier der Code zum Hinzufügen des Eintrags
Else
hier die Meldung, "Eintrag schon vorhanden"
End if
Gruß Werner
AW: Tabelle auf doppelte Einträge prüfen Zählenwe
14.07.2016 22:27:35
Daniel
Hi
ja, ist prinzipell besser.
gruß Daniel
Anzeige
AW: Danke owT
14.07.2016 23:03:10
Werner
AW: Danke owT
15.07.2016 17:15:31
Peter
Hallo ihr 2,
die Lösung war perfekt, klappt alles wie es soll. Hätte ich wohl doch die Mühe machen sollen und 2 Schleifen machen :)
Hier der fertige Code, der funktioniert wie er soll :)
Public Sub NeuButton_Click()
Dim Ersteleere, zeilemax, i As Integer
Ersteleere = Sheets("Emails").Cells(Rows.Count, 1).End(xlUp).Row + 1
zeilemax = Sheets("Emails").Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To zeilemax
If Sheets("Emails").Cells(i, 2) = NachnameMailTxt Then
If Sheets("Emails").Cells(i, 1) = VornameMailtxt Then
Exit For
End If
End If
Next
If i > zeilemax Then
Sheets("EMails").Cells(Ersteleere, 1).Resize(1, 2) = Array(VornameMailtxt,  _
NachnameMailTxt)
Sheets("EMails").Cells(Ersteleere, 3) = Left(VornameMailtxt, 1) & "." & NachnameMailTxt & _
"bla.de"
Unload Mail_anlegen
ActiveWorkbook.Save
Else
MsgBox ("Nutzer: " & VornameMailtxt & " " & NachnameMailTxt & vbCrLf & "Email:  " &  _
Sheets("Emails").Cells(i, 3) & vbCrLf & vbCrLf & "existiert bereits in der Liste!")
SendKeys "{TAB}"
SendKeys "{TAB}"
End If
End Sub

Anzeige
AW: Danke für die Rückmeldung und Hinweis
15.07.2016 17:42:57
Werner
Hallo Peter,
der Dank gebührt hier wohl eher Daniel, ich habe ja eher nur interessehalber eine Rückfrage gestellt, die du dann aber im Code umgesetzt hast.
Nur noch ein kleiner Hinweis zu deinem Code.
Mit dieser Schreibweise
Dim Ersteleere, zeilemax, i As Integer

wird nur die Variable i als Integer dimensioniert, Erstellere und zeilemax sind vom Typ Variant
wenn dann so:
Dim Ersteleere As Long, zeilemax As Long, i As Long
oder so:
Dim Ersteleere As Long
Dim zeilemax As Long
Dim i As Long

Zudem hat Excel mittlerweile mehr Zeilen als eine Variable vom Typ Integer aufnehmen kann, deshalb besser Long. Da auf modernen Computersytemen LONG und INTEGER-Variablen in etwa gleich schnell verarbeitet werden, gibt es keinen Grund, Integer als Datentyp zu verwenden und man kann getrost LONG als Standardtyp für Ganzzahlen verwenden.
Gruß Werner
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige