Clever-Excel-Forum

Normale Version: Formeln VBA pro Zeile
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Morgen!

Ich habe einige Formeln und Bedingte Formatierungen in den VBA Bereich meiner Excel Mappe geschrieben. Dabei soll sich der Code jeweils für die Zeilen 7 – 21 und 28  - 67 wiederholen. In meinem Code sieht man die Formeln & Bedingten Formatierungen für eine Zeile. Lässt sich sich nun eine Art Variable erstellen, welche den Folgenden Code für die Zeilen 7 – 21, bzw. 28 - 67 anpasst? Also für Zeile 8 würde aus C7 z.B. C8 werden usw...

Kann mir vorstellen, dass es eine clevere Lösung gibt als einfach nur den Code X-Mal zu kopieren und jedes mal nur die Zeilenzahl zu ändern, vor allem wird der VBA-Code dadurch ja wahnsinnig lang.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "C7" Then
Worksheets("Mappe1").Range("H7").Value = 0
End If
If Target.Address(0, 0) = "H7" Or Target.Address(0, 0) = "C7" Then
Worksheets("Mappe1").Range("D7").Value = Range("C7") + Range("H7")
Worksheets("Mappe1").Range("I7") = Format(Range("C7"), "DD. MMM YYYY")
End If
If Worksheets("Mappe 1").Cells(7, 2) <> "" Then
   Worksheets("Mappe 1").Cells(7, 3).Interior.Color = RGB(255, 255, 204)     'Gelb
   Worksheets("Mappe 1").Range("E7:G7").Interior.Color = RGB(252, 213, 180)  'Orange
   Worksheets("Mappe 1").Range("H7").Interior.Color = RGB(242, 242, 242)     'Hellgrau
Else
   Worksheets("Mappe 1").Range("B7:H7").Interior.Color = RGB(191, 191, 191)  'Dunkelgrau
End If
End Sub

Die „normalen“ Bedingten Formatierungen möchte ich nicht verwenden, deshalb wird das ganze in den VBA Bereich geschrieben.
 
 
Danke mal wieder für euren Input!
Gruß!
Hallo,

eventuell so ...

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long

For i = 7 To 21
    If Target.Address(0, 0) = "C7" Then
        Worksheets("Mappe1").Range("H7").Value = 0
    End If
    If Target.Address(0, 0) = "H7" Or Target.Address(0, 0) = "C7" Then
        Worksheets("Mappe1").Range("D" & i).Value = Range("C" & i) + Range("H7")
        Worksheets("Mappe1").Range("I" & i) = Format(Range("C" & i), "DD. MMM YYYY")
    End If
    
    If Worksheets("Mappe 1").Cells(i, 2) <> "" Then
       Worksheets("Mappe 1").Cells(i, 3).Interior.Color = RGB(255, 255, 204)     'Gelb
       Worksheets("Mappe 1").Range("E" & i & ":G" & i).Interior.Color = RGB(252, 213, 180)  'Orange
       Worksheets("Mappe 1").Range("H" & i).Interior.Color = RGB(242, 242, 242)     'Hellgrau
    Else
       Worksheets("Mappe 1").Range("B" & i & ":H" & i).Interior.Color = RGB(191, 191, 191)  'Dunkelgrau
    End If
Next i
End Sub
Analog dazu, den anderen Range-Bereich

PS es überlappt sich der Bereich Range("B" & i & ":H" & i) und Range("E" & i & ":G" & i) der Bereich wird komplett Dunkelgrau ... da mal schauen !
Das heißt mit "Dim i as Long" und der anschließenden Ergänzung "i" wird die Zeilenzahl angepasst? Wieder was gelernt :)

Lässt sich noch einstellen, dass für jede entsprechende Zeile der Code erst angewandt wird wenn in der jeweiligen Zeile in Spalte C ein Eintrag vorgenommen wird? Aktuell wird zum Beispiel durch setzen eines Eintrags in C7 in Spalte D im Bereich D7:D21 immer eine 0 eingetragen da die jeweilige Zelle in Spalte C noch leer ist. Der jeweilige Code für die entsprechende Zeile soll allerdings erst ausgeführt werden wenn in Spalte C ein Eintrag vorgenommen wird.

Also:
Alle Formeln / Bedingten Formatierungen für Zeile 7 durchführen, wenn in C7 ein Eintrag steht
Alle Formeln / Bedingten Formatierungen für Zeile 8 durchführen, wenn in C8 ein Eintrag steht
Alle Formeln / Bedingten Formatierungen für Zeile 9 durchführen, wenn in C9 ein Eintrag steht 
[...]
Alle Formeln / Bedingten Formatierungen für Zeile 21 durchführen, wenn in C21 ein Eintrag steht 

Danke & Gruß!
Hallo,

eventuell so ...

sollte die erste Bedingung auch vom Wert in Spalte C abhängig sein, dann die neue If-Zeile einfach unterhalb von 'For i = ' verschieben.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long

For i = 7 To 21

   If Target.Address(0, 0) = "C7" Then
       Worksheets("Mappe1").Range("H7").Value = 0
   End If
   
If Worksheets("Mappe1").Range("C" & i).Text <> "" Then ' <-- neue Zeile
   If Target.Address(0, 0) = "H7" Or Target.Address(0, 0) = "C7" Then
       Worksheets("Mappe1").Range("D" & i).Value = Range("C" & i) + Range("H7")
       Worksheets("Mappe1").Range("I" & i) = Format(Range("C" & i), "DD. MMM YYYY")
   End If
   
   If Worksheets("Mappe 1").Cells(i, 2) <> "" Then
      Worksheets("Mappe 1").Cells(i, 3).Interior.Color = RGB(255, 255, 204)     'Gelb
      Worksheets("Mappe 1").Range("E" & i & ":G" & i).Interior.Color = RGB(252, 213, 180)  'Orange
      Worksheets("Mappe 1").Range("H" & i).Interior.Color = RGB(242, 242, 242)     'Hellgrau
   Else
      Worksheets("Mappe 1").Range("B" & i & ":H" & i).Interior.Color = RGB(191, 191, 191)  'Dunkelgrau
   End If
End If
Next i
End Sub

Um das genauer und effektiver zu machen, müsste man die Datei und den genauen Ablauf kennen. "Bedingte Formatierungen" werden da nicht eingestellt.
Danke, hat mal wieder sehr geholfen!