Excelで「ステータス1」「ステータス2」「ステータス3」のように連番が付いた項目から特定の値を取得しようとすると、ワイルドカードの扱いや関数の組み合わせによってエラーが発生することがある。このようなケースでは、検索条件の考え方と配列関数の仕組みを正しく理解することが重要である。本記事ではその解決の考え方について整理する。
INDEX関数とSUMPRODUCT関数の基本構造
INDEX関数は指定した範囲から行列番号に基づいて値を取得する関数であり、SUMPRODUCT関数は配列の掛け算と合計を行う関数である。
例えば「どの列に条件が一致するか」を特定し、その位置をINDEXに渡すことで柔軟な抽出が可能になる。
今回の数式で起きている問題
ワイルドカード「ステータス*」を使用した際に#VALUE!エラーが出る原因は、比較演算子とワイルドカードの相性にある。
例えばExcelの配列計算では「=」による部分一致はそのままでは機能せず、SEARCHやCOUNTIFを組み合わせる必要がある場合がある。
ステータス1・2・3を扱う基本的な考え方
「ステータス*」のような可変文字列を扱う場合は、完全一致ではなく部分一致判定を行う必要がある。
例えば列見出しに「ステータス1」「ステータス2」がある場合、SEARCH関数を使うことで「ステータス」を含むかどうかを判定できる。
SEARCH関数を使った実用的な代替式
ワイルドカードの代わりにSEARCH関数を使うことで、部分一致検索が安定して動作する。
例えば「ISNUMBER(SEARCH(“ステータス”,B1:AC1))」のようにすることで、ステータスを含む列を正しく判定できる。
INDEXとMATCHを組み合わせる方法
よりシンプルな方法としてINDEXとMATCHを組み合わせる方法がある。
例えば「MATCH(“ステータス”,B1:AC1,0)」ではなく、「MATCH(TRUE,ISNUMBER(SEARCH(“ステータス”,B1:AC1)),0)」とすることで柔軟に対応できる。
SUMPRODUCTを使う場合の正しい書き方
SUMPRODUCTを使う場合は論理値を数値化して扱う必要がある。
例えば「(ISNUMBER(SEARCH(“ステータス”,B1:AC1)))*(COLUMN(B1:AC1))」のように構成することで正しい列位置を取得できる。
実務での具体例
例えば売上管理表で「ステータス1:未処理」「ステータス2:処理中」といった列がある場合、特定の最新ステータスだけを抽出したいケースがある。
この場合SEARCH関数を使った列判定とINDEX関数を組み合わせることで柔軟に対応できる。
よくあるエラーの原因
#VALUE!エラーの多くは配列計算の未確定やワイルドカードの誤用によって発生する。
例えば通常の比較演算子で部分一致を行おうとするとExcelは正しく評価できずエラーになることがある。
まとめ:ワイルドカードよりSEARCH関数が安定
ステータスのように連番付きの文字列を扱う場合、ワイルドカードよりもSEARCH関数を使った部分一致判定が安定して動作する。
INDEXやSUMPRODUCTと組み合わせることで、柔軟かつエラーの少ない関数設計が可能になる。


コメント