Excel数式で「1」と「0」を指定数だけ並べる!進捗バーやフラグ作成に

実務の深淵

はじめに:1と0のブロックを自由に操ろう!

今回は、Excelでちょっと不思議な配列を作ってみましょう。
やりたいことは非常にシンプルです。

「1」を指定した数だけ並べて、その後に「0」を指定した数だけ並べたい!

例えば、「1」を5個、「0」を3個 と指定したら、以下のような配列を一瞬で作る数式です。

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

Excelの説明画像

「えっ、手入力すればいいじゃん」と思いましたか?
しかし、数式で作ることには絶大なメリットがあります。

それは、「個数の数値を書き換えるだけで、一瞬で配列が伸び縮みする」ということです。

手作業でコピペする必要はありません。数字を変えれば、グラフも集計範囲も自動で追従する。

これがExcel数式の醍醐味です。

この配列、実務でこう使えます!

  • 🔰初心者向け:視覚的な「進捗バー」
    条件付き書式と組み合わせて、1を「色付き」、0を「空白」にすれば、セルの中に動的なグラフ(バー)を作れます。「全8タスク中、5個完了!」が一目瞭然です。
  • 🛡️中級者向け:動的な「集計マスク」
    SUMPRODUCT関数などの中でこの配列を掛け算に使えば、「上から5行目までは計算に含める(×1)、残りの3行は無視する(×0)」といった、複雑な範囲指定が数式だけで完結します。OFFSET関数を使わなくて済むので動作も安定します!
  • 🛡️中級者向け:シフト・スケジュール管理
    「最初の5日は出勤(1)、次の2日は休み(0)」といったパターンを生成し、ガントチャートの稼働日フラグとして活用できます。

今回は、この配列を作るためのアイディアを7つ紹介します。

王道のやり方から、数学的なロマンあふれる方法まで、Excelの引き出しを増やしていきましょう!

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

冒険の準備:入力ルールの確認

まずはシートの準備です。

  • A1:B1:見出し「1の数」「0の数」
  • A2:1を並べたい個数(例:5)
  • B2:0を並べたい個数(例:3)
Excelの説明画像

【今回のルール(前提条件)】
A2セルとB2セルが「両方とも0(または空白)」になるケースは想定しません(配列が空になってしまうため)。
ただし、どちらか片方が0になること(例:1が5個、0が0個=すべて1)は想定して数式を組みます。


第1章:論理とSEQUENCE関数で解く(王道)

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

はじめに、最も基本的かつ王道のアプローチから見ていきましょう。

数式1:IF関数を使った基本形

まずは一番オーソドックスな方法です。

「今何番目か?」を調べて、それが「1の個数」以下なら1、そうでなければ0を出します。

=IF(SEQUENCE(A2+B2)<=A2, 1, 0)

【解説】

SEQUENCE(行, [列], [開始], [目盛り]):連番を作る関数です。

ここでは SEQUENCE(5+3) なので、{1; 2; 3; 4; 5; 6; 7; 8} という連番が作られます。

SEQUENCE(5+3) <= A2:連番が「5」以下かどうかを判定します。

{TRUE; TRUE; TRUE; TRUE; TRUE; FALSE; FALSE; FALSE} になります。

Excelの説明画像

IF:TRUEなら1、FALSEなら0を返します。

Excelの説明画像

SEQUENCE関数が使えないバージョンのExcelをお使いの方は以下の記事で代替数式を紹介しています。

数式2:IFを省略したブール演算

次に、Excel慣れしている人はこちらを使います。IF関数は実は不要なんです。

=(SEQUENCE(A2+B2)<=A2)*1

【解説】
Excelでは、計算式の中で論理値(TRUE/FALSE)に数値を掛けると、自動的に変換される仕組みがあります。

つまり、以下のように処理されます。

  • TRUE × 1 = 1
  • FALSE × 1 = 0

これを利用すれば、数式がグッと短くなりますね!

Excelの説明画像

第2章:文字列操作で解く(視覚的アプローチ)

続いて、「11111000」という文字を作ってから、バラバラにするアプローチです。

数式3:REPTとMIDで分解

=MID(REPT(1,A2)&REPT(0,B2), SEQUENCE(A2+B2), 1)*1

【解説】

REPT(文字, 回数):指定した文字を繰り返します。

REPT(1,5) で “11111”、REPT(0,3) で “000” ができ、
& で繋げて “11111000” という文字列を作ります。

Excelの説明画像

MID(文字列, 開始位置, 文字数):文字の一部を取り出します。

