Excel リストの行間に空白行を自動挿入する4つの方法

Excel リストの行間に空白行を自動挿入する4つの方法 実務の深淵

はじめに:その表、ギュウギュウ詰めになっていませんか?

Excelでリストやシフト表を作っているとき、こんな風に思ったことはありませんか?

「データとデータの間が詰まりすぎてて見にくいなぁ…」
「1行ずつ空白行が入っていれば、もっと見やすくなるのに!」

例えば、こんな社員リストがあったとします。

{"社員01";"社員02";"社員03"...}

これを、手作業で行を挿入するのではなく、数式一発でこんな風に変換できたら最高ですよね?

{"社員01";"";"社員02";"";"社員03"...}

Excelの説明画像

これは、シフト表のガントチャートを見やすくしたり、印刷用の帳票を整えたりする時に、地味ながら絶大な効果を発揮するテクニックです。

※空白行を入れている例(下の画像)

Excelの説明画像

今回は、この配列の間に空白を差し込むというミッションに、3つのアプローチで挑戦します。

「たかが空白、されど空白

このパズルが解けたとき、Excelの配列操作をまた一つ深く理解しているはずです!

上記の、ガントチャートを使用したシフト表の作成については、
Excelでバーが伸びるシフト表を作る方法にて紹介しています!

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

準備:テストデータ(行間のない配列)

まずは準備です。まっさらなシートのA1セルを起点に、以下のリストを作成してください。

※以下の数式をA1セルに貼り付けます!

={"社員01";"社員02";"社員03";"社員04";"社員05";"社員06"}

Excelの説明画像

まずはこの「空白のないデータ」を使って、行間にきれいに空白を挿入できるか試していきます。

そして後半では、あえて「元データに空白が含まれている場合」の挙動も検証しますよ!

Excelの説明画像

アプローチ1:TOCOL & HSTACK(横に付けて縦にする)

考えかた

まずは、最も直感的な方法です。

元のデータの「右隣」に空白(ダミーデータ)をくっつけて、それを「縦一列」に並べ直せば、データ→空白→データ…という順序になりますよね?

Excelの説明画像

数式と解説

=LET(
, A1:A6,
行数, ROWS(),
並び, TOCOL(HSTACK(, SEQUENCE(行数)*0)),
, IF(並び=0, "", 並び),
DROP(, -1)
)

【関数の解説】
LET(名前1, 値1, 名前2, 値2, ..., 計算式):数式内で変数を使えるようにして、見やすくする関数です。
ROWS(範囲):範囲内の行数を返します。
HSTACK(配列1, 配列2):配列を横方向(水平)に連結します。
SEQUENCE(行, [列], [開始], [目盛り]):連番を作成します。
TOCOL(配列):多次元配列を縦一列の配列に変換します。
DROP(配列, 行数):配列の先頭または末尾から指定した行数を削除します。

【ロジックの分解】

並びTOCOL(HSTACK(元,SEQUENCE(行数)*0))

まず、SEQUENCE(6)*0 で「0」が6個並んだ縦配列を作ります。
これを元のデータの右に結合します。

Excelの説明画像

{"社員01", 0; "社員02", 0; ...} という2列のデータができます。

これを TOCOL で縦一列にすると、{"社員01"; 0; "社員02"; 0; ...} となります。

Excelの説明画像

IF(並び=0, "", 並び)

ダミーとして入れた「0」を、本物の「空白(””)」に変換します。

Excelの説明画像

DROP(..., -1)

このままだと、一番最後にも空白(0から変換されたもの)がついてしまいます。

今回のルールは「最後には入れない」なので、DROP関数で末尾の1行を削除して完成です!

Excelの説明画像

ここまでのロジックをLET関数で整理します。

Excelの説明画像

検証:元データに「空白」があったら?

では、意地悪な検証をしてみましょう。

A3セルの「社員03」を消して、元データ自体に空白を作ってみてください。

={"社員01";"社員02";"";"社員04";"社員05";"社員06"}

結果はどうなりましたか?

{"社員01";"";"社員02";"";"";"";"社員04"...}

Excelの説明画像

お見事!

「社員02」の下の挿入された空白行と、「社員04」の上の挿入された空白行の間に、元々のA3セルの空白もしっかり反映されています。

IF(並び=0, "", ...) の処理により、ダミーの0も、元データの空白(Excelでは0として扱われることが多い)も、まとめて「””」に変換されるため、破綻することなく動作するのです。


アプローチ2:INDEX & SEQUENCE(計算で場所を指定)

考えかた

次は、数学的なアプローチです。

新しい配列の「奇数番目」にはデータを、「偶数番目」には空白を入れる、というルールを数式で作ります。

数式と解説

=LET(
, A1:A6,
行数, ROWS(),
並び, SEQUENCE(行数*2-1),
, INDEX(, (並び+1)/2),
IF(MOD(並び, 2)=1, IF(="", "", ), "")
)

【関数の解説】
INDEX(範囲, 行番号):指定した位置のデータを取り出します。
MOD(数値, 除数):割り算の余りを求めます。

【ロジックの分解】

並びSEQUENCE(行数*2-1)

最終的な行数は「元の行数 × 2 – 1」になります(間の数なので)。

1から11までの連番を作ります。

INDEX(元, (並び+1)/2)

