Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Füllfarbe per Zufall auswählen

Füllfarbe per Zufall auswählen
webdepp
Hallo Experten,
ich habe ein kleines Problem. Und zwar füge ich über VBA gesteuert Daten in ein Excelblatt ein. Die Daten werden immer in der gleichen Spalte geschrieben und er nimmt für die nächsten Daten immer nur eine neue Zeile. Die Zelle fülle ich mit einer Hintergundfarbe.
Jetzt kommt der Haken, ich möchte die Füllfarbe der Zelle per Zufall auswählen lassen, bzw als zweite Möglichkeit soll er aus eine Liste von vorgebenen Farben per Zufall eine auswählen. Doppellte Farben dürfen nicht vorkommen. Kann mir da jmd helfen?
Wenn ich vllt noch die Zellenhöhe irgendwie in CM angeben könnte wäre das super. Aber wichtiger ist die Farbe.
Vielen Dank
webdepp

Private Sub Start_Click()
Dim v_lpar, v_cpu, i, z, v_lastrow As Integer
Dim v_ram_mb As Long
Dim v_ram_gb As Double
Dim v_suche_1, v_suche_2 As String
suchspalte = 4
i = 6
'ermmiteln der ersten leere Zelle
For z = 8 To 34
If Sheets("HW_SMI").Cells(z, 4) = "" Then
Exit For
End If
Next z
'Schleife für alle Suchwörter
For suchzeile = 8 To z
'Festlegung Suchwort
v_suche_1 = Sheets("HW_SMI").Cells(suchzeile, suchspalte).Value
'Prüfung ob Suchwort dem vorher gehenden entspricht
If v_suche_1  v_suche_2 Then
'Berechnung Werte nach Suchwort
v_lpar = WorksheetFunction.CountIf(Sheets("HW_SMI").Range("D8:D34"), v_suche_1)
v_cpu = WorksheetFunction.SumIf(Sheets("HW_SMI").Range("D8:AC34"), v_suche_1, _
Sheets("HW_SMI").Range("T8:T34"))
v_ram_mb = WorksheetFunction.SumIf(Sheets("HW_SMI").Range("D8:AC34"), v_suche_1, _
Sheets("HW_SMI").Range("Z8:Z34"))
v_ram_gb = Round((v_ram_mb / 1024), 2)
'Schreiben der Daten in Zelle
Sheets("Grafik_Koeln").Cells(i, 1) = "Lpar: " & v_lpar & " / CPU: " & v_cpu & _
" / RAM: " & v_ram_gb
'Zellenformatierung
'Zeilenhöhe
Sheets("Grafik_Koeln").Rows(i).RowHeight = 15 * v_lpar
'Anordnung Text
Range("A" & i).Select
With Selection.Interior
.ColorIndex = 4
.Pattern = xlSolid
End With
'Füllfarbe
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlTop
End With
v_suche_2 = v_suche_1
i = i + 1
End If
Next suchzeile
End Sub

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Füllfarbe per Zufall auswählen
25.11.2010 14:43:32
fcs
Hallo webdepp,
hier beispielhaft mit ein paar Colorindex-Werten, wie du Zufallsfarben zuweisen könntest.
Du muss natürlich mindestens soviele Farbwerte vorgeben, wie du maximal Suchbegriffe hast.
Du kannst statt mit ColorIndex natürlich auch mit der Eigenschaft Color arbeiten und im Array die entsprechendne Color-Werte vorgeben.
Zeilenhöhe:
Excel arbeitet in Punkt.
72 / 2.54 = 28.35 entspricht ungefähr 1 cm
Diese Umrechnung muss du halt in deine Prozedur einbauen.
Gruß
Franz
Private Sub Start_Click()
Dim v_lpar, v_cpu, i, z, v_lastrow As Integer
Dim v_ram_mb As Long
Dim v_ram_gb As Double
Dim v_suche_1, v_suche_2 As String
Dim lIndex As Long, arrColorIndex, arrVerwendet() As Boolean, icount As Long
'Array mit den zu verwendenden Colorindex-Nummern
arrColorIndex = Array(3, 4, 5, 6, 7, 8, 19, 34, 35, 36, 39, 45, 46)
ReDim arrVerwendet(LBound(arrColorIndex) To UBound(arrColorIndex))
VBA.Randomize (1)
icount = LBound(arrColorIndex) - 1
suchspalte = 4
i = 6
'ermmiteln der ersten leere Zelle
For z = 8 To 34
If Sheets("HW_SMI").Cells(z, 4) = "" Then
Exit For
End If
Next z
'Schleife für alle Suchwörter
For suchzeile = 8 To z
'Festlegung Suchwort
v_suche_1 = Sheets("HW_SMI").Cells(suchzeile, suchspalte).Value
'Prüfung ob Suchwort dem vorher gehenden entspricht
If v_suche_1  v_suche_2 Then
'Berechnung Werte nach Suchwort
v_lpar = WorksheetFunction.CountIf(Sheets("HW_SMI").Range("D8:D34"), v_suche_1)
v_cpu = WorksheetFunction.SumIf(Sheets("HW_SMI").Range("D8:AC34"), v_suche_1, _
Sheets("HW_SMI").Range("T8:T34"))
v_ram_mb = WorksheetFunction.SumIf(Sheets("HW_SMI").Range("D8:AC34"), v_suche_1, _
Sheets("HW_SMI").Range("Z8:Z34"))
v_ram_gb = Round((v_ram_mb / 1024), 2)
'Schreiben der Daten in Zelle
Sheets("Grafik_Koeln").Cells(i, 1) = "Lpar: " & v_lpar & " / CPU: " & v_cpu & _
" / RAM: " & v_ram_gb
'Zellenformatierung
'Zeilenhöhe
Sheets("Grafik_Koeln").Rows(i).RowHeight = 15 * v_lpar
'Anordnung Text
Range("A" & i).Select
With Selection.Interior
FarbeNeu:
lIndex = Int((UBound(arrColorIndex) - LBound(arrColorIndex) + 1) * VBA.Rnd + _
LBound(arrColorIndex))
If arrVerwendet(lIndex) = True Then GoTo FarbeNeu
arrVerwendet(lIndex) = True
icount = icount + 1
If icount = UBound(arrColorIndex) Then
'Es gibt mehr Suchbegriffe als Farben im Array, alle Farben werden zur Markierung  _
_
wieder freigeschaltet
ReDim arrVerwendet(LBound(arrColorIndex) To UBound(arrColorIndex))
icount = LBound(arrColorIndex) - 1
End If
.ColorIndex = arrColorIndex(lIndex)
.Pattern = xlSolid
End With
'Füllfarbe
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlTop
End With
v_suche_2 = v_suche_1
i = i + 1
End If
Next suchzeile
End Sub

