Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
196to200
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
196to200
196to200
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Meist verwendete Zellen-Hintergrundfarbe ermitteln

Meist verwendete Zellen-Hintergrundfarbe ermitteln
02.01.2003 20:20:16
Martin Springer
Hallo,

gibt es eine Möglichkeit, dass ich per Makro die meist verwendete Zellhintergrundfarbe innerhalb einer Markierung ermitteln kann?

MfG

Martin

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Meist verwendete Zellen-Hintergrundfarbe ermitteln
02.01.2003 20:41:56
Hajo_Zi
Hallo Martin


Option Explicit
Option Base 1

Sub Martin()
' erstellt von Hajo Ziplie 02.01.03
Dim RaZelle As Range
Dim ByI As Byte
Dim Werte(56) As Long
Dim StZelle As String
For Each RaZelle In Selection
StZelle = RaZelle.Address
If RaZelle.Interior.ColorIndex >= 1 And RaZelle.Interior.ColorIndex <= 56 Then
Werte(RaZelle.Interior.ColorIndex) = Werte(RaZelle.Interior.ColorIndex) + 1
End If
Next RaZelle
If Range(StZelle).Interior.ColorIndex >= 1 And Range(StZelle).Interior.ColorIndex <= 56 Then
Werte(Range(StZelle).Interior.ColorIndex) = Werte(Range(StZelle).Interior.ColorIndex) + 1
End If
For ByI = 1 To 56
If Werte(ByI) <> 0 Then MsgBox "Die Farbe " & ByI & " kommt " & Werte(ByI) & " vor"
Next ByI
End Sub

Code eingefügt mit: Excel Code Jeanie

Code Jeanie
Frage
Das Umsetzen nach Html klappt perfekt, auch die Ansicht in den Foren ist gegeben. Bei manchen Foren kann man aber anscheinend nicht den dargestellten Code nach VBA rückkopieren. Warum?
Antwort
Dies liegt nicht an der Code Jeanie !!! Manche Foren interpretieren anscheinend < pre > < /pre > Tags nicht richtig und erzeugen am Zeilenende einen weichen Zeilenumbruch anstatt eines harten Zeilenumbruches. Dies führt dazu, dass im VBA-Editor die Zeilen hintereinander geschrieben werden. Zum Rückkopieren in solchen Fällen: Fügen Sie den kopierten Code aus dem Forum nach Word ein, kopieren Sie ihn dort wieder und fügen Sie ihn dann im VBA - Editor ein

Gruß Hajo

Anzeige
Re: Meist verwendete Zellen-Hintergrundfarbe ermitteln
02.01.2003 21:38:53
Martin Springer
Hallo Hajo,

vielen Dank für die Hilfe. Du hast mich ein ganzes Stück voran gebracht! Im Prinzip habe ich genau das gesucht, schließlich werden die Farbe in den Zellen gezählt. Jedoch gibt mir das Makro alle Farben wieder. Ist es auch möglich, dass das Makro nur die meist verwendete Zellen-Hintergrundfarbe meldet?

Re: Meist verwendete Zellen-Hintergrundfarbe ermitteln
02.01.2003 21:42:07
Hajo_Zi
Hallo Martin

was sind die meist verwendeten Farben, das geht von 1 bis 56.

Gruß Hajo

Re: Meist verwendete Zellen-Hintergrundfarbe ermitteln
02.01.2003 22:10:03
Martin Springer
Hallo Hajo,

ich meine, wenn 2 Zellen grün, 8 Zellen blau und 16 Zellen gelb formatiert sind, dann soll nur die Farbe der gelben Zellen wiedergegeben werden.
Nochmals vielen Dank für Deine Bemühungen!

MfG

Martin

Anzeige
Re: Meist verwendete Zellen-Hintergrundfarbe ermitteln
02.01.2003 22:24:20
Hajo_Zi
Hallo Martin

mir scheint Du bist dran intressiert. Ich habe jetzt mal eine komplette Variante draus gemacht einschl. der Anzeige des Farbnamens. Natürlich nur für die Standardfarben.


Option Explicit
Option Base 1

Sub Martin()
' erstellt von Hajo Ziplie 02.01.03
' nur die max. Farben anzeigen
Dim RaZelle As Range
Dim ByI As Long
Dim Werte(56) As Long
Dim StZelle As String
Dim LoMax As Long ' maximale Farbe
For Each RaZelle In Selection
StZelle = RaZelle.Address
If RaZelle.Interior.ColorIndex >= 1 And RaZelle.Interior.ColorIndex <= 56 Then
Werte(RaZelle.Interior.ColorIndex) = Werte(RaZelle.Interior.ColorIndex) + 1
If Werte(RaZelle.Interior.ColorIndex) > LoMax Then LoMax = Werte(RaZelle.Interior.ColorIndex)
End If
Next RaZelle
If Range(StZelle).Interior.ColorIndex >= 1 And Range(StZelle).Interior.ColorIndex <= 56 Then
Werte(Range(StZelle).Interior.ColorIndex) = Werte(Range(StZelle).Interior.ColorIndex) + 1
If Werte(Range(StZelle).Interior.ColorIndex) > LoMax Then LoMax = Werte(Range(StZelle).Interior.ColorIndex)
End If
For ByI = 1 To 56
If Werte(ByI) = LoMax Then MsgBox "Die Farbe " & FarbName(ByI) & " kommt " & Werte(ByI) & " vor"
' If Werte(ByI) <> 0 Then MsgBox "Die Farbe " & ByI & " kommt " & Werte(ByI) & " vor"
Next ByI
End Sub

