「1の次に9」が来る場所はどこ?Excelで連続する縦の並びを検索する方法

「1の次に9」が来る場所はどこ?Excelで連続する縦の並びを検索する数式 実務の深淵

はじめに:MATCH関数の限界に挑む?

Excelで「ある数字」がどこにあるかを探すとき、真っ先に思いつくのは MATCH関数 ですよね。
「1はどこ?」→「〇番目にあります!」と即答してくれます。

しかし、今回のミッションは少し違います。
「『1』の直後に『9』が来るパターンはどこ?」 を探したいのです。

通常のMATCH関数は、あくまで「1つのセル」しか見てくれません。

単に「1」を探すだけでは、後ろが「3」かもしれないし「8」かもしれません。「縦に並んだ2つのセル」をセットで検索する…。さあ、どうすればいいでしょうか?

実務ではこんな場面で役立ちます

「こんなパズル、いつ使うの?」と思うかもしれませんが、この考え方は実務データ分析の基礎になります。

  • ログ分析: 「エラー発生」の直後に「システム停止」が起きた瞬間(原因)を特定する。
  • 行動分析: 「商品ページ閲覧」の次に「購入ボタン」を押したユーザーの行動パターンを探す。
  • センサーデータ: 温度が「急上昇」した直後に「急降下」した異常波形を見つける。

今回は、Excel初心者の方にも分かりやすいように、7つのアプローチでこの問題を解いていきます!

今回のターゲットデータ

本記事では、無料のWeb版Excelを使用して検証および画像の作成を行っています。Windowsはもちろん、MacやLinuxの方もブラウザさえあれば挑戦できます!

A1セルからA15セルに、以下の数字が入力されています。

={8;1;10;3;14;9;20;4;1;9;3;18;4;11;9}

Excelの説明画像

このデータには「1」も「9」も複数回登場します。
しかし、「1」の次に「9」が来ている場所は一箇所だけです。

データを見ると、A9セルが「1」、A10セルが「9」になっていますね。

Excelの説明画像

つまり、このパターンの先頭である「9番目」という答えを出すのが今回のゴールです。

【前提】
今回はロジックを分かりやすくするため、リスト内に「1→9」という並びは1箇所しか存在しない(重複なし)ものとして進めます。

※2次元の配列から特定のパターンを検索する方法は以下の記事で紹介しています!


初心者でも分かる!工夫とアイディアの数式

関数の詳細な仕様については、Microsoft公式のヘルプも参考にしてください。

1. 文字列でくっつけて探す(MATCH & 文字列結合)

はじめに、一番直感的で分かりやすい方法から。

「2つのセル」を検索できないなら、「くっつけて1つの文字」にしてしまえばいいのです!

数式と解説

=MATCH("1|9", A1:A14 & "|" & A2:A15, 0)

【難易度:★☆☆☆☆】【実用度:★★★★★】

【ロジックの分解】

1. A1:A14 & "|" & A2:A15

「自分」と「一つ下」のセルを、区切り文字「|」で結合します。
"8|1", "1|10", "10|3" ... "1|9" ... という新しいリストが内部で作られます。

Excelの説明画像

2. MATCH("1|9", ..., 0)

そのリストの中から、”1|9” という文字列を探します。

第3引数の「0」は「完全一致」という意味です。
これを忘れると正しい答えが出ないので、初心者の方は必ず「MATCHの最後は0!」と覚えておきましょう。

Excelの説明画像

2. 論理値の掛け算(MATCH & 論理積)

次に、計算だけで探す方法です。「条件A かつ 条件B」を数式でどう表現するかがポイントです。

数式と解説

=MATCH(1, (A1:A14=1)*(A2:A15=9), 0)

【難易度:★★☆☆☆】【実用度:★★★★☆】

【ロジックの分解】

1. (A1:A14=1):自分が「1」であるか?(TRUE / FALSE)

2. (A2:A15=9):一つ下が「9」であるか?(TRUE / FALSE)

Excelの説明画像

3. (...) * (...):2つの結果を掛け算します。

Excelの説明画像

4. MATCH(1, ..., 0):掛け算の結果が「1」になった場所を探します。

Excelの説明画像

3. 最新関数でスマートに(XMATCH & DROP)

続いて、Excel 2021以降やMicrosoft 365を使っているなら、範囲を手動でズラす(A1:A14とA2:A15)必要はありません。

DROP関数を使えば、範囲指定は「A1:A15」だけで済みます。

数式と解説

=XMATCH(1, (DROP(A1:A15,-1)=1) * (DROP(A1:A15,1)=9))

【難易度:★★★☆☆】【実用度:★★★★★】

【ロジックの分解】

1. DROP(A1:A15, -1):リストの「一番下」を削除します。(つまり A1:A14 と同じ)

2. DROP(A1:A15, 1):リストの「一番上」を削除します。(つまり A2:A15 と同じ)

