Microsoft Excel

Herbers Excel/VBA-Archiv

Hintergrundfarbe in Zahl umwandeln

Betrifft: Hintergrundfarbe in Zahl umwandeln von: Timo Beil
Geschrieben am: 07.08.2008 19:30:39

Hallo zusammen.

Gibt es über VBA eine Möglichkeit, die Hintergrundfarbe einer Zelle in eine Zahl umzuwandeln und das schneller als mit for- Schleifen?

Habe einen Bereich ("J16:AG39"), wo ich per Zellaktivierung mit der Maus Zellen oder auch Zellbereiche mit einer Hintergrundfarbe versehen kann. Nun brauche ich ein Makro, was diesen Bereich ("J16:AG39") ausliest, die Farbe in einen Zahlenwert umwandelt (z.B. grün ="1") und mir diese Zahlenwerte woandershin kopiert.

Habe das Problem bereits mit zwei for- Schleifen gelöst, aber es ist sehr langsam. Könnte man diesen Zellbereich in ein Array laden, umwandeln und irgendwo die zahlenwerte wieder auf dem Blatt einfügen?

  

Betrifft: AW: Hintergrundfarbe in Zahl umwandeln von: Tino
Geschrieben am: 07.08.2008 19:48:42

Hallo,
mir ist keine Möglichkeit bekannt,
alle Zellfarben eines Bereiches in einem Rutsch in eine Area einzulesen.

Was ich allerdings nicht verstehe wieso zwei Schleifen.
Eine müsste dies doch auch erledigen, Zellfarbe aus der Zelle lesen und gleich wo anders hinschreiben?

Hier mal zwei Beispiele, einmal mit ColorIndex und einmal mit Color.


Sub test_ColorIndex()
Dim A As Long
Dim Bereich As Range
For Each Bereich In Tabelle1.Range("J16:AG39")
 A = A + 1
 Tabelle2.Cells(A, 1) = Bereich.Interior.ColorIndex
Next Bereich

End Sub



Oder

Sub test_Color()
Dim A As Long
Dim Bereich As Range
For Each Bereich In Tabelle1.Range("J16:AG39")
 A = A + 1
 Tabelle2.Cells(A, 1) = Bereich.Interior.Color
Next Bereich

End Sub




Gruß Tino


  

Betrifft: AW: Hintergrundfarbe in Zahl umwandeln von: Uduuh
Geschrieben am: 07.08.2008 20:32:27

Hallo,
also lesen geht sehr schnell. Umgekehrt dürfte erheblich langsamer sein.

Sub tt()
  Dim arrColors, i As Integer, j As Integer
  arrColors = Range("j16:ag39")
  For i = 1 To UBound(arrColors, 1)
    For j = 1 To UBound(arrColors, 2)
      arrColors(i, j) = Range("j16:ag39").Cells(i, j).Interior.ColorIndex
    Next j
  Next i
  Sheets(2).Range("j16:ag39") = arrColors
End Sub


Gruß aus’m Pott
Udo



  

Betrifft: AW: Hintergrundfarbe in Zahl umwandeln von: Timo Beil
Geschrieben am: 07.08.2008 22:53:16

Dank an euch beide. Hat mir beides etwas gebracht.


 

Beiträge aus den Excel-Beispielen zum Thema "Hintergrundfarbe in Zahl umwandeln"