Function FarbName(FarbIndex As Long) As String
' erstellvon Hajo Ziplies
Dim Farbcode As Long
Farbcode = ActiveWorkbook.Colors(FarbIndex)
Select Case Farbcode
Case 0
FarbName = "Schwarz"
Case 16777215
FarbName = "Weiß"
Case 255
FarbName = "Rot"
Case 65280
FarbName = "Grelles Grün"
Case 16711680
FarbName = "Blau"
Case 65535
FarbName = "Gelb"
Case 16711935
FarbName = "Rosa"
Case 16776960
FarbName = "Türkis"
Case 128
FarbName = "Dunkelrot"
Case 32768
FarbName = "Grün"
Case 8388608
FarbName = "Dunkelblau"
Case 32896
FarbName = "Dunkelgelb"
Case 8388736
FarbName = "Violett"
Case 8421376
FarbName = "Blaugrün"
Case 12632256
FarbName = "Grau -25%"
Case 8421504
FarbName = "Grau -50%"
Case 16751001
FarbName = "Immergrün"
Case 6697881
FarbName = "Pflaume"
Case 13434879
FarbName = "Elfenbein"
Case 16777164
FarbName = "Helles Türkis"
Case 6684774
FarbName = "Dukelpurpur"
Case 8421631
FarbName = "Koralle"
Case 13395456
FarbName = "Meeresblau"
Case 16764108
FarbName = "Eisblau"
Case 8388608
FarbName = "Dunkelblau"
Case 16711935
FarbName = "Rosa"
Case 65535
FarbName = "Gelb"
Case 16776960
FarbName = "Türkis"
Case 8388736
FarbName = "Violett"
Case 128
FarbName = "Dnkelrot"
Case 8421376
FarbName = "Blaugrün"
Case 16711680
FarbName = "Blau"
Case 16763904
FarbName = "Himmelblau"
Case 16777164
FarbName = "Helles Türkis"
Case 13434828
FarbName = "Hellgrün"
Case 10092543
FarbName = "Hellgelb"
Case 16764057
FarbName = "Blassblau"
Case 13408767
FarbName = "Hellrosa"
Case 16751052
FarbName = "Lavendel"
Case 10079487
FarbName = "Gelbraun"
Case 16737843
FarbName = "Hellblau"
Case 13421619
FarbName = "Aquamarin"
Case 52377
FarbName = "Gelbgrün"
Case 52479
FarbName = "Gold"
Case 39423
FarbName = "Helles Orange"
Case 26367
FarbName = "Orange"
Case 10053222
FarbName = "Blaugrau"
Case 9868950
FarbName = "Grau - 40%"
Case 6697728
FarbName = "Dunkelblaugrün"
Case 6723891
FarbName = "Meeresgrün"
Case 13056
FarbName = "Dunkelgrün"
Case 13107
FarbName = "Olivgrün"
Case 13209
FarbName = "Braun"
Case 6697881
FarbName = "Pflaume"
Case 10040115
FarbName = "Indigoblau"
Case 3355443
FarbName = "Grau -80%"
Case Else
FarbName = "Farbskala"
End Select
End Function

Code eingefügt mit: Excel Code Jeanie

Code Jeanie
Frage
Das Umsetzen nach Html klappt perfekt, auch die Ansicht in den Foren ist gegeben. Bei manchen Foren kann man aber anscheinend nicht den dargestellten Code nach VBA rückkopieren. Warum?
Antwort
Dies liegt nicht an der Code Jeanie !!! Manche Foren interpretieren anscheinend < pre > < /pre > Tags nicht richtig und erzeugen am Zeilenende einen weichen Zeilenumbruch anstatt eines harten Zeilenumbruches. Dies führt dazu, dass im VBA-Editor die Zeilen hintereinander geschrieben werden. Zum Rückkopieren in solchen Fällen: Fügen Sie den kopierten Code aus dem Forum nach Word ein, kopieren Sie ihn dort wieder und fügen Sie ihn dann im VBA - Editor ein

Gruß Hajo

Anzeige
Re: Meist verwendete Zellen-Hintergrundfarbe ermitteln
03.01.2003 01:39:46
Martin Springer
Hallo Hajo,

nochmals vielen Dank für den Aufwand. Es tut mir leid, dass Du Dir noch die Mühe gemacht hast die Farben zu entschlüsseln. Jetzt habe ich alles so, wie ich es gebraucht habe! Ich will Dir erklären, warum ich so einen ungewöhlnichen Wunsch hatte:

