Roger fragte, ob es eine Möglichkeit gebe, das Intervall zwischen dem Auftreten von Werten in einer Liste zu berechnen. Zum Beispiel hat er mehrere tausend Zahlen in Spalte A. Wenn man den Wert in Zelle A351 betrachtet, war dieser Wert das letzte Mal in der Liste in Zelle A246. Er möchte eine Formel, die in Zelle B351 eingefügt werden kann und 105 zurückgibt, die Differenz zwischen 351 und 246.

Dieser Ansatz ist in Excel schwer zu implementieren, da Excel nicht sehr gut rückwärts suchen kann – eine Spalte hinauf. Wenn die Prämisse umgekehrt werden könnte, wird die Aufgabe viel einfacher. Wenn beispielsweise eine Formel in Zelle B246 den Wert 105 zurückgeben könnte, der das Intervall bis zum nächsten Auftreten des Werts in Zelle A246 angibt, anstatt das letzte Vorkommen zu berechnen. Die folgende Formel berechnet das nächste Auftreten des Werts in Zelle A1:

=MATCH(A1,A2:$A$65536,0)

Platzieren Sie diese Formel in Zelle B1 und kopieren Sie sie nach unten, wie viele Zellen erforderlich sind. Wenn der Wert in Spalte A in der Spalte nicht erneut vorkommt, gibt die Formel den Fehler # N / A zurück. Wenn Sie lieber die Formel 0 zurückgeben möchten, funktioniert Folgendes:

=IF(ISNA(MATCH(A1,A2:$A$65536,0)),0,MATCH(A1,A2:$A$65536,0))

Wenn Sie unbedingt nach oben zählen müssen (suchen Sie das vorherige Vorkommen anstelle des nächsten Vorkommens), können Sie dies am einfachsten mit einer benutzerdefinierten Funktion tun. Die folgende Funktion, RowInterval, blickt rückwärts durch einen von Ihnen angegebenen Bereich und gibt das gewünschte Intervall zurück:

Function RowInterval(TestCell As Range, LookHere As Range) As Long     Dim varValue As Variant     Dim lngRow As Long

Application.Volatile     varValue = TestCell.Value          'Check for occurrences of the test value in the search range     If WorksheetFunction.CountIf(LookHere, varValue) > 0 Then         With LookHere             'Get the last row of the search range             lngRow = .Row + .Rows.Count - 1             'Start with the last cell in the search range and work up             Do Until .Item(lngRow, 1).Value = varValue                 lngRow = lngRow - 1             Loop         End With         'Subtract the number of the row containing the found occurrence         'from the number of the row containing the test value         RowInterval = TestCell.Row - lngRow     End If End Function

Um die Funktion zu verwenden, geben Sie die folgende Formel in Zelle B2 ein und kopieren Sie die Formel in die Anzahl der gewünschten Zellen:

=RowInterval(A2,A$1:A1)

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (2338) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: