はじめに:たかが「0と1」、されど「0と1」。
突然ですが、Excelでこんな配列を作りたいと思ったことはありませんか?
{1; 0; 1; 0; 1; 0; 1; 0; 1; 0}

「えっ、手入力すればいいじゃん」と思いましたか?
いえいえ、この「0と1の繰り返し(フラグ)」を数式で作れるようになると、実務でこんなに便利なことがあるんです。
- 1行おきのデータ抽出: FILTER関数と組み合わせて、奇数行だけを抜き出す。
- 条件付き書式の作成: テーブル機能を使わずに、数式だけで「しましま(ゼブラ)模様」を作る。
- 予算・実績の串刺し計算: 「予算、実績、予算、実績…」と並んだ表で、SUMPRODUCT関数を使って予算だけを合計する。
- 交互の計算: 「入金・出金」のように、プラスとマイナスを繰り返す計算のベースにする。
- ダミーデータの作成: 「A/Bテスト」のような2択のデータを大量に用意する。
今回は、このシンプルな「01配列」を作る方法を、なんと17種類も紹介します!
初心者向けの王道から、SEQUENCE関数を使ったスマートな方法、さらには「なぜそこでその関数を使う!?」というマニアックな方法まで。
まるで「数式の博物館」を見るような気持ちで、楽しんでいってください!
本記事では、無料のWeb版Excelを使用して検証および画像の作成を行っています。Windowsはもちろん、MacやLinuxの方もブラウザさえあれば挑戦できます!
第1章:まずは基本!コピーして使う数式(スピルなし)
関数の詳細な仕様については、Microsoft公式のヘルプも参考にしてください。
はじめに、オートフィルで下にコピーして使うタイプの数式を紹介します。
1. 王道中の王道 (MOD関数)
誰もが最初に思いつく、基本のキです。
=MOD(ROW(),2)
【実用度:★★★★★】【変態度:★☆☆☆☆】
【解説】
はじめに、ROW()で行番号を取得し、次にMOD(..., 2)で2で割った余りを求めます。
すると、奇数行なら「1」、偶数行なら「0」になります。

【注意点】
この数式は「行番号」に依存します。偶数行(A2など)から始めると「0」スタートになってしまいます。
その場合は =MOD(ROW()+1, 2) のように調整しましょう。ROW(A1)と書く方法もありますが、A1セルが行削除されるとエラーになるので、このブログでは推奨しません。
2. 初見殺しの計算式 (べき乗)
しかし、MOD関数を使わずに、数学的に解く方法もあります。
=(-1^ROW()<0)*1
【実用度:★★☆☆☆】【変態度:★★★★☆】
【解説】
「-1のn乗」は、-1, 1, -1, 1… と符号が交互に入れ替わります。
<0 で「マイナスか?」を判定すると、TRUE, FALSE, TRUE… となります。
最後に *1 をすることで、TRUEを1に、FALSEを0に変換しています。シンプルですが奥が深い!

このテクニックは、以下の記事でも紹介しています。
3. 実務でのおすすめ (ISODD関数)
これが一番可読性が高く、おすすめです。
=IF(ISODD(ROW()),1,0)
または、=ISODD(ROW())*1
【実用度:★★★★★】【変態度:★☆☆☆☆】
【解説】ISODDは「奇数ですか?」と聞く関数です。
「3の倍数」などはMOD関数が便利ですが、単に「交互」であれば、専用のISODD(またはISEVEN)を使ったほうが、「何をしているか」が一目で分かりますね。

第2章:場所を選ばない!どこでも「1」から始まる数式
次に、「どの行から書き始めても、必ず先頭が1になる」数式を見ていきましょう。
これは「自分の1つ上のセル」を参照して、値を反転させるテクニックを使います。
4. INDIRECT & ADDRESS (絶対座標)
=IF(IFERROR(INDIRECT(ADDRESS(ROW()-1,COLUMN())),0)=0,1,0)
【実用度:★★☆☆☆】【変態度:★★★☆☆】
【解説】ADDRESS(ROW()-1, COLUMN()) で「一つ上のセル番地」を作り、INDIRECTでその中身を見に行きます。

上が「0」なら「1」に、そうでなければ「0」にします。

1行目などで上がない場合はエラーになるので、IFERRORで処理しています。
※ただし、すぐ上のセルに文字などが入力されていると崩れるので注意!
5. INDIRECT (R1C1形式) ★イチオシ
R1C1形式を知っていると、こんなに短く書けます。
=IF(INDIRECT("r[-1]c",0),0,1)
【実用度:★★★★☆】【変態度:★★★☆☆】
【解説】r[-1]c は「Row -1, Column 同じ」、つまり「すぐ上のセル」という意味です。
これを INDIRECT(..., 0) でR1C1形式として読み込みます。
上のセルが「1(TRUE)」なら「0」に、そうでなければ「1」にします。スイッチのような数式ですね。

※R1C1形式については、過去記事で詳しく解説しています!
6. DELTA関数 (マニアック)
IF関数の代わりに、普段めったに使わないこの関数を使ってみましょう。
=DELTA(INDIRECT("r[-1]c",0),0)
【実用度:★☆☆☆☆】【変態度:★★★★☆】
【解説】DELTA(数値1, 数値2) は、2つの数値が等しい場合に「1」、それ以外は「0」を返す関数です。

「上のセル」と「0」を比較します。
- 上が0なら → 等しいので「1」
- 上が1なら → 異なるので「0」
TRUE/FALSEを経由せず、直接1と0が返ってくるのが気持ちいいですね。

第3章:現代のスタンダード!SEQUENCE関数でスピル
続いて、SEQUENCE関数を使って、一気に10個の「01配列」をスピルさせる方法です。
【スピル(Spill)とは?】
数式を1つのセルに入力するだけで、結果が隣接するセルに「溢れ出して(Spill)」表示される機能のことです。
オートフィルでコピーする必要がないので、非常に効率的です!
7. ビット演算 (BITAND)
=BITAND(SEQUENCE(10),1)
【実用度:★★★☆☆】【変態度:★★★☆☆】
【解説】SEQUENCE(10) で 1, 2, 3… という連番を作ります。

BITAND(..., 1) は、数値を2進数にしたときの「最後の1ビット」が共通しているかを見ます。
奇数は必ず最後が1なので「1」、偶数は0なので「0」。プログラマっぽい解法です。

8. MOD & SEQUENCE (実務推奨)
実務で使うなら、これ一択です!
=MOD(SEQUENCE(10),2)
【実用度:★★★★★】【変態度:★☆☆☆☆】
【解説】
第1章のMOD関数を、SEQUENCEでスピルさせただけです。
誰が見ても「ああ、割り算の余りで交互にしてるんだな」と分かる、可読性No.1の数式です。

9. 三角関数 (COS)
数学の授業を思い出してください。
=CEILING.MATH(COS(SEQUENCE(10,,,PI())))
【実用度:★☆☆☆☆】【変態度:★★★★★】
【解説】
この数式、実は単純に
を作っているわけではありません。
SEQUENCE関数の「開始」を省略しているため、デフォルトの「1」からスタートし、目盛りだけを
ずつ増やしています。
つまり、以下のような「あえて位相をずらした配列」を作っています。
- 1
- 4.14… (
) - 7.28… (
) - …

次に、これを COS に渡すと、
という波が生まれます。

最後に、これを CEILING.MATH で丸めると、正の数(0.54)は切り上がって「1」に、負の数(-0.54)は0の方向に切り上がって「0」になります。

三角関数のズレと丸め誤差を利用して01を作る、まさに狂気の沙汰(褒め言葉)です。
10. 三角関数 (SIN)
=ABS(ROUND(SIN(SEQUENCE(10,,PI()/2,PI()/2)),0))
【実用度:★☆☆☆☆】【変態度:★★★★★】
【解説】
こちらは SIN を使って
(90度) ずつ進めます。
1, 0, -1, 0… という波ができます。

ROUNDで整数にし、ABS(絶対値)をとることで、1, 0, 1, 0… という完璧な配列になります。

11. 2進数変換 (DEC2BIN)
=VALUE(RIGHT(DEC2BIN(SEQUENCE(10))))
【実用度:★☆☆☆☆】【変態度:★★★★★】
【解説】
連番を DEC2BIN で2進数(文字列)に変換します。

1→”1″
2→”10″
3→”11″
4→”100″…
RIGHT(..., 1) で一番右の文字を取ると、見事に 1, 0, 1, 0… になっています!VALUE関数で数値化します。

12. 文字列置換 (SUBSTITUTE)
=ISERR(SUBSTITUTE(SEQUENCE(10)/2,".","a")*0)*1
【実用度:☆☆☆☆☆】【変態度:★★★★★】
【解説】
これぞ変態的発想!
1. 連番を2で割ります。(0.5, 1, 1.5, 2…)

2. SUBSTITUTE で小数点のドット「.」を「a」に置換します。
- 整数(1, 2…)はドットがないのでそのまま(数値)。
- 小数(0.5, 1.5…)は「0a5」のような文字列になります。

3. *0 をして計算を試みます。
- 数値は計算できて「0」に。
- 文字列は計算できず「#VALUE!」エラーに。

4. ISERR でエラーかどうか判定し、最後に1と0に変換します。

第4章:SEQUENCE関数禁止!アイディアの博物館
最後に、「SEQUENCE関数が使えない環境」あるいは「あえて使わない」縛りプレイでの数式を5つ紹介します。
ここまで来れば、あなたも配列マスターです。
13. 行列関数 (MUNIT)
=DROP(VSTACK(TOCOL(MUNIT(3)),0)+VSTACK(0,0,TOCOL(MUNIT(3))),-1)
【実用度:★☆☆☆☆】【変態度:★★★★★】
【解説】MUNIT(3) は「単位行列(対角線だけ1の行列)」を作ります。

これを TOCOL で崩して、VSTACK でズラして足し合わせることで、無理やり 1, 0… のパターンを作り出しています。パズルですね。


14. 統計関数 (LINEST)
=TOCOL(LINEST(1,1,0)*RANDARRAY(5,,1,1,1))
【実用度:★☆☆☆☆】【変態度:★★★★★】
【解説】LINEST 関数は回帰分析に使われますが、引数を工夫すると {1, 0} という配列を返します。

これを RANDARRAY(すべて1の配列)と掛け合わせて行数を増やし、最後に TOCOL で一列に並べています。

15. 度数分布 (FREQUENCY)
当ブログではおなじみのこの関数。
=TOCOL(FREQUENCY(1,1)*EXPAND(1,,5,1),,1)
【実用度:★★☆☆☆】【変態度:★★★★☆】
【解説】FREQUENCY(1,1) は {1; 0} という縦配列を返します。
これを EXPAND で横に拡張して、TOCOL で並べ直すことで、1,0,1,0… を生成しています。

FREQUENCY関数については、以下の記事で詳しく解説しています!
16. 最新のLAMBDAヘルパー (MAKEARRAY)
これは現代のExcelならでは!実務でもおすすめです。
=MAKEARRAY(10,,LAMBDA(r,c,MOD(r,2)))
【実用度:★★★★☆】【変態度:★★☆☆☆】
【解説】MAKEARRAY は、指定したサイズの配列を作成し、各セルの中身を LAMBDA で定義できる関数です。
「行番号(r)を2で割った余り」というルールを直接記述できるので、非常にロジカルで美しいですね。

17. テキスト操作の極み (TEXTSPLIT)
ここでは無駄ですが、このテクニックはあらゆるところで役に立ちます。
=VALUE(TEXTSPLIT(REPT("1,0,",5),,",",1))
【実用度:★★★☆☆】【変態度:★★★☆☆】
【解説】
1. REPT("1,0,", 5) で “1,0,1,0,1,0,1,0,1,0,” という長い文字列を作ります。

2. TEXTSPLIT(..., ",") でカンマを区切り文字として分割し、配列にします。

3. VALUE で文字を数値に変換します。

CSVデータを扱うような感覚で配列を生成する、強力なテクニックです。
まとめ:シンプルだからこそ奥が深い
「MOD関数でいいじゃん」と言われればそれまでですが(笑)、
一つの目的を達成するために、これだけのルートがあるのがExcelの面白いところです。
すなわち、INDIRECTで相対参照を作ったり、TEXTSPLITで文字から配列を作ったりといったテクニックは、もっと複雑な課題にぶつかった時、必ずあなたの助けになります。
ぜひ、気に入った数式で遊んでみてくださいね!





