Excelで「0と1」を交互に繰り返す17の数式!MOD関数から変態的配列操作まで

Excelで「0と1」を交互に繰り返す17の数式!MOD関数から変態的配列操作まで 実務の深淵

はじめに:たかが「0と1」、されど「0と1」。

突然ですが、Excelでこんな配列を作りたいと思ったことはありませんか?

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

Excelの説明画像

「えっ、手入力すればいいじゃん」と思いましたか?

いえいえ、この「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」になります。

Excelの説明画像

【注意点】
この数式は「行番号」に依存します。偶数行(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に変換しています。シンプルですが奥が深い!

Excelの説明画像

このテクニックは、以下の記事でも紹介しています。

3. 実務でのおすすめ (ISODD関数)

これが一番可読性が高く、おすすめです。

=IF(ISODD(ROW()),1,0)
または、
=ISODD(ROW())*1

【実用度:★★★★★】【変態度:★☆☆☆☆】

【解説】
ISODDは「奇数ですか?」と聞く関数です。

「3の倍数」などはMOD関数が便利ですが、単に「交互」であれば、専用のISODD(またはISEVEN)を使ったほうが、「何をしているか」が一目で分かりますね。

Excelの説明画像

第2章:場所を選ばない!どこでも「1」から始まる数式

次に、「どの行から書き始めても、必ず先頭が1になる」数式を見ていきましょう。

これは「自分の1つ上のセル」を参照して、値を反転させるテクニックを使います。

4. INDIRECT & ADDRESS (絶対座標)

=IF(IFERROR(INDIRECT(ADDRESS(ROW()-1,COLUMN())),0)=0,1,0)

【実用度:★★☆☆☆】【変態度:★★★☆☆】

【解説】
ADDRESS(ROW()-1, COLUMN()) で「一つ上のセル番地」を作り、INDIRECTでその中身を見に行きます。

Excelの説明画像

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

Excelの説明画像

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」にします。スイッチのような数式ですね。

Excelの説明画像

※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が返ってくるのが気持ちいいですね。

Excelの説明画像

第3章:現代のスタンダード!SEQUENCE関数でスピル

続いて、SEQUENCE関数を使って、一気に10個の「01配列」をスピルさせる方法です。

【スピル(Spill)とは?】
数式を1つのセルに入力するだけで、結果が隣接するセルに「溢れ出して(Spill)」表示される機能のことです。
オートフィルでコピーする必要がないので、非常に効率的です!

7. ビット演算 (BITAND)

=BITAND(SEQUENCE(10),1)

【実用度:★★★☆☆】【変態度:★★★☆☆】

【解説】
SEQUENCE(10) で 1, 2, 3… という連番を作ります。

Excelの説明画像

BITAND(..., 1) は、数値を2進数にしたときの「最後の1ビット」が共通しているかを見ます。

奇数は必ず最後が1なので「1」、偶数は0なので「0」。プログラマっぽい解法です。

Excelの説明画像

8. MOD & SEQUENCE (実務推奨)

実務で使うなら、これ一択です!

=MOD(SEQUENCE(10),2)

【実用度:★★★★★】【変態度:★☆☆☆☆】

【解説】
第1章のMOD関数を、SEQUENCEでスピルさせただけです。

誰が見ても「ああ、割り算の余りで交互にしてるんだな」と分かる、可読性No.1の数式です。

Excelの説明画像

9. 三角関数 (COS)

数学の授業を思い出してください。

=CEILING.MATH(COS(SEQUENCE(10,,,PI())))

【実用度:★☆☆☆☆】【変態度:★★★★★】

【解説】
この数式、実は単純に \pi, 2\pi, 3\pi... を作っているわけではありません。

SEQUENCE関数の「開始」を省略しているため、デフォルトの「1」からスタートし、目盛りだけを \pi ずつ増やしています。

つまり、以下のような「あえて位相をずらした配列」を作っています。

  • 1
  • 4.14… (1+\pi)
  • 7.28… (1+2\pi)
Excelの説明画像

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

Excelの説明画像

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

Excelの説明画像

三角関数のズレと丸め誤差を利用して01を作る、まさに狂気の沙汰(褒め言葉)です。

10. 三角関数 (SIN)

=ABS(ROUND(SIN(SEQUENCE(10,,PI()/2,PI()/2)),0))

【実用度:★☆☆☆☆】【変態度:★★★★★】

【解説】
こちらは SIN を使って \pi/2 (90度) ずつ進めます。

1, 0, -1, 0… という波ができます。

Excelの説明画像

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

Excelの説明画像

11. 2進数変換 (DEC2BIN)

=VALUE(RIGHT(DEC2BIN(SEQUENCE(10))))

【実用度:★☆☆☆☆】【変態度:★★★★★】

【解説】
連番を DEC2BIN2進数(文字列)に変換します。

Excelの説明画像

1→”1″
2→”10″
3→”11″
4→”100″…

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

Excelの説明画像

12. 文字列置換 (SUBSTITUTE)

=ISERR(SUBSTITUTE(SEQUENCE(10)/2,".","a")*0)*1

【実用度:☆☆☆☆☆】【変態度:★★★★★】

【解説】
これぞ変態的発想!
1. 連番を2で割ります。(0.5, 1, 1.5, 2…)

Excelの説明画像

2. SUBSTITUTE で小数点のドット「.」を「a」に置換します。

  • 整数(1, 2…)はドットがないのでそのまま(数値)。
  • 小数(0.5, 1.5…)は「0a5」のような文字列になります。
Excelの説明画像

3. *0 をして計算を試みます。

  • 数値は計算できて「0」に。
  • 文字列は計算できず「#VALUE!」エラーに。
Excelの説明画像

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

Excelの説明画像

第4章:SEQUENCE関数禁止!アイディアの博物館

最後に、「SEQUENCE関数が使えない環境」あるいは「あえて使わない」縛りプレイでの数式を5つ紹介します。

ここまで来れば、あなたも配列マスターです。

13. 行列関数 (MUNIT)

=DROP(VSTACK(TOCOL(MUNIT(3)),0)+VSTACK(0,0,TOCOL(MUNIT(3))),-1)

【実用度:★☆☆☆☆】【変態度:★★★★★】

【解説】
MUNIT(3) は「単位行列(対角線だけ1の行列)」を作ります。

Excelの説明画像

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

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

14. 統計関数 (LINEST)

=TOCOL(LINEST(1,1,0)*RANDARRAY(5,,1,1,1))

【実用度:★☆☆☆☆】【変態度:★★★★★】

【解説】
LINEST 関数は回帰分析に使われますが、引数を工夫すると {1, 0} という配列を返します。

Excelの説明画像

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

Excelの説明画像

15. 度数分布 (FREQUENCY)

当ブログではおなじみのこの関数。

=TOCOL(FREQUENCY(1,1)*EXPAND(1,,5,1),,1)

【実用度:★★☆☆☆】【変態度:★★★★☆】

【解説】
FREQUENCY(1,1){1; 0} という縦配列を返します。

これを EXPAND で横に拡張して、TOCOL で並べ直すことで、1,0,1,0… を生成しています。

Excelの説明画像

FREQUENCY関数については、以下の記事で詳しく解説しています!

16. 最新のLAMBDAヘルパー (MAKEARRAY)

これは現代のExcelならでは!実務でもおすすめです。

=MAKEARRAY(10,,LAMBDA(r,c,MOD(r,2)))

【実用度:★★★★☆】【変態度:★★☆☆☆】

【解説】
MAKEARRAY は、指定したサイズの配列を作成し、各セルの中身を LAMBDA で定義できる関数です。

「行番号(r)を2で割った余り」というルールを直接記述できるので、非常にロジカルで美しいですね。

Excelの説明画像

17. テキスト操作の極み (TEXTSPLIT)

ここでは無駄ですが、このテクニックはあらゆるところで役に立ちます。

=VALUE(TEXTSPLIT(REPT("1,0,",5),,",",1))

【実用度:★★★☆☆】【変態度:★★★☆☆】

【解説】
1. REPT("1,0,", 5) で “1,0,1,0,1,0,1,0,1,0,” という長い文字列を作ります。

Excelの説明画像

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

Excelの説明画像

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

Excelの説明画像

CSVデータを扱うような感覚で配列を生成する、強力なテクニックです。

まとめ:シンプルだからこそ奥が深い

「MOD関数でいいじゃん」と言われればそれまでですが(笑)、
一つの目的を達成するために、これだけのルートがあるのがExcelの面白いところです。

すなわち、INDIRECTで相対参照を作ったり、TEXTSPLITで文字から配列を作ったりといったテクニックは、もっと複雑な課題にぶつかった時、必ずあなたの助けになります。

ぜひ、気に入った数式で遊んでみてくださいね!

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