
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 を返します。