Lsg

Hallo Forum, hier also meine Lösung:

Hatte noch ein weiteres Problem, denn es befinden sind ich in jeder Zeile unterschiedlich viele Zellen (von 4 bis 10) die in die Berechung einfließen sollen.

Hier also mein Programm:

Sub Berechnung()
Dim i_z As Integer
Dim i_sp As Integer

'alle in Frage kommenden Zeilen ab Zeile 7
For i_z = 7 To Sheets(„kostenprognose“).UsedRange.Rows.Count

'für leerzeilen (darauf folgt ebenfalls leerzeile)
If IsEmpty(Sheets(„kostenprognose“).Cells(i_z, 1).Value) Then
i_z = i_z + 1

Else
'wie viele spalten sind in der aktuellen Zeile gefüllt?
For i_sp = 1 To (Sheets(„€kg“).UsedRange.Columns.Count + 1)

'falls Zelle leer
If IsEmpty(Sheets(„€kg“).Cells(i_z, i_sp).Value) Then

'zelle links daneben ist gefüllt
i_sp = i_sp - 1

'Berechnung
Sheets(„kostenprognose“).Cells(i_z, 2).Value = „=GROWTH(‚€kg‘!RC[-1]:RC[“ & (i_sp - 2) & „],kw!RC:RC[“ & (i_sp - 1) & "],kw!RC[-1])"

'Bedingung erfüllen, um „for“ zu verlassen
i_sp = (Sheets(„€kg“).UsedRange.Columns.Count + 1)

End If

Next i_sp

End If

Next i_z

End Sub

falsch platziert, gehört zu vorherigen Beitrag owT
.

tipp
hallo tobias,
ich war noch mal kurz auf ein Feierabendbierchen aus , mit auch deshalb blick ich deinen Code grad nicht, was du da willst.
Grundsätzlich, sehr persönlich, hasse ich die Unterstriche, von daher, nenn deine Variablen, iZei oder lgZei und iCol, das kann ich lesen.
Dann vor dem Code benutze den Htlm-tag pre also die 3 Buchstaben von pre eingefasst, links von pre das Dreieck nach links, rechts von pre das Dreieck nach rechts (Dreieck =Taste links vom Ypsilon, dann werden die Einrückungen mitgenommen wie hier:

Sub Berechnung()
Dim i\_z As Integer
Dim i\_sp As Integer
'alle in Frage kommenden Zeilen ab Zeile 7
For i\_z = 7 To Sheets("kostenprognose").UsedRange.Rows.Count
 'für leerzeilen (darauf folgt ebenfalls leerzeile)
 If IsEmpty(Sheets("kostenprognose").Cells(i\_z, 1).Value) Then
 i\_z = i\_z + 1
 Else
 'wie viele spalten sind in der aktuellen Zeile gefüllt?
 For i\_sp = 1 To (Sheets("€kg").UsedRange.Columns.Count + 1)
 'falls Zelle leer
 If IsEmpty(Sheets("€kg").Cells(i\_z, i\_sp).Value) Then
 'zelle links daneben ist gefüllt
 i\_sp = i\_sp - 1
 'Berechnung
 Sheets("kostenprognose").Cells(i\_z, 2).Value = "=GROWTH('€kg'!RC[-1]:RC[" & (i\_sp - 2) & "],kw!RC:RC[" & (i\_sp - 1) & "],kw!RC[-1])"
 'Bedingung erfüllen, um "for" zu verlassen
 i\_sp = (Sheets("€kg").UsedRange.Columns.Count + 1)
 End If
 Next i\_sp
 End If
Next i\_z
End Sub

Gruß
Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Reinhard

Danke für deine Tipps.
Der TAG für Einrücken war mir neu.
War wahrscheinlich auch nicht besonders geschickt von mir, den ganzen Code anzugeben.

Die Hauptzeile für die Berechnung in meinem Code stellt folgende Zeile dar:

Sheets(„kostenprognose“).Cells(i_z, 2).Value = „=GROWTH(‚€kg‘!RC[-1]:RC[“ & (i_sp - 2) & „],kw!RC:RC[“ & (i_sp - 1) & „],kw!RC[-1])“

Der restliche Code besteht im Grunde aus if-Abfragen und for-Schleifen, die nur den Sinn haben, die richten Eingabewerte für meine Funktion zu ermitteln bzw. den Ausgabeort für die Funktion festzulegen.

Durch „sheets(„kostenprognose“).Cells( i_z , 2).Value“ mit variablem i_z wird die Funktion in die relevante Spalte und in alle relevanten Zeilen eingefügt.

Durch die Variable i_sp, in der die Anzahl der Eingabegröße gespeichert wurde, wird gewährleistet, dass meine Funktion keine leeren Zellen erfasst und somit Fehler ausgibt.

Gruss
Tobias