Registriert seit: 22.04.2016
Version(en): 2016
27.03.2017, 11:40
(Dieser Beitrag wurde zuletzt bearbeitet: 27.03.2017, 11:40 von joshua.)
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
Registriert seit: 29.09.2015
Version(en): 2030,5
Verwende 'Arrays' statt 'Ranges'.
Registriert seit: 22.04.2016
Version(en): 2016
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.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
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 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)
Registriert seit: 22.04.2016
Version(en): 2016
03.04.2017, 10:17
(Dieser Beitrag wurde zuletzt bearbeitet: 03.04.2017, 10:17 von joshua.)
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!
Registriert seit: 11.04.2014
Version(en): Office 2007
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:1 Nutzer sagt Danke an Steffl für diesen Beitrag 28
• joshua
|