@Dieter Klemke Ich möchte mich riesig für deine Hilfe bedanken!! Wirklich der Hammer auch deine Erklärung hat mir nochmal geholfen :) Ich hätte gerne eher geantwortet aber hab leider nicht jeden Tag/ Woche Zeit dafür mich dem Thema zu widmen :( Hab mich heute früh aber mal wieder dran gesetzt und daher jetzt zum Thema :)
(1) Die Schleife für die Summenbildung der Funktion funktioniert! Und ja ich dachte es wäre besser die Schleife in die Funktion zu integrieren - aber wenn das zeitlich keinen Unterschied macht dann ist es so eventuell sogar besser!
(1.1) Ich möchte jedoch zusätzlich zu der gebildeten Summe noch ausgegeben haben bei wievielen Nummern "maxGefunden(1) And maxGefunden(2) = True And zeileMax(1) (1.2) ich habe dafür die Option das nur ein Ergebnis gegeben wird wenn zeileMax(1) (2) ist es möglich den statischen Operator " (3) ich habe mich mal dran versucht Optionale Kriterien/ Suchbereiche einzufügen und einzubauen... das funktioniert leider nicht :( (per ' hab ich kommentiert wo Änderungen im code sind)
(4) Sehe ich das richtig wenn für ein Kriterium die Minimale Zeile gesucht werden soll und für das andere die Maximale, dass dann der Code gespalten werden muss und für i=1 bspw. minimiert wird indem von oben nach unten gesucht wird und für i=2 maximiert wird indem von unten nach oben gesucht wird?!
Public Function MaxZeile(RefNr As Long, Krit1 As String, Ber1 As String, Krit2 As String, Ber2 _
_
As String, Optional KritB_1 As String, Optional BerB_1 As String, Optional KritB_2 As String, _
Optional BerB_2 As String) As Long
Dim i As Long
Dim letzteZeile As Long
Dim maxGefunden(1 To 2) As Boolean
Dim Krit(1 To 2) As String
Dim Ber(1 To 2) As String
Dim KritB(1 To 2) As String
Dim BerB(1 To 2) As String
Dim wb As Workbook
Dim wsDaten As Worksheet
Dim zeile As Long
Dim zeileMax(1 To 2) As Long
Krit(1) = Krit1
Krit(2) = Krit2
KritB(1) = KritB_1 'neu
KritB(2) = KritB_2 'neu
Ber(1) = Ber1
Ber(2) = Ber2
BerB(1) = BerB_1 'neu
BerB(2) = BerB_2 'neu
Set wb = ThisWorkbook
Set wsDaten = wb.Worksheets("Datensatz")
letzteZeile = wsDaten.Cells(wsDaten.Rows.Count, "A").End(xlUp).Row
If letzteZeile = 1 Then Exit Function
For zeile = letzteZeile To 2 Step -1
If wsDaten.Cells(zeile, "A") = RefNr Then
For i = 1 To 2
If KritB(i) Is Nothing Then 'wie drücke ich das aus, Möglichkeit das KritB für 1 oder 2 _
_
oder beide vorhanden ist
If wsDaten.Cells(zeile, Ber(i)) = Krit(i) And _
Not maxGefunden(i) Then
zeileMax(i) = zeile
maxGefunden(i) = True
End If
ElseIf KritB(1) = vorhanden Then 'wie drücke ich das aus
If wsDaten.Cells(zeile, Ber(i)) = Krit(i) And wsDaten.Cells(zeile, BerB(i)) = KritB(i) _
_
And _
Not maxGefunden(i) Then
zeileMax(i) = zeile
maxGefunden(i) = True
End If
End If
Next i
If maxGefunden(1) And maxGefunden(2) Then
Exit For
End If
End If
Next zeile
If maxGefunden(1) And maxGefunden(2) = True And zeileMax(1) ,"
MaxZeile = Application.WorksheetFunction.Sum(wsDaten.Range(wsDaten.Cells(zeileMax(1) + 1, _
_
13), wsDaten.Cells(zeileMax(2), 13)))
End If
End Function
sry das es so viele Punkte sind die ich Anspreche aber hab halt leider kein VBA-Wissen und möchte verstehen was da von statten geht und es möglichst für die Zukunft lernen - evtl. gibt es ja noch eine gute Empfehlung für ein Buch für VBA? :) möglichst kostengünstig^^Grüße Matthias