Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
644to648
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
644to648
644to648
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Spalte auf Einmaligkeit der Werte prüfen
02.08.2005 08:29:53
David
Hallo zusammen.
Ich habe folgendes Problem: Ich muss in einer Tabelle per VBA einen Teil der Spalte C auf Einmaligkeit prüfen. Welchen Teil finde ich raus, indem ich nach Spalte A sortiere und dort alle Einträge unter dem Wert 5320704 (sind nur Zahlenwerte enthalten) in ein Range-Objekt schreibe.
Mein Problem ist nun, wie kann ich diese Range (die etwa "A1:A570" ist, ist aber Variabel) auf die Spalte C umlegen (also beim Beispiel auf "C1:C570), und wie kann ich da die Zellen darin auf Einmaligkeit prüfen?
Die Zellen haben Buchstabenwerte wie "SKKT", aber die dürfen nur jeweils einmal vorkommen, deshalb möchte ich die, die doppelt sind, rot markieren.
Kann mir da Jemand helfen? Der Code, den ich bereits habe:

Sub CheckSingleness()
Cells.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Dim Cell As Range
For Each Cell In ActiveSheet.UsedRange.Columns(1).Cells
If Cell.Value >= 5320704 Then
Exit For
End If
Next
' In Cell ist dann die Range
End Sub

Danke schonmal
PS: Toll wäre es, wenn mir noch Jemand sagen könnte, wie ich dann auch automatisch eine MsgBox anzeigen lassen könnte, wenn jemand einen neuen Eintrag erstellt, der aber schon Vorhanden ist.

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalte auf Einmaligkeit der Werte prüfen
02.08.2005 09:50:20
Matthias
Hallo David,
das mit dem Sortieren und in Spalte C schreiben, muss das sein oder ist das Teil deiner Lösungsidee?
Man könnte nämlich in Spalte C auch schreiben
=WENN(A1

und runter kopieren.
Dann hst du in Spalte C auch die gewünschten Werte, allerdings unsortiert.
Die Markierung doppelter Werte geht so:
Spalte C markieren, Format - Bedingte Formatierung, "Formel ist":

=UND(ZÄHLENWENN($C$1:$C1;C1)>1;C1<>"")

dann Format vergeben und fertig.
Gruß Matthias
Anzeige
AW: Spalte auf Einmaligkeit der Werte prüfen
02.08.2005 10:18:32
David
Danke für die schnelle Antwort
"das mit dem Sortieren und in Spalte C schreiben, muss das sein oder ist das Teil deiner Lösungsidee?"
Das war nur eine Idee.. weil ich alle betreffenden Werte in einer Range haben wollte
"=WENN(A1 Soweit ich das versteh würd es mir alle höheren löschen und die kleineren durch den jeweiligen Wert in A ersetzen.
Aber die Werte sollen gleichbleiben, nur gegebenenfalls formatiert werden.
Die Tabelle sieht etwa so aus (wenn sortiert):
A            B        C         D
16384  4000  SKAD  C_GrpSkadenz
16385  4001  SKER  C_GrpErSkadenz
16386  4002  SKBW  C_GrpBewSkadenz
16387  4003  SKKP  C_GrpKfPeriodeSkadenz
16388  4004  SKKT  C_GrpKtoSkadenz
16389  4005  SKGB  C_GrpGebSkadenz
16390  4006  SKZG  C_GrpZgSkadenz
16391  4007  SKAU  C_GrpAusschSkadenz
[....]
5312512  511000  SCDpgPosArt  C_GrpSCDpgPosArt
5316608  512000  SCDpgTrxArt  C_GrpSCDpgTrxArt
5320704  513000  SCGruppen  C_GrpGruppe
67108864  4000000  FIRS  C_Skadenz_DummyFirst
Die Unterste Linie gehört dann nicht mehr zum zu formatierenden Bereich. (ich überprüf nicht nach spalte B, weil dort HEX-Werte stehen und das beim Sortieren nicht funktioniert hat, und beim Überprüfen wohl auch kaum.
Der Wert in C sollte einmalig sein, da er ein eindeutiger Kennzeichner ist/sein sollte
gelöscht werden sollte er aber nicht. Nur gegebenenfalls Rot hinterlegt.
"=UND(ZÄHLENWENN($C$1:$C1;C1)>1;C1"")"
Das ziehlt ja darauf ab, dass alle Zellen, die nicht Leer sind, Markiert werden. Da aber die Zellen nicht gelöscht werden sollen, kann ich den leider auch nicht benutzen.
Anzeige
AW: Spalte auf Einmaligkeit der Werte prüfen
02.08.2005 10:47:25
Matthias
Hallo David,
da hab ich einiges falsch verstanden ;-)
versuch das mal, ich kann es nicht testen, weil ich die Tabelle nicht nachbauen will:

Sub CheckSingleness()
Cells.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Dim Cell As Range
For Each Cell In ActiveSheet.UsedRange.Columns(1).Cells
If Cell.Value >= 5320704 Then
Exit For
End If
Next
' In Cell ist dann die Range
Range("C:C").FormatConditions.Delete
With Range("C1:C" & Cell.Row)
.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=UND(ZÄHLENWENN($C$1:$C1;C1)>1;C1<>"""")"
.FormatConditions(1).Interior.ColorIndex = 3
End With
End Sub

Gruß Matthias
Anzeige
AW: Spalte auf Einmaligkeit der Werte prüfen
02.08.2005 10:58:13
David
Hi Matthias
Das scheint zu funktionieren! Danke vielmals!
Jetzt muss ich nur noch rauskriegen, wie ich eine MsgBox reinbringen kann, wenn Jemand einen neuen Eintrag macht, dessen C-Wert schon vorhanden ist. Aber ich denke, das sollte ich wohl auch alleine noch hinkriegen. (Auch wenn ich ne Weile daran haben werd... Es ist zu lange her seit ich VB benutzt hab ;) )
Danke nochmals!
Gruss, David
AW: Spalte auf Einmaligkeit der Werte prüfen
02.08.2005 11:12:05
Matthias
Hallo David,
so vielleicht, ins Modul des Tabellenblatten:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
If Target.Count > 1 Then Exit Sub
If Target.Column <> 3 Then Exit Sub
i = WorksheetFunction.CountIf(Range("C:C"), Target.Value)
If i > 1 Then MsgBox "'" & Target.Value & "' ist schon " & i - 1 & " mal in Spalte C vorhanden!"
End Sub

Gruß Matthias
Anzeige
AW: Spalte auf Einmaligkeit der Werte prüfen
02.08.2005 11:44:59
David
Hallo Matthias
Ja, das klappt. Danke!
(Ich komm aus dem Dankesagen gar nicht mehr raus :) Ich hab schon befürchtet, ich könne ne Woche auf eine Antwort wie "RTFM" oder so warten, und dann wird mir in so kurzer Zeit geholfen. Find ich toll!)
Ist Zwar nur eine Nebensache, aber weisst du vieleicht gerade, ob ich da: "i = WorksheetFunction.CountIf(Range("C:C"), Target.Value)" vieleicht auch die Range von Cell übergeben kann? Ich glaube zwar kaum, da "Cell" erst beim ausführen des Makros erstellt und nach Ablauf out-of-scope geht, aber wer weiss? :)
Wenns nicht geht ist das auch kein Beinbruch, die ganze Spalte zu durchsuchen macht auch nicht viel. (Auf die Idee kam ich auch nur, weil ich eigentlich nur innerhalb dieses Bereiches eine Überprüfung brauch und die Tabelle jetzt schon 3443 Zeilen hat und voraussichtlich noch grösser wird.)
Wie auch immer, danke nochmals, du hast mir eine ganze Ecke Arbeit/Googlen erspart.
Gruss, David
Anzeige
AW: Spalte auf Einmaligkeit der Werte prüfen
02.08.2005 16:56:52
Matthias
Hallo David,
wenn die CountIf()-Function eingeschränkt werden soll, müsste vorher geprüft werden, ob die Spalte A dem Kriterium entspricht (kleiner 5320704). Wenn nicht, muss ja gar nicht geprüft werden, oder?
Außerdem müsste die Liste schon sortiert sein oder aber sortiert werden... wann rufst du denn das Sortiermakro auf?
Ist mir alles noch ein wenig unklar.
Gruß Matthias
AW: Spalte auf Einmaligkeit der Werte prüfen
03.08.2005 06:50:22
David
Hallo Matthias
Eigentlich erst, wenn ich das Makro ausführ. ich hab mir das mal überlegt, und ich denk, da immernoch zu sortieren (bzw. es funktioniert erst wenns sortiert ist) und zu überprüfen würde zu lange dauern. Schon bei einer Sekunde Verzögerung würde das den Schreibfluss beeinträchtigen, besonders, wenn man mehrere neue Zeilen anhängen will. Deshalb lass ich das mal. Was mich aber noch interessieren würde, ist, ob man da noch machen kann, dass es auch überprüft, wenn z.b. die ganze spalte aus der Zwischenablage eingefügt wird. Bis jetzt funktioniert es ja nur, wenn man die Zelle in der Spalte einzeln tippt.
Gruss David
Anzeige
AW: Spalte auf Einmaligkeit der Werte prüfen
03.08.2005 14:17:52
Matthias
Hallo David,
Was mich aber noch interessieren würde, ist, ob man da noch machen kann, dass es auch überprüft, wenn z.b. die ganze spalte aus der Zwischenablage eingefügt wird. Bis jetzt funktioniert es ja nur, wenn man die Zelle in der Spalte einzeln tippt.
das geht so:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim r As Range, z As Range
Set r = Intersect(Target, Range("C:C"))
If Not r Is Nothing Then
For Each z In r
i = WorksheetFunction.CountIf(Range("C:C"), z.Value)
If i > 1 Then MsgBox "'" & z.Value & "' ist schon " & i - 1 & " mal in Spalte C vorhanden!"
Next z
End If
End Sub

Hier wird in r die Schnittmenge r des geänderten Bereiches mit der Spalte C gebildet. Wenn die Schnittmenge nicht leer ist, werde alle Zellen der Schnittmenge (For each z in r) geprüft.
Gruß Matthias
Anzeige
AW: Spalte auf Einmaligkeit der Werte prüfen
03.08.2005 14:29:01
David
Und schon wieder Danke!
Was würde ich nur ohne deine Hilfe machen? Naja, wohl noch etwas länger Googlen wie man die aktive Zelle bei mehrzelliger Auswahl finden kann..
Das einzige was ich geschafft hab, war ein Endlosloop an Messageboxen ;)
AW: Spalte auf Einmaligkeit der Werte prüfen
03.08.2005 14:29:20
David
Und schon wieder Danke!
Was würde ich nur ohne deine Hilfe machen? Naja, wohl noch etwas länger Googlen wie man die aktive Zelle bei mehrzelliger Auswahl finden kann..
Das einzige was ich geschafft hab, war ein Endlosloop an Messageboxen ;)
AW: Spalte auf Einmaligkeit der Werte prüfen
03.08.2005 14:29:40
David
Und schon wieder Danke!
Was würde ich nur ohne deine Hilfe machen? Naja, wohl noch etwas länger Googlen wie man die aktive Zelle bei mehrzelliger Auswahl finden kann..
Das einzige was ich geschafft hab, war ein Endlosloop an Messageboxen ;)
Anzeige
AW: Spalte auf Einmaligkeit der Werte prüfen
03.08.2005 14:32:56
Matthias
Hallo David,
Naja, wohl noch etwas länger Googlen wie man die aktive Zelle bei mehrzelliger Auswahl finden kann..
Was das jetzt noch eine versteckte Frage? ;-)
Gruß Matthias
AW: Spalte auf Einmaligkeit der Werte prüfen
03.08.2005 14:36:25
David
Hi Matthias
Nein, keine Angst. So wollte ich das Problem lösen, das nun (durch dich) gelöst wurde.
Ich glaube, nun muss ich nichts mehr Fragen ;)
Gruss David
Sorry wegen 3fachpost [n/t]
03.08.2005 14:30:55
David
kein text

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige