Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1388to1392
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Berechnungen für Bereich, falls Kriterium erfüllt

Berechnungen für Bereich, falls Kriterium erfüllt
10.11.2014 12:00:38
Florian
Hallo zusammen,
ich bräuchte dringend Eure Hilfe!
Ich schreibe eine Funktion mit 3 Eingangsparameter: einem Startzeitpunkt Z1 (Datum), einem Endzeitpunkt Z2 (Datum) und einer dritten Variable B (Zahl).
Der Startzeitpunkt befindet sich in Spalte C, der Endzeitpunkt in Spalte H und die dritte Variable in Spalte D in einer Tabelle in Tabellenblatt 9.
Die Zeilen dieses Tabellenblatts sind zunächst nach dem Startzeitpunkt und schließlich nach der dritten Variable aufsteigend sortiert.
Der "indirekt gesuchte" Wert befindet sich in Spalte M:
Es sollen nun vorerst insgesamt 4 Werte (aus Spalte M) gesucht und als Variablen (A, B, C, D) abgespeichert werden, mit denen dann in der Funktion weitere Berechnungen angestellt werden können:
A: Wert aus Spalte M aus der Zeile, die folgende Kriterien erfüllt:
Z1 entspricht exakt Spalte C, Z2 entpricht möglichst Spalte H (sonst: nächstbester Wert darunter), B entspricht möglichst Spalte D (sonst: nächstbester Wert darunter)
B: Wert aus Spalte M aus der Zeile, die folgende Kriterien erfüllt:
Z1 entspricht exakt Spalte C, Z2 entpricht möglichst Spalte H (sonst: nächstbester Wert darunter), B entspricht möglichst Spalte D (sonst: nächstbester Wert darüber)
C: Wert aus Spalte M aus der Zeile, die folgende Kriterien erfüllt:
Z1 entspricht exakt Spalte C, Z2 entpricht möglichst Spalte H (sonst: nächstbester Wert darüber), B entspricht möglichst Spalte D (sonst: nächstbester Wert darunter)
D: Wert aus Spalte M aus der Zeile, die folgende Kriterien erfüllt:
Z1 entspricht exakt Spalte C, Z2 entpricht möglichst Spalte H (sonst: nächstbester Wert darüber), B entspricht möglichst Spalte D (sonst: nächstbester Wert darüber).
Vielen Dank für Eure Hilfe!

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Berechnungen für Bereich, falls Kriterium erfüllt
10.11.2014 16:27:32
Florian
Hi,
hätte nun folgenden Code geschrieben, bekomme aber die Fehlermeldung #WERT! (Vorerst nur beispielhaft für "A" (siehe oben)!)
Function Test(ByVal Z1 As Date, _
ByVal Z2 As Date, _
ByVal B As Double) As Double
Dim Zelle As Range
Dim Start As String
Dim A As Double
Dim Z_alt As Date
Dim B_alt As Double
With Worksheets("Tabelle1")
'Gleiches Datum suchen
Set Zelle = .Columns(3).Find(T1, lookat:=xlWhole, LookIn:=xlFormulas)
Start = Zelle.Address
'Initialisierung
Z_alt = .Cells(Zelle.Row, 8)
B_alt = .Cells(Zelle.Row, 4)
A = .Cells(Zelle.Row, 13)
If Not Zelle Is Nothing Then
Do
If DateDiff("y", .Cells(Zelle.Row, 8), Z2) >= 0 And DateDiff("y", Z_alt, .Cells(Zelle. _
Row, 8)) >= 0 Then
If .Cells(Zelle.Row, 4)  0 Then
A = .Cells(Zelle.Row, 13)
Z_alt = .Cells(Zelle.Row, 8)
B_alt = .Cells(Zelle.Row, 4)
' Falls identisches zweites Datum und identische Zahl, Schleife verlassen!
If DateDiff("d", .Cells(Zelle.Row, 8), Z2) = 0 And .Cells(Zelle.Row, 4) = B  _
Then
Exit Do
End If
End If
End If
' Nächsten Treffer mit selbem Datum suchen:
Set Zelle = .Columns(3).FindNext(Zelle)
Loop While Not Zelle Is Nothing And Zelle.Address  Start
Test = A
Else
Test = "Fehler"
End If
End With
End Function

Kann mit jemand weiterhelfen?

Anzeige
AW: Berechnungen für Bereich, falls Kriterium erfüllt
10.11.2014 16:44:45
Rudi
Hallo,
warum T1?
Set Zelle = .Columns(3).Find(T1, lookat:=xlWhole, LookIn:=xlFormulas)
Gruß
Rudi