Excelの説明画像

あとは数式2と同じ掛け算ロジックで判定し、XMATCH(MATCHの進化版)で検索します。

Excelの説明画像

※XMATCHはデフォルトで「完全一致」なので、最後の「0」を省略できるのが嬉しいですね!


中級者へのステップアップ!配列操作テクニック

4. フィルターで該当行を抽出(FILTER & LET)

ここからは配列操作の本番です。「条件に合うものだけを抜き出す」といえば、FILTER関数の出番です。

数式と解説

=LET(r,A1:A15, i,SEQUENCE(ROWS(r)-1), INDEX(FILTER(i, (INDEX(r,i)=1)*(INDEX(r,i+1)=9), NA()), 1))

【難易度:★★★★☆】【実用度:★★★☆☆】

【ロジックの分解】

1. LET:変数を使える関数です。範囲を r、行番号の連番を i と定義して数式を見やすくしています。

Excelの説明画像

2. INDEX(r, i)INDEX(r, i+1):現在の行と、次の行の値を比較します。

Excelの説明画像

3. FILTER(i, 条件, NA()):条件(1→9の並び)に一致する行番号 i を抽出します。

Excelの説明画像

重要ポイント:見つからなかった場合に#CALC!エラーにならないよう、第3引数に NA() を指定して「見つかりません」というエラー値を明示的に出すのが、上手なエラーハンドリング(処理)のコツです。

5. XMATCHで位置特定(XMATCH & LET)

あるいは、FILTERを使わず、直接XMATCHで探すパターンもあります。

数式と解説

=LET(r,A1:A15, i,SEQUENCE(ROWS(r)-1), XMATCH(1, (INDEX(r,i)=1)*(INDEX(r,i+1)=9), 0))

【難易度:★★★☆☆】【実用度:★★★★☆】

Excelの説明画像

数式2と考え方は同じですが、LETSEQUENCE を使うことで、参照範囲が変わっても修正が楽な「強い数式」になっています。

Excelの説明画像

6. 文字列操作の極み(TEXTJOIN & FIND)

少し視点を変えて、文字列操作だけで解く方法も紹介します。

これは実務的というよりは「パズル的」な解法ですが、テキスト関数の挙動を深く理解するのに役立ちます。

数式と解説

=LET(t,","&TEXTJOIN(",",,A1:A15)&",", p,FIND(",1,9,",t), LEN(LEFT(t,p)) - LEN(SUBSTITUTE(LEFT(t,p),",","")))

【難易度:★★★★★】【アイデア度:★★★★★】

【ロジックの分解】

1.TEXTJOIN:全ての数値をカンマ区切りで連結し、",8,1,10...1,9,3..." という長い文字列を作ります。

Excelの説明画像

2.FIND(",1,9,", t):その中から ",1,9," という文字列が何文字目にあるかを探します。
※前後にカンマをつけるのは、「11,9」などを誤検知しないための重要な工夫です。

Excelの説明画像

3.LEN - LEN(SUBSTITUTE(...)):見つかった場所より「左側にあるカンマの数」を数えます。
カンマの数が、そのまま「何番目のデータか」を表すことになります。

Excelの説明画像

【注意】
この数式は、見つからなかった場合に #VALUE! エラーになります。実務で使うなら =IFERROR(..., NA()) などで囲むのが親切ですね。

7. 汎用性最強!MAP関数(MAP & LAMBDA)

最後に紹介するのは、Microsoft 365環境における最強の剣、MAP関数です。

数式と解説

=XMATCH(1, MAP(SEQUENCE(ROWS(A1:A15)-1), LAMBDA(i, 1*AND(INDEX(A1:A15, {0;1}+i)={1;9}))))

【難易度:★★★★★】【実用度:★★★★☆】

【この数式のすごいところ】

INDEX(..., {0;1}+i) の部分で、自分(0)と次(1)のデータを配列として取得し、{1;9} という配列と直接比較しています。

Excelの説明画像

この書き方の最大のメリットは、「拡張性」です。

例えば「1→9→5→8」という4つの並びを探したくなったとしましょう。
数式1や2では修正が大変ですが、この数式なら {0;1;2;3}{1;9;5;8} に書き換えるだけで対応できます。

複雑なパターン検索にも応用できる、プログラマライクな数式です。

まとめ:単純な検索から「パターン認識」へ

たかが2つの数字の並びですが、これを探すために

  • 文字列にして探す
  • 論理演算(掛け算)で探す
  • 配列をズラして探す

といった多様なアプローチがありました。

これができるようになると、単なる「値の検索」だけでなく、データの「流れ」や「変化」を捉えることができるようになります。

ぜひ、あなたの手元のデータで「特定のパターン」を探してみてください。意外な発見があるかもしれませんよ!

タイトルとURLをコピーしました