(Excel)検索値が2次元の表の何行目/何列目にあるか求める

 Excelで、検索値が表(指定範囲)の中の何行目/何列目にあるのかをそれぞれ求める方法についてです。
 1行(列)だけの表だとXMATCH関数で一発ですが、2次元の表になっている場合は少し工夫が必要です。

  • BYCOL/BYROW関数とXMATCH関数を併用することで、検索値が表の中の何行目/何列目にあるかを求めることができます。

手順

f:id:accs2014:20220323165739p:plain:right:w600

 B2:F5の範囲(4行5列)が表となっています。
 また、検索値がB8セルに入力されています。検索値「け」は表内の上から2行目にあることが分かります。 
 この「2」という数値を数式で求めるため、C8セルに次のように入力しています。

 C8セル

=MIN(BYCOL(B2:F5,LAMBDA(a,IFNA(XMATCH(B8,a),""))))

 BYCOL関数とLAMBDA関数を利用して、表の範囲であるB2:F5にaという名前をつけています。
 そして「IFNA(XMATCH(B8,a),"")」の部分によりB8の検索値がa内の上から何行目にあるかを求めています。BYCOL関数のはたらきによりこの部分の式はa内のそれぞれの列ごと実行されます。これにより4つの空文字列(表内の左から1,2,3,5列目の実行結果)と「2」という数値1つ(左から4列目の実行結果)の計5つの値が求められます。
 最後にMIN関数により5つの実行結果のうち最も小さい値を求めています。これにより検索値が複数存在する場合は最も上の行の番号が返ります。
 ただし、検索値が1つも存在しない場合はエラーでなく0が返ります。エラー値を返すようにする場合は0をエラー値に変換する式を加える必要があります。


f:id:accs2014:20220323165742p:plain:right:w600

 同じく検索値「け」は表内の左から4行目にあることが分かります。 
 この「4」という数値を数式で求めるため、D8セルに次のように入力しています。

 D8セル

=MIN(BYROW(B2:F5,LAMBDA(a,IFNA(XMATCH(B8,a),""))))

 上記の式とほぼ同じで、「BYCOL」が「BYROW」に変わっただけです。
 当然やっていることも同様で、表の範囲であるB2:F5にaという名前をつけ、a内の各行ごとに「IFNA(XMATCH(B8,a),"")」を実行して最小値を求めています。備考についても同様です。