Hier ist eine benutzerdefinierte Funktion, die auf Ihrem Entwurf basiert arbeiten. Geben Sie zwei übereinstimmende Arrays in die ersten beiden Parameter ein, dann das Schlüsseldatum in das dritte. Sie finden die Liste der REGISTER Daten zurück, die den Anfang des Bereichs (n) halten diesen Stichtag markieren:
Option Explicit
Function DateCAT(RegisterRng As Range, ExitRng As Range, MyDt As Date) As String
Dim DtARR As Variant, D As Long
If RegisterRng.Cells.Count <> ExitRng.Cells.Count Then
DateCAT = "date ranges do not match"
Exit Function
End If
DtARR = Union(RegisterRng, ExitRng)
For D = LBound(DtARR) To UBound(DtARR)
If DtARR(D, 1) <= MyDt And DtARR(D, 2) >= MyDt Then
DateCAT = DateCAT & ", " & DtARR(D, 1)
End If
Next D
If DateCAT = "" Then
DateCAT = "none"
Else
DateCAT = Mid(DateCAT, 3, Len(DateCAT))
End If
End Function
= DATECAT (REGISTER.DT, EXIT.DT, MyDate)
Übrigens sind die Formeln für REGISTER.DT und EXIT.DT dynamisch.
= OFFSET (Sheet1 $ A $ 1 ,,, COUNTA (Sheet1 $ A +! $ A))!
= OFFSET (Sheet1 $ B $ 1 ,,, COUNTA (Sheet1 $ B: $ B),)
============================ Diese Version ist wie COUNTIFS(), Sie Setzen Sie den Bereich, von dem zuerst zurückgekehrt werden soll, und listen Sie dann Wertepaare auf ... einen Bereich, dann einen Test für diesen Bereich, dann einen weiteren optionalen Bereich und einen Test, bis zu insgesamt 5.
= DATECAT (Werte, TstRng1, Test1, OptTstRng2, OptTest2, OptTstRng3, OptTest3)
Option Explicit
Function DateCAT(RegisterRng As Range, RNG1 As Range, TST1 As String, _
Optional RNG2 As Range, Optional TST2 As String, _
Optional RNG3 As Range, Optional TST3 As String, _
Optional RNG4 As Range, Optional TST4 As String, _
Optional RNG5 As Range, Optional TST5 As String) As String
Dim D As Long, Bad As Boolean, i As Long
D = RegisterRng.Cells.Count
If RNG1.Cells.Count <> D Then Bad = True
If Not RNG2 Is Nothing Then If RNG2.Cells.Count <> D Then Bad = True
If Not RNG3 Is Nothing Then If RNG3.Cells.Count <> D Then Bad = True
If Not RNG4 Is Nothing Then If RNG4.Cells.Count <> D Then Bad = True
If Not RNG5 Is Nothing Then If RNG5.Cells.Count <> D Then Bad = True
If Bad Then
DateCAT = "data ranges do not match"
Exit Function
End If
For i = 1 To RNG1.Cells.Count
If WorksheetFunction.CountIf(RNG1.Cells(i), TST1) = 0 Then Bad = True
If Not RNG2 Is Nothing Then If WorksheetFunction.CountIf(RNG2.Cells(i), TST2) = 0 Then Bad = True
If Not RNG3 Is Nothing Then If WorksheetFunction.CountIf(RNG3.Cells(i), TST3) = 0 Then Bad = True
If Not RNG4 Is Nothing Then If WorksheetFunction.CountIf(RNG4.Cells(i), TST4) = 0 Then Bad = True
If Not RNG5 Is Nothing Then If WorksheetFunction.CountIf(RNG5.Cells(i), TST5) = 0 Then Bad = True
If Not Bad Then DateCAT = DateCAT & ", " & RegisterRng.Cells(i).Value
Bad = False
Next i
If DateCAT = "" Then
DateCAT = "none"
Else
DateCAT = Mid(DateCAT, 3, Len(DateCAT))
End If
End Function
Wichtig: Wenn auf einem benannten Bereich (eine Zelle, mit 1-Wert) Überprüfung müssen Sie eingeben TST1 etc als operater & benannten Bereich: ">"&MYCELL
Dank Jerry. Und das ist bereits vry hilfreich ... ABER was würden wir tun, wenn wir mehrere Variablen haben, um zu überprüfen, einschließlich Daten und Nicht-Daten, und größer als usw. Unsere vollständigen Formeln (zum Zählen sind:> = SOMPRODUCT (- (AANM.DT> = DT.START) * (AANM.DT <= DT.EIND) * (TYPE.TXT = I8)) UND> = SOMPRODUCT (- (AANM.DT> = DT.START) * (AANM. DT <= DT.EIND) * (- (TRIAGE.DT> = DT.START) * (TRIAGE.DT <= DT.EIND))) –
Ich habe festgestellt, dass das Problem in der Array-Formel liegt, die die genannten Bereiche nicht genießt Wie kann ich nun eine einfache Funktion erstellen, die einen benannten Bereich in eine Matrixformel wie –
aktualisiert? Dann kann ich P() um alle benannten Bereiche setzen und fortfahren (vorausgesetzt P ist die Funktion zum Umwandeln des benannten Bereichs) –