09.02.2017, 16:33 (Dieser Beitrag wurde zuletzt bearbeitet: 10.02.2017, 19:58 von Glausius.)
Einen schönen guten Tag in die Runde
ich würde gern folgendes realisieren:
In den Spalten U bis Y ist eine bedingte Formatierung erstellt.
In U stehen Zahlen. Diese sind unterschiedlich wie auch mehrfach dieselben.
Als Beispiel:
100
100
5
100
20
5
In W stehen unterschiedliche Zahlen.
Die bedingte Formatierung sucht nun in U nach den gleichen Werten und in W nach der kleinsten Zahl dazu - dieser Bereich wird eingefärbt.
Nun sind die relevanten Zahlenbereiche also markiert.
Könnte man nun in U klicken - VBA erkennt um welche Zahlengruppe es sich handelt und löscht alle nicht gefärbten Zellen (U bis W) dieser Zahlengruppe dieser kompletten Spalten?
Da ich weiß, dass ich supertoll erklären kann, hab ich eine Beispielmappe gebaut
09.02.2017, 17:38 (Dieser Beitrag wurde zuletzt bearbeitet: 10.02.2017, 20:00 von Glausius.)
Hallo Klaus,
du beschreibst schon gut, nur ich bin schwer von Kapéé. :19:
Die anderen haben ja bisher nie geschrieben, dass sie Dich nicht verstehen.
Nun zu Deinem Problem.
Farben die mit Bedingter Formatierung gesetzt sind, sind nur aufwendig auszulesen.
Ein Code, der das macht, hat mehr Zeilen, als die Codezeilen, die ich bisher für Dich geschrieben habe. Nur damit Du eine Vorstellung hast.
Ist vielleicht etwas untertrieben, aber egal.
Um das Ganze aber trotzdem mit wenig Aufwand lösen zu können, kann man sich an die Bedingung der Bedingten Formatierung halten.
Das hieße, man müsste die Bedingung kennen. Ist das die, die auch in der Beispielmappe eingestellt ist?
Edit:
Ich sehe Orange aber kein Hellgrün in der Datei. Entweder mein Excle stellt es anders dar oder ich muss zum Optiker.
Wäre nett, wenn andere mir mitteilen könnten, wie es mir gesundheitlich geht. :22:
schön Dich zu lesen - auch wenn es dir scheinbar nicht so gut geht.... :D
also bei mir sind die Felder der Range V:Y hellgrün...
Hab ich mir also mal wieder was tolles überlegt was... hm... wenn das natürlich ein großer Aufwand ist, dann ist das wohl einfacher man sucht die Bereiche von Hand raus.
Oder was ist denn wenn man garnicht nach den Farben guckt, sondern diese Berechnung die die Bedingte Formel benutzt verwendet und alles was größer als die der kleinste Wert (das wäre dann der hellgrüne! ,-) Bereich) löschen würde?
Wäre das vielleicht einfacher umzusetzen?
Japp - so wie das in der Bsp Mappe steht ist das auch im Original.
Was Atilla schreibt, trifft auf die Xl-Versionen vor Xl14/2010 zu, Klaus,
ab letzterer ist das per Subprozedur recht einfach, mit einer UDF in einer Zellformel ggf auch, aber mit einem kleinen Umweg, weil MS den direkten für UDFs in Zellformeln gesperrt hat. Das „Zauberwort“ heißt .DisplayFormat. Das ist eine objektbegründende Eigenschaft des Range-Objekts, die ebenfalls Eigenschaften wie .Interior.Color u.a. hat, aber stets das aktuelle Format zeigt, also auch das durch BedingtFormatierung verursachte.
Gruß, Castor
Hallo Castor,
danke für den Tip. Aber wenn das für XL Versionen vor 2010 gilt, dann hat der Atilla doch nicht so unrecht. Ich arbeite ja mit 2003 bzw 2007
Atilla ich glaub ich hab mich wiedermal doof ausgedrückt.
Ich versuche das nochmal zu beschreiben:
Lassen wir mal die Farb-Idee ganz aus dem Kopf, dann ist das vielleicht einfacher zu verstehen.
Ich formuliere um
Nehmen wir nocheinmal die Range U:Y
In U stehen Zahlen die mehrfach vorkommen (die Zahlen die mehrfach vorkommen bilden eine "Zahlengruppe"). Das ist glaub ich einfach zu verstehen?!
In W stehen dazugehörige Zahlen... (diese stellen eine Menge dar). Das ist glaub ich auch verständlich.
Jetzt wirds interessant:
Nehmen wir nun eine solche Zahlengruppe. Alle Zahlen die in U stehen und 4004 heißen.
Diese Gruppe müsste der code erkennen.
Jetzt guckt er in in Spalte W neben diesen 4004er Zahlen was dort für Zahlen stehen.
Der kleinste Wert ist der, der interessiert.
In unserem Fall ist das die (fast) neben der 4004 stehende 80. Um diese Zeile geht es.
Wenn man jetzt auf irgendeinde 4004 klickt, dann sollen alle anderen Zeilen der Zahlengruppe 4004 gelöscht werden.
In unserem Fall sind das die Zeilen mit der 100, 90 und 85.
Damit ist die Zahlengruppe 4004 bereinigt.
Jetzt könnte man sich die nächste Zahlengruppe anschauen.
Sagen wir die 101. Hier wäre der kleinste Wert - der, der interessiert - die 50.
Alle anderen Zeilen der Zahlengruppe 101 sollten per Klick auf eine 101er Zahl gelöscht werden.
In unserem Bsp wären das die Zeilen mit der 100, 90, 80, 70 und 60.
Damit wäre auch die 101er Zahlengruppe bereinigt...
Wichtig ist dabei, dass keine ganzen Zeilen gelöscht werden können, sondern nur die Werte aus dem Bereich (U:Y)
Die Spalte U nach der gewünschten Ziffer und die Hilfsspalte nach WAHR filtern und die Inhalte löschen - ist das eine Option für dich? Bei Nichtgebrauch Spalte einfach ausblenden.
Gruß Günter Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen. angebl. von Georg Christoph Lichtenberg (1742-1799)
Eher noch weniger. Wenn ich das mache, was ich jetzt verstanden habe, dann würde ich bei klick auf 4004 ohne nach links oder rechts zu gucken
alle 4004 er löschen. Und bei Klick auf 101 sind alle 101 weg, natürlich auch die Inhalte aus den Zellen daneben bis Spalte Y.
09.02.2017, 22:19 (Dieser Beitrag wurde zuletzt bearbeitet: 09.02.2017, 22:19 von atilla.)
:72:
Aua, aua, aua, jetzt steig ich dahinter.
Günter Vorschlag hat mir die Augen aufgemacht.
Ich habe bisher nur die Bedingte Formatierung in U betrachtet und auch dort die Farben.
Die Feile führten ja auch dahin.
Na, Günters Vorschlag ist doch machbar.
einmal nach dem Wert in U Filtern und dann nach Spalte Y mit Falsch.
Das sollte auch per VBA nach Doppelklick in die Zelle machbar sein.
Magst Du manuell oder per Code und Doppelklick?
Und beim nächsten mal erklärst Du gleich in drei Varianten, was Du möchtest, vielleicht kapier ich es dann auf Anhieb. :19:
Jetzt weiß ich auch, warum ich Dich diesmal nicht verstanden habe. Ich habe Deinen ersten Beitrag gar nicht gelesen, sondern gleich die Datei
runtergeladen und dort die Erklärung angesehen. Im Beitrag hast Du es doch wunderbar erklärt. Wahrscheinlich war ich so nervös, dass ich es diesmal wieder vermassele und habs dann auch vermasselt. Muss nicht zum Optiker aber....
unten stehenden Code in das Codemodul der Tabelle:
Code:
If Not Intersect(Target, Range("U2:U170")) Is Nothing Then
Cancel = True
bedingt_löschen
End If
End Sub
Sub bedingt_löschen()
Dim i As Long, p
Dim Wert
Dim rngA As Range
Wert = Selection.Value
p = Evaluate("=MIN(IF($U$2:$U$170=" & Wert & ",$W$2:$W$170))")
If IsNumeric(p) Then
For i = 2 To 170
If Cells(i, 21) = Wert And Cells(i, 23) <> p Then
If rngA Is Nothing Then
Set rngA = Range(Cells(i, 21), Cells(i, 25))
Else
Set rngA = Union(rngA, Range(Cells(i, 21), Cells(i, 25)))
End If
End If
Next i
End If
If Not rngA Is Nothing Then
rngA.ClearContents
Set rngA = Nothing
End If
Range(Cells(Selection.Row, 21), Cells(Selection.Row, 25)).ClearContents