Anzeige
AW: Füllfarbe per Zufall auswählen
25.11.2010 22:11:12
webdepp
Hallo Franz,
vielen vielen Dank... Genau sowas habe ich gesucht.
Gruß webdepp
;
Anzeige
Anzeige

Infobox / Tutorial

Füllfarbe zufällig auswählen in Excel


Schritt-für-Schritt-Anleitung

Um die Füllfarbe einer Zelle in Excel per Zufall auszuwählen, kannst du VBA (Visual Basic for Applications) verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Klicke im Menü auf Einfügen und wähle Modul.
  3. Kopiere den folgenden VBA-Code in das Modul:
Private Sub Start_Click()
    Dim v_lpar, v_cpu, i, z, v_lastrow As Integer
    Dim v_ram_mb As Long
    Dim v_ram_gb As Double
    Dim v_suche_1, v_suche_2 As String
    Dim lIndex As Long, arrColorIndex, arrVerwendet() As Boolean, icount As Long

    ' Array mit den zu verwendenden Colorindex-Nummern
    arrColorIndex = Array(3, 4, 5, 6, 7, 8, 19, 34, 35, 36, 39, 45, 46)
    ReDim arrVerwendet(LBound(arrColorIndex) To UBound(arrColorIndex))

    VBA.Randomize (1)
    icount = LBound(arrColorIndex) - 1
    suchspalte = 4
    i = 6

    ' Ermittle die erste leere Zelle
    For z = 8 To 34
        If Sheets("HW_SMI").Cells(z, 4) = "" Then
            Exit For
        End If
    Next z

    ' Schleife für alle Suchwörter
    For suchzeile = 8 To z
        v_suche_1 = Sheets("HW_SMI").Cells(suchzeile, suchspalte).Value

        If v_suche_1 <> v_suche_2 Then
            ' Berechnung Werte nach Suchwort
            v_lpar = WorksheetFunction.CountIf(Sheets("HW_SMI").Range("D8:D34"), v_suche_1)
            v_cpu = WorksheetFunction.SumIf(Sheets("HW_SMI").Range("D8:AC34"), v_suche_1, Sheets("HW_SMI").Range("T8:T34"))
            v_ram_mb = WorksheetFunction.SumIf(Sheets("HW_SMI").Range("D8:AC34"), v_suche_1, Sheets("HW_SMI").Range("Z8:Z34"))
            v_ram_gb = Round((v_ram_mb / 1024), 2)

            ' Schreiben der Daten in Zelle
            Sheets("Grafik_Koeln").Cells(i, 1) = "Lpar: " & v_lpar & " / CPU: " & v_cpu & " / RAM: " & v_ram_gb

            ' Zellenformatierung
            Sheets("Grafik_Koeln").Rows(i).RowHeight = 15 * v_lpar

            ' Füllfarbe per Zufall
