Excel で1列内に特定の文字列が次に登場するまでの間の行数をカウントする

Excel で、特定の文字列が次に登場するまでの間の行数をカウントする。

例えばこんな風に、システムログを貼り付けたようなデータがあったとして… (ニホンノエスイー特有の風習ですよね)

(行数) A 列
1 INFO
2 DEBUG
3 DEBUG
4 DEBUG
5 DEBUG
6 DEBUG
7 INFO
8 DEBUG
9 INFO

これの B 列に、以下のような関数を仕込み、A1 ~ A7 までコピーする。関数内の A1 というセル指定は A2A3…とズレていって良い。

=IF(A1 = "INFO", MATCH("INFO", OFFSET(A1, 1, 0, COUNTA(A:A), 1), 0) - 1, "")

この関数で、A 列に次に "INFO" のセルが登場するまでの間の行数をカウントできる。

(行数) A 列 B 列 (関数)
1 INFO 5
2 DEBUG
3 DEBUG
4 DEBUG
5 DEBUG
6 DEBUG
7 INFO 1
8 DEBUG
9 INFO #N/A

INFO という文字列は、A1 セルの次は A7 セルに登場するので、間は5行。B1 セルには 5 と出力される。

A9 セルのように、最後に登場する文字列から最終行までの計算が正しくできないので、最終行には検索対象文字列をダミーで置いておくと良いだろう。