Think Twice
IT技術メモ | プログラミングお題のメモ
Created: 2022-09-01 / Updated: 2022-09-01

[お題] ExcelのXMATCH関数(簡易版)の実装


目次


お題

お題
Copy
ExcelのXMATCH関数を実装してください。

形式:
XMATCH(検索値, 検索範囲, 一致モード)
  - 検索値に検索する文字列が入ります
  - 検索範囲に検索される文字列の配列やリストが入ります(長さ1以上)
    空配列やnull(空を明示的に表すもの)だった場合は"#VALUE!"という文字列を返却します
  - 一致モードは整数で0だったら完全一致
                    -1だったら完全一致または次に小さい項目(辞書順)
                    1だったら完全一致または次に大きい項目(辞書順)
    を検索します
    0,-1,1以外が指定されたら"#VALUE!"という文字列を返却します
  - 上記3つの引数省略は不可とします(必ず3つ指定する)
  - 上記で検索して、値が見つかった場合、検索範囲を1オリジンとした場合のインデックスを返却します
  - 上記で検索して、値がみつからなかった場合、"#N/A"という文字列を返却します

※簡易版のため、以下仕様を省略しています。また一部Excelと異なる部分はエラー処理を拡張しています。
省略する仕様:
  - 検索値、検索範囲の型は文字列のみに限定(それ以外の型は省略)
 - ワイルドカードでの検索
  - 検索報告の指定、バイナリ検索
エラー処理拡張:
  - 検索範囲の長さが0の場合やnull(空を明示的に表すもの)の場合、"#VALUE!"を返却
    ※Excelでは空の範囲をそもそも指定できないので

動作イメージ

Copy
XMATCH("b", ["a", "b", "e", "f", "c"], 0) => 2
XMATCH("d", ["a", "b", "e", "f", "c"], 0) => "#N/A"
XMATCH("d", ["a", "b", "e", "f", "c"], -1) => 5 # dを探すがdがないので、この中にある内でdの次に小さい項目(=c)のインデックスが返る
XMATCH("d", ["a", "b", "g", "f", "c"], 1) => 4 # dを探すがdがないので、この中にある内でdの次に大きな項目(=f)のインデックスが返る

参考

関連メモ

参考