Excel: 特定の文字列を含む最後の行番号を返すにはどうすればよいでしょうか?

Excel: 特定の文字列を含む最後の行番号を返すにはどうすればよいでしょうか?

Excel では、現在の行の前の特定の文字列を含む最後の行番号を返す、列 B (以下の例) に入力できる Excel 数式はありますか?

データが連続していません。
たとえば、次のようなデータがあります。

   |  A (value)    B (prev recent instance)
----------------------------------------------
 1 |  Mike
 2 |  John
 3 |  Mike         1
 4 |  Tony         
 5 |  Mike         3
 6 |  John         2

次に、列 C に最も古いインスタンスが表示されるように拡張します。

次の質問と非常に似ているようです: 特定のデータを含む範囲内のセルの最後の行番号を返す Excel 数式は何ですか?ただし、その質問と回答ではデータが連続している必要があります。

編集: 回答はワークシートの数式でお願いしますが、VBA 経由で実装する方が適切だと思われる場合は、それぞれのアプローチの長所と短所とともに、その点も回答に含めてください。

答え1

最も古いインスタンスを見つけるには、以下の式を使用します。

=LOOKUP(2,1/(A:A=A2),ROW(A:A))

理解を深めるために、以下のスクリーンショットをご覧ください。

ここに画像の説明を入力してください

答え2

データがA1から始まると仮定して、B2でこの「配列数式」を試してください。

=IF(COUNTIF(A$1:A1,A2),MATCH(2,1/(A$1:A1=A2)),"")

CTRL+SHIFT+ENTERで確定し、コピーします

または、この非配列バージョンを使用することもできます

=IF(COUNTIF(A$1:A1,A2),MATCH(2,INDEX(1/(A$1:A1=A2),0)),"")

Excel 2007以降では、IFERRORを使用して簡略化できます。つまり、配列バージョンは次のようになります。

=IFERROR(MATCH(2,1/(A$1:A1=A2)),"")

C列の「1番目のインスタンス」行については、C1にコピーしたこの数式を試してください。

=MATCH(A1,A$1:A1,0)

注: 数式は厳密には「行番号」を返すのではなく、データの相対的な行番号を返します。つまり、データの行 1 は 1 を返します。

関連情報