Hallo,
ich würde dir zwar zuerst auch die bedingte Formatierung empfehlen, auch da kann man mehrere pro Zelle einfügen und diese
auch priorisieren...
Aber bei komplizierten Sachen, ist ein Code manchmal übersichtlicher.
Nur so als Hinweis, es können auch mehrere Zellen auf einmal geändert werde, und zwar wenn man was kopiert und einfügt, oder beim Löschen von mehreren Zellen.
Wenn das Worksheet_Change aufgerufen wird, bekommt du ja "Target" mit.
Target ist die Zelle, bzw. die Zellen welche geändert wurde(n). (Können also auch mehr sein)
Target gibt dir also die "Zelle" zurück.
Mit Target.Offset(Zeilen, Spalten) kannst du dann (relative) zu anderen Zellen springen .
Mit Rang(Zelle1 , Zelle2) kann man dann Bereiche angeben.
Wenn man dann Range() mit Target.Offset kombiniert kann man schon viel anfangen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Private Sub Worksheet_Change( ByVal Target As Range)
Select Case Target
Case 10, 15
Range(Target.Offset(0, 1), Target.Offset(, 4)).Interior.ColorIndex = 3
Range(Target.Offset(0, 6), Target.Offset(, 12)).Interior.ColorIndex = 3
Case 1
Range(Target.Address, Target.Offset(, 7)).Interior.ColorIndex = 4
End Select
End Sub
|
Wenn man dann, wie schon beschriebe, beherzigt, dass man z.B. ganze Zellbereiche (A5 bis M18) kopieren und dann z.B. bei A20 einfügen kann,
und eine Schleife über alle Zellen bildet, und in diese Schleife noch abfragt, ob die einzelne Zelle in Spalte A sich befindet,
läuft das ganze schon ganz annehmbar.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Private Sub Worksheet_Change( ByVal Target As Range)
Dim c As Range
For Each c In Target
If Not Intersect(c, Range( "A:A" )) Is Nothing Then
Select Case c
Case 10, 15
Range(c.Offset(0, 1), c.Offset(, 4)).Interior.ColorIndex = 3
Range(c.Offset(0, 6), c.Offset(, 12)).Interior.ColorIndex = 3
Case 1
Range(c.Address, c.Offset(, 7)).Interior.ColorIndex = 4
End Select
End If
Next c
End Sub
|
|