開始位置に SEQUENCE(8) を指定することで、1文字目、2文字目…を一気に取り出し、スピルさせています。

Excelの説明画像

最後に *1 で文字列の”1″を数値の1に変換しています。

Excelの説明画像

【注意】文字数の壁
Excelのセルの文字数制限は32,767文字です。
A2+B2の合計がこれを超えると、この数式はエラーになります。数万行のデータを作る場合は別の方法を選びましょう。

数式4:TEXTSPLITで分割

区切り文字を使って分割する、より現代的な関数を使った方法です。

=TEXTSPLIT(REPT("1,",A2)&REPT("0,",B2),, ",", 1)*1

【解説】

TEXTSPLIT(文字, 列区切り, [行区切り], [空白無視]):区切り文字でデータを分割します。

まず REPT("1,",A2) & REPT("0,",B2)"1,1,1,1,1,0,0,0," というカンマ付きの文字列を作ります。

Excelの説明画像

これを TEXTSPLIT で行方向(第3引数)に分割します。

最後のカンマの後ろに空文字ができるのを防ぐため、第4引数(空白無視)を「1」に設定するのがコツです。

Excelの説明画像

第3章:数学と最新関数の融合(マニア向け)

ここからは少しマニアックな、しかし美しい世界へご案内します。

数式5:数学のロマン(筆者おすすめ!)

IFも文字列操作も論理式も使わない、純粋な数学的アプローチです。

条件分岐を計算だけで表現する、このエレガントさに痺れます!

=SIGN(INT(A2/SEQUENCE(A2+B2)))

【解説】
何が起きているのか分解してみましょう(A2=5, B2=3 の場合)。

SEQUENCE(8):分母は {1; 2; 3; 4; 5; 6; 7; 8} です。

A2 / SEQUENCE:5を連番で割ります。
{5; 2.5; 1.66; 1.25; 1; 0.83; 0.71; 0.62}

ポイントは、「5番目までは1以上、6番目からは1未満」になることです。

Excelの説明画像

INT(数値):小数点以下を切り捨てて整数にします。

{5; 2; 1; 1; 1; 0; 0; 0}

Excelの説明画像

ここでお目当ての「0」が登場しました!でも「1」の部分がバラバラです。

SIGN(数値):数値が正なら1、負なら-1、0なら0を返す関数です。

正の整数はすべて「1」になり、0は「0」のまま。
結果:{1; 1; 1; 1; 1; 0; 0; 0}

Excelの説明画像

まさに数式の博物館に飾りたい一品ですね。

INT関数なしで、同じ挙動を再現する数式を以下の記事で紹介しています。

数式6:最新のLAMBDAヘルパー (MAKEARRAY)

最新のExcelを使っているなら、これが最も可読性が高く、推奨される書き方です。

=MAKEARRAY(A2+B2, 1, LAMBDA(r,c, (r<=A2)*1))

【解説】

MAKEARRAY(行, 列, LAMBDA):指定したサイズの配列を作り、中身をLAMBDAで計算します。
LAMBDA(r, c, ...):各セルの行番号(r)と列番号(c)を受け取ります。

行番号(r)がA2以下なら1」というルールをそのまま記述できるので、何をしているかが一目瞭然です。

現代Excelのスタンダードと言えるでしょう。

Excelの説明画像

数式7:MAP関数で配列操作

最後に、既存の配列(連番)を加工するなら、MAP関数も強力です。

=MAP(SEQUENCE(A2+B2), LAMBDA(x, (x<=A2)*1))

【解説】

MAP(配列, LAMBDA):配列の各要素に対して処理を行います。

SEQUENCEで作った連番の要素 x に対して、「A2以下か?」を判定して変換しています。

数式2とやっていることは近いですが、より複雑な条件を入れたい時にMAP関数は重宝します。

Excelの説明画像

まとめ:たかが0と1、されど…

今回は「指定した数の1と0を並べる」というテーマで7つの数式を紹介しました。

実務でサクッと使うなら数式2 =(SEQUENCE(...)<=A2)*1 が最も短くておすすめです。

しかし、より可読性を高めるなら数式6(MAKEARRAY)、数学的な美しさを求めるなら数式5と、状況に応じて使い分けるのがExcelマスターへの道です。

このテクニックを使えば、重くなりがちな「OFFSET関数」や「INDIRECT関数」を使わずに動的な範囲指定(集計マスク)が可能になります。

揮発性関数の呪縛から解放され、サクサク動くシートを作るためにも、ぜひ活用してみてください!

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