Excelで「連続するデータの塊」を数える!0と1の島を探す6つの数式

Excelで「連続するデータの塊」を数える!0と1の島を探す6つの数式 実務の深淵

はじめに:この海に、島はいくつある?

今回は、少し変わったExcelパズルに挑戦してみましょう。
A列に、0と1がランダムに入力されたデータがあります。

Excelの説明画像

「1」は陸地、「0」は海だと想像してください。
1が連続している部分は、つながった「ひとつの島」とみなします。

さて、この配列の中に、島は全部でいくつあるでしょうか?

「えっ、目で数えればいいじゃん」と思いましたか?
しかし、もしこれが数千行のデータだったらどうでしょう?目視では限界がありますよね。

【前提条件】
今回はロジックをシンプルにして理解しやすくするため、データは「必ず0か1のどちらかが入力されており、空白はない」という前提で進めます。
もし他の数値や条件(例えば「100以上」など)で判定したい場合は、数式の中の不等号や条件式を変更するだけで応用可能です!

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

実務ではこんな場面で使えます

この「連続するデータの塊を数える」というロジックは、実務でも意外なほど役に立ちます。

  • 機械の稼働分析: 「稼働(1)」と「停止(0)」のログから、機械を何回起動させたか(スイッチオンの回数)を数える。
  • Webサイト分析: アクセスログから、ページ移動が途切れたタイミングを検知し、セッション数(訪問回数)をカウントする。
  • 勤怠・シフト管理: 「出勤(1)」と「休み(0)」のデータから、連勤が何回発生したかを把握する。
  • 在庫管理: 「在庫あり(1)」と「在庫なし(0)」の推移から、再入荷(在庫復活)の回数を集計する。

つまり、「データの合計」ではなく「イベントの発生回数」を知りたい時に、このテクニックが火を吹きます。

今回は、この「島の数」を求める6つの数式を紹介します。シンプルなものから、芸術的なものまで、Excelの奥深さを堪能してください!

冒険の準備 – 地形データの作成

まずは準備です。A1セルからA20セルに、以下のデータを入力してください。

={1;0;1;0;0;1;1;1;1;0;1;0;1;1;0;0;1;1;1;0}

Excelの説明画像

よく見ると、1の塊(島)が6つあるはずです。
この「6」という数字を、数式で導き出しましょう。


6つのアプローチで「島」を数えろ!

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

1. 最も簡単な方法(立ち上がりを検知)

はじめに紹介するのは、「島が始まる瞬間」つまり「前のセルが0(海)で、今のセルが1(陸)」になった瞬間を数える方法です。

数式と解説

=SUM((A1:A20=1)*(VSTACK(0,A1:A19)<>1))

【実用度:★★★★★】【アイデア度:★★★☆☆】

【登場する関数の解説】

VSTACK(配列1, [配列2], …):複数の配列を縦方向(垂直)に連結します。

【ロジックの分解】
1. A1:A20=1:今いる場所が「陸地(1)」であるか?

2. VSTACK(0,A1:A19):データを1つ下にズラした配列を作ります。

つまり「1つ前のセルの値」を見ていることになります。(最初のA1セルの「1つ前」は存在しないので、ダミーの0を置いています)

Excelの説明画像

3. ...<>1:1つ前の場所が「陸地(1)ではない(つまり海)」か?

Excelの説明画像

すなわち、「今は陸地、でもさっきまでは海だった」。

これこそが上陸(島の始まり)の瞬間です。
この条件を満たすセルをSUMで合計すれば、島の数が求まります。

Excelの説明画像

2. SUMだけでやる(終わりを検知)

次に、逆に「島が終わる瞬間」を数えることもできます。

数式と解説

=SUM((A1:A20=1)*(A1:A20<>A2:A21))

【実用度:★★★☆☆】【アイデア度:★★☆☆☆】

【ロジックの分解】
1. A1:A20=1:今いる場所が「陸地(1)」であるか?

2. A1:A20<>A2:A21:今の場所と、次の場所(1つ下)の値が違うか?

Excelの説明画像

「今は陸地だけど、次は違う(海になる)」。これは島の端っこ(崖)を意味します。

Excelの説明画像

※注意:この数式は、データ範囲の外(A21)が空白または0であることを前提としています。
もしA21に「1」が入っていると、最後の島を数え損ねてしまいます。

3. 上記の改良版(A21問題を解決)

続いて、数式2の弱点を克服し、範囲外のセルに依存しない形にしたのがこちらです。

数式と解説

=(A1=1)+SUM((A2:A20=1)*(A1:A19=0))

【実用度:★★★★☆】【アイデア度:★★☆☆☆】

【ロジックの分解】
この数式は、判定を2つに分けています。
1. (A1=1):いきなり先頭が「陸地」なら、それは島の始まりなので「+1」。

2. SUM((A2:A20=1)*(A1:A19=0)):2行目以降については、「今は陸地、かつ、1つ上は海」という「立ち上がり」の瞬間をカウントします。

Excelの説明画像

これで、どこにデータがあっても正確に島を数えられます。

4. 美しき配列数式 (FREQUENCY)

実用性はさておき、参照範囲がすべて「A1:A20」で統一されている、数学的に美しい解法です。

数式と解説

=SUM((FREQUENCY(IF(A1:A20=1,ROW(A1:A20)),IF(A1:A20=0,ROW(A1:A20)))>0)*1)

【実用度:★★☆☆☆】【アイデア度:★★★★★】

【登場する関数の解説】

FREQUENCY(データ配列, 区間配列):データの頻度分布を計算します。区間配列で指定された範囲に、データがいくつあるかを返します。

【ロジックの分解】
1. IF(A1:A20=1, ROW(A1:A20))陸地(1)の行番号だけを取り出します。

2. IF(A1:A20=0, ROW(A1:A20))(0)の行番号だけを取り出します。

3. FREQUENCY(陸地行, 海行):ここが魔法です!

【イメージしてください】
長いテープに陸地(1)が続いています。
ここで、海(0)の行番号を「ハサミを入れる場所」だと考えてください。
海がある場所でテープをチョキチョキ切っていくと、残ったテープの断片(区間)には、陸地がいくつか含まれていますよね?
FREQUENCY関数は、この「切られたテープごとの陸地の数」を計算してくれるのです。

結果は {1; 1; 0; 4; 1; 2; ...} のように、各島に含まれる陸地のマスの数になります。

Excelの説明画像
Excelの説明画像

4. (...>0)*1:0より大きい(島が存在する)区間の数をカウントします。

Excelの説明画像

FREQUENCY関数については、以下の記事で紹介しています!

5. 文字列操作(TEXTSPLIT)

データを一度くっつけて、文字として処理する力技もあります。

数式と解説

=ROWS(TEXTSPLIT(CONCAT(A1:A20),,0,1))

【実用度:★★★★☆】【アイデア度:★★★★☆】

【登場する関数の解説】

CONCAT(テキスト1, [テキスト2], ...):複数のテキストを連結します。
TEXTSPLIT(テキスト, 列の区切り記号, [行の区切り記号], [空のセルを無視]):区切り文字を使ってテキストを分割します。

【ロジックの分解】
1. CONCAT(A1:A20):すべての0と1を連結して、"10100111101011001110" という長い文字列を作ります。

2. TEXTSPLIT(...,, 0, 1):この文字列を、区切り文字「0(海)」で分割します!
第4引数(空のセルを無視)を「1」にすることで、海が連続していても空データを作らず無視します。

結果、{"1"; "1"; "1111"; "1"; "11"; "111"} という「島の断片」だけの配列ができます。

3. ROWS(...):その行数(個数)を数えれば、島の数になります。

Excelの説明画像

6. XMATCHを使いたい!(差分とソート)

最後に、最新関数を使ったテクニカルな解法です。

数式と解説

=XMATCH(1,SORT(A1:A20-VSTACK(0,A1:A19),,-1),0,-1)

【実用度:★★★☆☆】【アイデア度:★★★★★】

【登場する関数の解説】

SORT(配列, [並べ替えインデックス], [並べ替え順序]):配列の内容を並べ替えます。
XMATCH(検索値, 検索範囲, [一致モード], [検索モード]):指定された項目を検索し、その相対的な位置を返します。

【ロジックの分解】
1. A1:A20 - VSTACK(0,A1:A19):現在の値から、1つ前の値を引き算します(差分をとる)。

  • 海(0) → 陸(1) : 1 (島の始まり)
  • 陸(1) → 陸(1) : 0
  • 陸(1) → 海(0) : -1 (島の終わり)
Excelの説明画像

2. SORT(..., -1):計算結果を降順(大きい順)に並べ替えます。
 {1; 1; 1; 1; 1; 1; 0; 0...; -1; -1...} のように、島の数だけ「1」が先頭に集まります。

Excelの説明画像

3. XMATCH(1, ..., 0, -1):並べ替えた配列の中から、1」を後ろから(逆順で)探します。
 一番最後にある「1」の位置=「1」の個数=島の数、となります。

Excelの説明画像

まとめ:データの「変化」を見逃すな

一見複雑そうに見えますが、どの数式も「0から1に変わる瞬間(立ち上がり)」「1から0に変わる瞬間(立ち下がり)」をどうやって捕まえるか、という点に工夫が凝らされています。

この「変化を検知する」という考え方は、データの分析において非常に強力な武器になります。

ぜひ、あなたの業務の「海」に浮かぶ「島(チャンスや異常値)」を見つけ出してみてください!

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