Also die Lösung mit "Code" gefällt mir sehr gut.
Jetzt habe ich eine Frage bezüglich des Aufbaus. Ich habe eine Excel-Liste mit verschiedenen Spalten, wobei die Spalte P, sowie die Spalten T-Y manuell geändert werden können/sollen. Alle Daten werden anfangs aus zwei anderen Usprungsdateien gelesen. Durch das Verändern der Daten sollen Berechnungen angestoßen werden, wie beispielsweise die Spalte R bzw. LB %:
Code:
Sub LBProzentrechnen()
Dim Zeile As Integer
Zeile = 3
Set book = ActiveWorkbook
With book.Worksheets("Gehaltsdaten")
While (.Cells(Zeile, 1) <> "")
If (.Cells(Zeile, 25) <> "") Then
.Cells(Zeile, 18).Value = Cells(Zeile, 19) * 0.9375
Else
.Cells(Zeile, 18).Value = Cells(Zeile, 19) * 1.0714
End If
.Cells(Zeile, 18).NumberFormat = ("0.00")
Zeile = Zeile + 1
Wend
End With
End Sub
Ich habe es anfangs mit Workbook_Change und der Intersect-Methode versucht, jedoch kam es dabei durch die zunehmende Anzahl an Berechnungen (etwa 10) zu Konflikten, bzw. das Programm wurde nicht immer aufgerufen. Beispielsweise funktioniert bei einer Funktion Berechnung, sobald ich jedoch die 2. Funktion nach dem Prinzip einpflege, funktioniert die Berechnung nicht mehr. Nach dem Einpflegen zweier Funktionen sieht der Code folgendermaßen aus:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("T3:Z3000")) Is Nothing Then
Target.Interior.ColorIndex = 6
End If
If Not Intersect(Target, Range("P3:P3000")) Is Nothing Then
Target.Interior.ColorIndex = 6
End If
If Not Intersect(Target, Range("T3:Y50")) Is Nothing Then
Dim sourceline, destinationline As Integer
Dim Pfad As String
Dim Help1, Help2, Help3, Help4, Help5, Help6 As Integer
Dim Summe As Integer
destinationline = 3
sourceline = 3
While (Cells(destinationline, 1) <> "")
If Cells(sourceline, 20) = "" Then GoTo Sprung
If Cells(sourceline, 20) = "A" Then Help1 = 0
If Cells(sourceline, 20) = "B" Then Help1 = 2
If Cells(sourceline, 20) = "C" Then Help1 = 4
If Cells(sourceline, 20) = "D" Then Help1 = 6
If Cells(sourceline, 20) = "E" Then Help1 = 8
If Cells(sourceline, 21) = "A" Then Help2 = 0
If Cells(sourceline, 21) = "B" Then Help2 = 2
If Cells(sourceline, 21) = "C" Then Help2 = 4
If Cells(sourceline, 21) = "D" Then Help2 = 6
If Cells(sourceline, 21) = "E" Then Help2 = 8
If Cells(sourceline, 22) = "A" Then Help3 = 0
If Cells(sourceline, 22) = "B" Then Help3 = 1
If Cells(sourceline, 22) = "C" Then Help3 = 2
If Cells(sourceline, 22) = "D" Then Help3 = 3
If Cells(sourceline, 22) = "E" Then Help3 = 4
If Cells(sourceline, 23) = "A" Then Help4 = 0
If Cells(sourceline, 23) = "B" Then Help4 = 1
If Cells(sourceline, 23) = "C" Then Help4 = 2
If Cells(sourceline, 23) = "D" Then Help4 = 3
If Cells(sourceline, 23) = "E" Then Help4 = 4
If Cells(sourceline, 24) = "A" Then Help5 = 0
If Cells(sourceline, 24) = "B" Then Help5 = 1
If Cells(sourceline, 24) = "C" Then Help5 = 2
If Cells(sourceline, 24) = "D" Then Help5 = 3
If Cells(sourceline, 24) = "E" Then Help5 = 4
If Cells(sourceline, 25) = "A" Then Help6 = 0
If Cells(sourceline, 25) = "B" Then Help6 = 1
If Cells(sourceline, 25) = "C" Then Help6 = 2
If Cells(sourceline, 25) = "D" Then Help6 = 3
If Cells(sourceline, 25) = "E" Then Help6 = 4
Summe = Help1 + Help2 + Help3 + Help4 + Help5 + Help6
Cells(destinationline, 19) = Summe
Sprung:
destinationline = destinationline + 1
sourceline = sourceline + 1
Help1 = 0
Help2 = 0
Help3 = 0
Help4 = 0
Help5 = 0
Help6 = 0
Wend
End If
'LBProzent
If Not Intersect(Target, Range("S3:S50")) Is Nothing Then
Dim Zeile As Integer
Zeile = 3
While (Cells(Zeile, 1) <> "")
If (Cells(Zeile, 25) <> "") Then
Cells(Zeile, 18).Value = Cells(Zeile, 19) * 0.9375
Else
Cells(Zeile, 18).Value = Cells(Zeile, 19) * 1.0714
End If
Cells(Zeile, 18).NumberFormat = ("0.00")
Zeile = Zeile + 1
Wend
End If
End Sub
Gibt es dabei eine generelle Empfehlung wie man allgemein Formeln einpflegt und dabei automatisch erkannt wird, wie viele Zellen gefüllt sind? Dabei muss es keine Lösung über VBA sein.
Bin über jeden Hilfe dankbar!
Ich habe dem Ahnang eine TestDatei hinzugefügt.