FarbeNeu:
            lIndex = Int((UBound(arrColorIndex) - LBound(arrColorIndex) + 1) * VBA.Rnd + LBound(arrColorIndex))
            If arrVerwendet(lIndex) = True Then GoTo FarbeNeu
            arrVerwendet(lIndex) = True
            icount = icount + 1

            If icount = UBound(arrColorIndex) Then
                ReDim arrVerwendet(LBound(arrColorIndex) To UBound(arrColorIndex))
                icount = LBound(arrColorIndex) - 1
            End If

            With Sheets("Grafik_Koeln").Cells(i, 1).Interior
                .ColorIndex = arrColorIndex(lIndex)
                .Pattern = xlSolid
            End With

            v_suche_2 = v_suche_1
            i = i + 1
        End If
    Next suchzeile
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Füge einen Button hinzu, um den Code auszuführen: Gehe zu Entwicklertools, klicke auf Einfügen und wähle Button.
  3. Verknüpfe den Button mit der Start_Click-Prozedur.

Jetzt kannst du den Button klicken, und die Füllfarbe wird zufällig aus den vordefinierten Farben ausgewählt.


Häufige Fehler und Lösungen

  • Farbe wird nicht geändert: Stelle sicher, dass das Array arrColorIndex korrekt definiert ist und die ColorIndex-Werte existieren.
  • VBA funktioniert nicht: Prüfe, ob Makros in deinen Excel-Einstellungen aktiviert sind.
  • Doppelte Farben: Der Code stellt sicher, dass keine doppelten Farben verwendet werden. Wenn du mehr Farben benötigst, füge diese in das arrColorIndex-Array ein.

Alternative Methoden

Eine einfache Möglichkeit ohne VBA ist die Verwendung von bedingter Formatierung. Du kannst eine Regel erstellen, die die Füllfarbe basierend auf dem Wert oder den Bedingungen ändert. Beachte, dass diese Methode nicht die gleiche Flexibilität wie ein Zufallsgenerator bietet.


Praktische Beispiele

  1. Farben zufällig zuweisen: Mit dem obenstehenden VBA-Skript kannst du bis zu 13 verschiedene Farben per Zufallsgenerator zuweisen.
  2. Zufallsgenerator 3 Farben: Wenn du nur drei Farben verwenden möchtest, ändere das Array in arrColorIndex = Array(3, 4, 5).
  3. Zufallsgenerator 4 Farben: Ändere das Array in arrColorIndex = Array(3, 4, 5, 6) für vier Farben.

Tipps für Profis

  • Excel Tastenkombination Füllfarbe: Du kannst ALT + H + H verwenden, um das Füllfarbmenü schnell zu öffnen, anstatt mit VBA zu arbeiten.
  • Optimierung des Codes: Du könntest den Code weiter optimieren, indem du die Anzahl der Durchläufe reduzierst oder das Array der Farben dynamisch erstellst, basierend auf den vorhandenen Daten.

FAQ: Häufige Fragen

1. Wie kann ich mehr als 13 Farben verwenden?
Erweitere das arrColorIndex-Array mit den gewünschten ColorIndex-Werten.

2. Funktioniert das Skript in allen Excel-Versionen?
Ja, das Skript funktioniert in den meisten modernen Excel-Versionen, die VBA unterstützen.

3. Wie kann ich die Zeilenhöhe in cm angeben?
Excel verwendet Punkte für die Zeilenhöhe. Du kannst die Umrechnung verwenden: 1 cm = 28.35 Punkte. Verwende diese Formel in deinem Code.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige