Alternative zu If-Then
#1
Ich habe eine Tabelle, welche bei bestimmten Kombination aus zwei Zahlen eine definierte Farbe als Zellenfarbe einstellt.
Dies habe ich über "If Then" bisher gemacht.
Mit dieser methode komme ich jedoch auf zahlreiche Zeilen im Code.
Ist es möglich dies nun eleganter zu lösen?
Der Code sieht folgendermaßen aus:


Code:
Dim Zeile As Long
   Dim ZeileMax As Long
          With tblOne
                  ZeileMax = Sheets("tblOne").Cells(.Rows.Count, "B").End(xlUp).Row
                  For Zeile = 2 To ZeileMax
                   If .Range("G" & Zeile).Value = 1 And .Range("I" & Zeile).Value = 1 Then
                      .Range("K" & Zeile).Interior.ColorIndex = 4
'Hier kommen dann die anderen Anweisungen

                   End If
                  Next Zeile
         End With
Top
#2
Verwende 'Arrays' statt 'Ranges'.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#3
Wie genau funktioniert dies nun?
Mit meinem schlauen Buch komme ich nicht weiter

Code:
Sub Matrix()

Dim arrMatrix(1 to 3, 1 to 5) as String
Dim intA as Byte
Dim intB as Byte
Dim Zeile as Long
Dim ZeileMax as Long

arrMatrix(1,1) - ".Interior.ColorIndex = 4"
arrMatrix(1,2) - ".Interior.ColorIndex = 4"
arrMatrix(1,3) - ".Interior.ColorIndex = 4"
arrMatrix(2,1) - ".Interior.ColorIndex = 4"
arrMatrix(2,2) - ".Interior.ColorIndex = 4"
arrMatrix(3,1) - ".Interior.ColorIndex = 4"

arrMatrix(1,4) - ".Interior.ColorIndex = 6"
arrMatrix(1,5) - ".Interior.ColorIndex = 6"
arrMatrix(2,3) - ".Interior.ColorIndex = 6"
arrMatrix(2,4) - ".Interior.ColorIndex = 6"
arrMatrix(3,2) - ".Interior.ColorIndex = 6"
arrMatrix(3,3) - ".Interior.ColorIndex = 6"
arrMatrix(3,4) - ".Interior.ColorIndex = 6"
arrMatrix(4,1) - ".Interior.ColorIndex = 6"
arrMatrix(4,2) - ".Interior.ColorIndex = 6"
arrMatrix(4,3) - ".Interior.ColorIndex = 6"
arrMatrix(5,1) - ".Interior.ColorIndex = 6"

arrMatrix(5,2) - ".Interior.ColorIndex = 3"
arrMatrix(5,3) - ".Interior.ColorIndex = 3"
arrMatrix(5,4) - ".Interior.ColorIndex = 3"
arrMatrix(5,5) - ".Interior.ColorIndex = 3"
arrMatrix(4,4) - ".Interior.ColorIndex = 3"
arrMatrix(2,5) - ".Interior.ColorIndex = 3"
arrMatrix(3,5) - ".Interior.ColorIndex = 3"
arrMatrix(4,5) - ".Interior.ColorIndex = 3"

With tblOne

    ZeileMax = Sheets("tblOne").Cells(.Rows.Count, "B").End(xlUp).Row

        For Zeile = 2 To Zeilemax
     Next Zeile


End Sub
In Spalte 8 und 10 sollen die Farben entsprechend der oben definierten Kombination gefärbt werden.
Top
#4
Hallöchen,

je nachdem, was da so steht könnte es auch mit Select Case gehen.

Select Case .Range("G" & Zeile).Value * .Range("I" & Zeile).Value
Case 1
.Range("K" & Zeile).Interior.ColorIndex = 4
Case 2
...

Wobei eben 1*2 und 2*1 2 ist, also, wie gesagt, kommt drauf an, was drin steht.

Deine Variante:

In Dein Array nimmst Du übrigens nur die Zahl und nicht den Eimer Farbe Smile z.B.

arrMatrix(1,1) = 4

und die Farbe dann
.Range("K" & Zeile).Interior.ColorIndex = arrmatrix(.Range("G" & Zeile).Value , .Range("I" & Zeile).Value)

Da musst Du allerdings sicher gehen dass in den Zellen nur Zahlen stehen die in den definierten Bereich / die Indizees des Arrays passen oder eben vor dem Aufruf prüfen, ob das passt.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#5
Hallo schauan,

vielen Dank für deinen Beitrag (:
Code:
Sub ProzMatrix()

Dim arrMatrix(1 To 3, 1 To 5) As String

Dim Zeile As Long
Dim ZeileMax As Long

   arrMatrix(1, 1) = 4
   arrMatrix(1, 2) = 4
   arrMatrix(1, 3) = 4
   arrMatrix(2, 1) = 4
   arrMatrix(2, 2) = 4
   arrMatrix(3, 1) = 4
   
   arrMatrix(1, 4) = 6
   arrMatrix(1, 5) = 6
   arrMatrix(2, 3) = 6
   arrMatrix(2, 4) = 6
   arrMatrix(3, 2) = 6
   arrMatrix(3, 3) = 6
   arrMatrix(3, 4) = 6
   arrMatrix(4, 1) = 6
   arrMatrix(4, 2) = 6
   arrMatrix(4, 3) = 6
   arrMatrix(5, 1) = 6
   
   arrMatrix(5, 2) = 3
   arrMatrix(5, 3) = 3
   arrMatrix(5, 4) = 3
   arrMatrix(5, 5) = 3
   arrMatrix(4, 4) = 3
   arrMatrix(2, 5) = 3
   arrMatrix(3, 5) = 3
   arrMatrix(4, 5) = 3
   
   With tblSummary
   
   ZeileMax = Sheets("tblOne").Cells(.Rows.Count, "B").End(xlUp).Row

        For Zeile = 2 To ZeileMax
        .Range("K" & Zeile).Interior.ColorIndex = arrMatrix(.Range("G" & Zeile).Value, .Range("I" & Zeile).Value)
       
        Next Zeile

   
   End With


End Sub
Du meinst etwa so?

Kriege bei "arrMatrix(4, 1) = 6" die Fehlermledung "Index außerhalb des gültigen Bereiches".
Bin nun mit F8 die Prozedur durchgegagngen, kann aber leider nichts finden :/


Edit: Ok ich habs. Habe zu Anfang die arrays falsch deklariert. So muss es sein:
Dim arrMatrix(1 To 5, 1 To 5) As String

Nun funktioniert es auch (:


Ich bedanke mich!
Top
#6
Hallo Joshua,

deine Deklaration deines Arrays

Code:
Dim arrMatrix(1 To 3, 1 To 5) As String

die erste Dimension hat 3 Elemente und die zweite Dimension hat 5 Elemente, wenn Du jetzt das Array mit (4 ... ansprechen willst, knallst weil es außerhalb des Bereichs leigt.
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • joshua
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste