gibt es eine Möglichkeit, dass ich per Makro die meist verwendete Zellhintergrundfarbe innerhalb einer Markierung ermitteln kann?
MfG
Martin
gibt es eine Möglichkeit, dass ich per Makro die meist verwendete Zellhintergrundfarbe innerhalb einer Markierung ermitteln kann?
MfG
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
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?
was sind die meist verwendeten Farben, das geht von 1 bis 56.
Gruß 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
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
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
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
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
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
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
ich war mir eigentlich sicher das ich geantwortet habe.
Du hast Recht. In der anderen Datei war es ein anderer Ansatz.
Gruß Hajo