はじめに:1と0のブロックを自由に操ろう!
今回は、Excelでちょっと不思議な配列を作ってみましょう。
やりたいことは非常にシンプルです。
「1」を指定した数だけ並べて、その後に「0」を指定した数だけ並べたい!
例えば、「1」を5個、「0」を3個 と指定したら、以下のような配列を一瞬で作る数式です。
={1; 1; 1; 1; 1; 0; 0; 0}

「えっ、手入力すればいいじゃん」と思いましたか?
しかし、数式で作ることには絶大なメリットがあります。
それは、「個数の数値を書き換えるだけで、一瞬で配列が伸び縮みする」ということです。
手作業でコピペする必要はありません。数字を変えれば、グラフも集計範囲も自動で追従する。
これが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)

【今回のルール(前提条件)】
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」以下かどうかを判定します。5+3) <= A2
{TRUE; TRUE; TRUE; TRUE; TRUE; FALSE; FALSE; FALSE} になります。

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

SEQUENCE関数が使えないバージョンのExcelをお使いの方は以下の記事で代替数式を紹介しています。
数式2:IFを省略したブール演算
次に、Excel慣れしている人はこちらを使います。IF関数は実は不要なんです。
=(SEQUENCE(A2+B2)<=A2)*1
【解説】
Excelでは、計算式の中で論理値(TRUE/FALSE)に数値を掛けると、自動的に変換される仕組みがあります。
つまり、以下のように処理されます。
- TRUE × 1 = 1
- FALSE × 1 = 0
これを利用すれば、数式がグッと短くなりますね!

第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” という文字列を作ります。

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

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

【注意】文字数の壁
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," というカンマ付きの文字列を作ります。

これを TEXTSPLIT で行方向(第3引数)に分割します。
最後のカンマの後ろに空文字ができるのを防ぐため、第4引数(空白無視)を「1」に設定するのがコツです。

第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未満」になることです。

INT(数値):小数点以下を切り捨てて整数にします。
{5; 2; 1; 1; 1; 0; 0; 0}

ここでお目当ての「0」が登場しました!でも「1」の部分がバラバラです。
SIGN(数値):数値が正なら1、負なら-1、0なら0を返す関数です。
正の整数はすべて「1」になり、0は「0」のまま。
結果:{1; 1; 1; 1; 1; 0; 0; 0}

まさに数式の博物館に飾りたい一品ですね。
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のスタンダードと言えるでしょう。

数式7:MAP関数で配列操作
最後に、既存の配列(連番)を加工するなら、MAP関数も強力です。
=MAP(SEQUENCE(A2+B2), LAMBDA(x, (x<=A2)*1))
【解説】
MAP(配列, LAMBDA):配列の各要素に対して処理を行います。
SEQUENCEで作った連番の要素 x に対して、「A2以下か?」を判定して変換しています。
数式2とやっていることは近いですが、より複雑な条件を入れたい時にMAP関数は重宝します。

まとめ:たかが0と1、されど…
今回は「指定した数の1と0を並べる」というテーマで7つの数式を紹介しました。
実務でサクッと使うなら数式2 =(SEQUENCE(...)<=A2)*1 が最も短くておすすめです。
しかし、より可読性を高めるなら数式6(MAKEARRAY)、数学的な美しさを求めるなら数式5と、状況に応じて使い分けるのがExcelマスターへの道です。
このテクニックを使えば、重くなりがちな「OFFSET関数」や「INDIRECT関数」を使わずに動的な範囲指定(集計マスク)が可能になります。
揮発性関数の呪縛から解放され、サクサク動くシートを作るためにも、ぜひ活用してみてください!



