Formeln VBA pro Zeile
#1
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ß!
Top
#2
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 !
[-] Folgende(r) 1 Nutzer sagt Danke an Flotter Feger für diesen Beitrag:
  • diving_excel
Top
#3
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ß!
Top
#4
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.
[-] Folgende(r) 1 Nutzer sagt Danke an Flotter Feger für diesen Beitrag:
  • diving_excel
Top
#5
Danke, hat mal wieder sehr geholfen!
Top


Gehe zu:


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