ここがポイント!連番を加工して、参照したい行番号を作ります。

  • 1番目 → (1+1)/2 = 1 → 1行目
  • 2番目 → (2+1)/2 = 1.51行目(INDEXは小数を切り捨てます!
  • 3番目 → (3+1)/2 = 2 → 2行目

これで、{"社員01"; "社員01"; "社員02"; "社員02"...} という、同じデータが2回ずつ続く配列が仮想的に作られます。

Excelの説明画像

IF(MOD(並び, 2)=1, ...)

「奇数番目(1, 3, 5…)」ならデータを表示し、「偶数番目(2, 4, 6…)」なら空白にします。

これで、ダブっていたデータの片方が空白に変わり、目的の配列が完成します!

Excelの説明画像

古いExcel(2019以前)で再現する数式

LET関数もSEQUENCE関数も使えない!

そんな環境でも諦めないでください。

先ほどのロジックを、昔ながらの関数だけで書き換えてみましょう。

=IF(MOD(ROW(INDIRECT("A1:A"&ROWS(A1:A6)*2-1)),2)=0,"",IF(
INDEX(A1:A6,(ROW(INDIRECT("A1:A"&ROWS(A1:A6)*2-1))+1)/2)="","",
INDEX(A1:A6,(ROW(INDIRECT("A1:A"&ROWS(A1:A6)*2-1))+1)/2)))

長い!
ですが、やっていることは同じです。

SEQUENCE(行数*2-1) の代わりに ROW(INDIRECT("A1:A" & 行数*2-1)) を使って連番を作っています。
・変数が使えないので、同じ計算式(INDEXなど)を何度も書いています。

Excel 2019以前をお使いの方は、範囲を選択して数式を入力し、Ctrl + Shift + Enter で「配列数式」として確定してください。

Excel 2021以降、またはWeb版Excelなら、そのまま入力するだけでスピルして表示されます!

Excelの説明画像

アプローチ3:REDUCE & VSTACK(積み上げ方式)

考えかた

最後は、プログラミング的な「ループ処理」の発想です。

データを上から順番に取り出し、「今までのデータの下に、『新しいデータ』と『空白』を積む」という作業を繰り返します。

数式と解説

=LET(
, A1:A6,
配列, REDUCE("", , LAMBDA(累積, , VSTACK(累積, IF(="", "", ), ""))),
DROP(DROP(配列, 1), -1)
)

【関数の解説】

REDUCE(初期値, 配列, LAMBDA(累積, 変数, 計算式)):配列の要素を一つずつ取り出し、累積して計算します。
VSTACK(配列1, 配列2):配列を縦方向(垂直)に連結します。

【ロジックの分解】

REDUCE & VSTACK

初期値「””」からスタートし、各データが来るたびに VSTACK(累積, データ, "") を実行します。

つまり、「これまでの束」の下に「データ」を置き、さらにその下に「空白」を置く、というサンドイッチを積み重ねていきます。

Excelの説明画像

DROP(DROP(配列, 1), -1)

この方法だと、スタート時の初期値「””」が先頭に残り、各ループの最後につけた「””」が末尾に残ってしまいます。

そこで、DROP(..., 1) で先頭の1行を消し、DROP(..., -1) で末尾の1行を消すことで、形を整えています。

Excelの説明画像

【注意点】
このREDUCEを使った方法は非常に強力ですが、元の配列にエラー値(#N/Aなど)が含まれていると、数式全体がエラーになってしまいます。
エラーが含まれる可能性がある場合は、アプローチ1か2がおすすめです。

Excelの説明画像

応用編:2次元配列(複数列)でもできる?

「名前」の隣に「ID」があるような、2列以上のデータでも同じことができるでしょうか?

アプローチ2(INDEX & SEQUENCE)を少し改造すれば、簡単に対応できます!

A1:B6に以下のデータがあるとします。

{"社員01","A123";"","";"社員02","A456";"","";"社員03","A789";"","";"社員04","B123";"","";"社員05","B456";"","";"社員06","B789"}

Excelの説明画像

以下の数式で2列の配列に対応できます!

=LET(
, A1:B6,
行数, ROWS(),
並び, SEQUENCE(行数*2-1),
, INDEX(, (並び+1)/2, {1,2}),
IF(MOD(並び, 2)=1, IF(="", "", ), {"", ""})
)

【変更点】

1. INDEX(..., {1,2}):列番号を {1, 2} と配列で指定することで、1列目と2列目の両方を同時に取得します。
2. {"", ""}:空白を挿入する際、1列だけの "" ではなく、2列分の空白 {"", ""} を指定します。

これで、2列のデータも綺麗に行間を空けて表示されましたね!

Excelの説明画像

3列、4列と増えても、{1,2,3}{"","",""} の部分を増やすだけで対応可能です。

もちろん、空白やエラー値があっても問題なく動作します。

まとめ:空白でデザイン力アップ!

この技術は、単なる暇つぶしではありません。

実務でも以下のようなシーンで大活躍します。

  • 印刷用リストの作成:行間に空白を入れることで、手書きでメモを書き込めるスペースを作れます。
  • ガントチャートの視認性向上:バーチャートが密集していると見づらいですが、1行空けるだけで劇的に見やすくなります。
  • ダッシュボードのデザイン:データをブロックごとに分けたい時、数式だけでレイアウトを調整できます。
  • CSV出力前の整形:システム連携などで「データ区切り行」が必要な場合にも対応できます。

「データを加工する」だけでなく、「データの見せ方を整える」のも、Excel関数の重要な役割です。
ぜひ、あなたのシートにも「余裕のある空白」を取り入れて、ワンランク上の資料を作ってみてくださいね!

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