AW: Berechnungen für Bereich, falls Kriterium erfüllt
10.11.2014 16:58:41
Florian
Ouh, Tippfehler...muss natürlich Z1 lauten...funktioniert trotzdem nicht...

AW: Berechnungen für Bereich, falls Kriterium erfüllt
10.11.2014 17:48:15
Florian
Dennoch danke für den Hinweis, Rudi...wie gesagt, klappt trotzdem (noch) nicht...

AW: Berechnungen für Bereich, falls Kriterium erfüllt
11.11.2014 20:13:42
Florian
Nachdem ich nun Z1 als String dimensioniert habe und LookIn:=xlFormulas durch Lookin:=xlValues ersetzt habe, läuft zumindest:
Set Zelle = .Columns(3).Find(T1, lookat:=xlWhole, LookIn:=xlValues)
Allerdings taucht immer noch der Fehler #WERT! auf.
Der Fehler muss also irgendwo in der Do-Schleife liegen...kann mir jemand weiterhelfen?
Function Test(ByVal Z1 As Date, _
ByVal Z2 As Date, _
ByVal B As Double) As Double
Dim Zelle As Range
Dim Start As String
Dim A As Double
Dim Z_alt As Date
Dim B_alt As Double
With Worksheets("Tabelle1")
'Gleiches Datum suchen
Set Zelle = .Columns(3).Find(Z1, lookat:=xlWhole, LookIn:=xlFormulas)
Start = Zelle.Address
'Initialisierung
Z_alt = .Cells(Zelle.Row, 8)
B_alt = .Cells(Zelle.Row, 4)
A = .Cells(Zelle.Row, 13)
If Not Zelle Is Nothing Then
Do
If DateDiff("y", .Cells(Zelle.Row, 8), Z2) >= 0 And DateDiff("y", Z_alt, .Cells(Zelle. _
Row, 8)) >= 0 Then
If .Cells(Zelle.Row, 4)  B_alt Then
A = .Cells(Zelle.Row, 13)
Z_alt = .Cells(Zelle.Row, 8)
B_alt = .Cells(Zelle.Row, 4)
' Falls identisches zweites Datum und identische Zahl, Schleife verlassen!
If DateDiff("d", .Cells(Zelle.Row, 8), Z2) = 0 And .Cells(Zelle.Row, 4) = B   _
Then
Exit Do
End If
End If
End If
' Nächsten Treffer mit selbem Datum suchen:
Set Zelle = .Columns(3).FindNext(Zelle)
Loop While Not Zelle Is Nothing And Zelle.Address  Start
Test = A
End If
End With
End Function

Anzeige
AW: Berechnungen für Bereich, falls Kriterium erfüllt
12.11.2014 09:33:22
Florian
Habe gestern den falschen Code hochgeladen, hier der richtige (vorher war Z1 nicht als String dimensioniert): Wie gesagt, der Code läuft immer noch nicht...
Function Test(ByVal Z1 As String, _
ByVal Z2 As Date, _
ByVal B As Double) As Double
Dim Zelle As Range
Dim Start As String
Dim A As Double
Dim Z_alt As Date
Dim B_alt As Double
With Worksheets("Tabelle1")
'Gleiches Datum suchen
Set Zelle = .Columns(3).Find(Z1, lookat:=xlWhole, LookIn:=xlFormulas)
Start = Zelle.Address
'Initialisierung
Z_alt = .Cells(Zelle.Row, 8)
B_alt = .Cells(Zelle.Row, 4)
A = .Cells(Zelle.Row, 13)
If Not Zelle Is Nothing Then
Do
If DateDiff("y", .Cells(Zelle.Row, 8), Z2) >= 0 And DateDiff("y", Z_alt, .Cells(Zelle. _
Row, 8)) >= 0 Then
If .Cells(Zelle.Row, 4)  B_alt Then
A = .Cells(Zelle.Row, 13)
Z_alt = .Cells(Zelle.Row, 8)
B_alt = .Cells(Zelle.Row, 4)
' Falls identisches zweites Datum und identische Zahl, Schleife verlassen!
If DateDiff("d", .Cells(Zelle.Row, 8), Z2) = 0 And .Cells(Zelle.Row, 4) = B  _
Then
Exit Do
End If
End If
End If
' Nächsten Treffer mit selbem Datum suchen:
Set Zelle = .Columns(3).FindNext(Zelle)
Loop While Not Zelle Is Nothing And Zelle.Address  Start
Test = A
End If
End With
End Function

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige