AW: Rechnen mit nächster nicht-leerer Zelle
04.09.2015 09:04:01
S.
Hallo,
vielen Dank für eure Hilfe bisher. Ich habe mich nun doch an VBA herangewagt.
Nur habe ich noch Probleme mit der bereits geposteten Formel für Nettoarbeitstage. Denn diese brauche ich in dezimal-Darstellung. (also angebrochene Tage)
Als Beispiel:
Ausgangsdatum: 04.08.2015 07:45:00 (Zelle: 5;14)
Enddatum:04.08.2015 09:30:00 (Zelle: 5;22)
Durch das Makro erhalte ich in der entsprechenden Nettoarbeitszeitzelle folgende Formel:
=NETTOARBEITSTAGE(INDIREKT(ADRESSE(5;14))+1;INDIREKT(ADRESSE(5;22))-1)
+(KÜRZEN(INDIREKT(ADRESSE(5;14)))KÜRZEN(INDIREKT(ADRESSE(5;22))))
-REST(INDIREKT(ADRESSE(5;14));1)+REST(INDIREKT(ADRESSE(5;22));1)
Dies führt zu dem Ergebnis von "-2,93Tage".
Hat jemand vielleicht einen anderen Vorschlag für die Dezimaldarstellung der berechneten Nettoarbeitstage?
Das unterscheiden von leeren/vollen Zellen funktioniert soweit - deswegen poste ich hier noch meinen Lösungsvorschlag.
Dim Zeile As Integer
Dim Spalte As Integer
Dim Zeilenanzahl As Integer
Dim ersteSpalte As Integer
Dim AktSpalte As Integer
Dim Spaltenabstand As Integer
Dim MaxSpalte As Integer
Dim Ausgansdatumsspalte As Integer
Dim Endatumsspalte As Integer
Dim CursorSpalte As Integer
Dim n As Integer
ersteSpalte = 5 ' hier wird der Startpunkt eingestellt, erstes Datum
AktSpalteStart = 12 ' hier wird der Startpunkt eingestellt
Spaltenabstand = 8 ' Abstand zwischen den jeweiligen Datumsspalten
SpaltenabstandLZ = 9 ' Abstand zwischen den jeweiligen Nettoarbeitstagespalten
Zeilenanzahl = Cells(Rows.Count, 1).End(xlUp).Row 'Zahl der Zeilen
inkl. Überschrift wird ermittelt
MaxSpalte = 104 'Letzte Spalte in der gesucht werden soll
For Zeile = 4 To Zeilenanzahl
For CursorSpalte = AktSpalteStart To MaxSpalte Step SpaltenabstandLZ
'LZ ermitteln:
If Cells(Zeile, CursorSpalte - Spaltenabstand + 1).Value "" Then
Ausgansdatumsspalte = CursorSpalte - Spaltenabstand + 1
Else:
Ausgansdatumsspalte = 0
End If
For n = CursorSpalte To MaxSpalte Step SpaltenabstandLZ
If Cells(Zeile, n + 1).Value "" Then
Endatumsspalte = n + 1
Exit For
Else:
Endatumsspalte = 0
End If
Next n
If Ausgansdatumsspalte 0 And Endatumsspalte 0 Then
If Cells(Zeile, Endatumsspalte).Value - Cells(Zeile, Ausgansdatumsspalte).Value >= 0 Then
' wenn links und rechts Zellen gefunden und Diffenz der Daten nicht negativ
Cells(Zeile, CursorSpalte).FormulaLocal = "=NETTOARBEITSTAGE
(INDIREKT(ADRESSE(" & Zeile & ";" & Ausgansdatumsspalte & "))+1;
INDIREKT(ADRESSE(" & Zeile & ";" & Endatumsspalte & "))-1)
+(KÜRZEN(INDIREKT(ADRESSE(" & Zeile & ";" & Ausgansdatumsspalte & ")))
KÜRZEN(INDIREKT(ADRESSE(" & Zeile & ";" & Endatumsspalte & "))))
-REST(INDIREKT(ADRESSE(" & Zeile & ";" & Ausgansdatumsspalte & "));1)
+REST(INDIREKT(ADRESSE(" & Zeile & ";" & Endatumsspalte & "));1)"
Else: Cells(Zeile, CursorSpalte).Value = 0
End If
Else: Cells(Zeile, CursorSpalte).Value = ""
End If
Next CursorSpalte
Next Zeile