Ich arbeite noch immer an meinem html-Tool!

beim Konvertieren möchte ich die Zellhintergrundfarbe nicht unbedingt unnötig in jede Zelle (also im < td >) schreiben, wenn ich die in einer Zeile meist verwendete Farbe bereits zum Anfang der Zeile angeben kann (also im < tr >). Somit kann ich weiteren Speicherplatz bei der Konvertierung sparen. Die Farbe werde ich also nun von RGB in Hexadezimal umrechnen!

Vielen Dank für Deine Hilfe!

MfG

Martin

Anzeige
Re: Meist verwendete Zellen-Hintergrundfarbe ermitteln
03.01.2003 09:21:13
Hajo_Zi
Hallo Martin

die Aufgabe immer komplett beschreiben. Ich habe nun die Farbnamen angezeigt, weil ich vermutet habe das es Dir darauf ankommt. Selbstverständlich hätte ich auch die RGB Komponeten anzeigen können. Aber mir scheint dazu hast Du schon den Code.

Gruß Hajo

Verständnisfrage
03.01.2003 14:37:34
Martin Beck
Hallo Hajo,

ich komme einfach nicht drauf. Wozu ist die 2te IF-Bedingung erforderlich:

If Range(StZelle).Interior.ColorIndex >= 1 And Range(StZelle).Interior.ColorIndex <= 56 Then
Werte(Range(StZelle).Interior.ColorIndex) = Werte(Range(StZelle).Interior.ColorIndex) + 1
End If

Dadurch wird der "Farbwert" der letzten Zelle im markierten Bereich nochmal um 1 hochgezählt. Aber wieso? Wird die Zählung nicht schon in der FOR-Schleife durchgeführt?

Das Ergebnis ist richtig, ich würde nur gerne verstehen, warum.

Und noch was: Wieso steht die Zeile

StZelle = RaZelle.Address

in und nicht nach der FOR-Schleife. StZelle muß doch nur für die letzte Zelle belegt werden, oder?

Vielleicht kannst Du mir's noch mal kurz erklären.

Danke und Gruß
Martin Beck

Anzeige
Re: Verständnisfrage
03.01.2003 14:49:04
Hajo_Zi
Hallo Martin

Du kannst komplizierte Fragen stellen.

der zweite If vergleich ist tatsächlich umsonst. Ich wollte bloß feststellen das die Zelle eine Farbe hat.

zum 2
ich habe das mal von einen anderem Beispiel umgebaut und da hat jemand festgestellt das die letzte Zelle in der For Next Schleife nicht gezählt wurde. (was mir eigentlich schleierhaft ist) Aus diesem Grunde auch StZelle = RaZelle.Address, damit ich die Adresse von der letzten Zelle habe,da die Variable RaZelle mir mir keine Adresse mehr lieferte.

Gruß Hajo

Re: Verständnisfrage
03.01.2003 15:13:46
Martin Beck
Hallo Hajo,

erstmal Danke für die Erläuterungen. Ich habe jetzt nochmal getestet und m.E. wird durch die IF-Schleife die Farbe der letzten Zelle (so vorhanden) einmal zuviel gezählt. Mir wäre auch schleierhaft, wie in der FOR-Schleife nicht alle Zellen überprüft und ggf. gezählt werden sollten.

Vielleicht kannst Du das Makro auch noch einmal testen, ich habe ja evtl. etwas übersehen. Der einfachste Test ist m.E. nur eine farbige Zelle zu markieren, bei mir ist das Ergebnis dann 2.


Gruß
Martin Beck

P.S.

ZUr Sicherheit nochmal der Code, den ich getestet habe:

Sub Martin()
' erstellt von Hajo Ziplie 02.01.03
Dim RaZelle As Range
Dim ByI As Byte
Dim Werte(56) As Long
Dim StZelle As String
For Each RaZelle In Selection
StZelle = RaZelle.Address
If RaZelle.Interior.ColorIndex >= 1 And RaZelle.Interior.ColorIndex <= 56 Then
Werte(RaZelle.Interior.ColorIndex) = Werte(RaZelle.Interior.ColorIndex) + 1
End If
Next RaZelle
If Range(StZelle).Interior.ColorIndex >= 1 And Range(StZelle).Interior.ColorIndex <= 56 Then
Werte(Range(StZelle).Interior.ColorIndex) = Werte(Range(StZelle).Interior.ColorIndex) + 1
End If
For ByI = 1 To 56
If Werte(ByI) <> 0 Then MsgBox "Die Farbe " & ByI & " kommt " & Werte(ByI) & " vor"
Next ByI
End Sub

Anzeige
Re: Verständnisfrage
03.01.2003 15:44:40
Hajo_Zi
Hallo Martin

ich war mir eigentlich sicher das ich geantwortet habe.

Du hast Recht. In der anderen Datei war es ein anderer Ansatz.

Gruß Hajo

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige