今回は、ExcelのEXPAND関数を使って、配列の拡張を行う方法を紹介します。
EXPAND関数は、セル範囲や数式の結果(配列)を、指定した行数・列数まで広げる関数です。広げた部分には好きな値を埋め込めるため、「表の大きさを一定にそろえたい」「別の表と列数を合わせてから結合したい」といった場面で役立ちます。
EXPAND関数を使えるのは、Microsoftのサポート情報で対象として示されているMicrosoft 365のExcel(Windows版・Mac版)とExcel 2024(Windows版・Mac版)です。Excel 2021以前の買い切り版では使えないため、ファイルを共有する相手の環境にも注意してください。この記事の操作はWindows版を前提にしていますが、関数の書き方は共通です。
EXPAND関数の基本
構文と引数
EXPAND関数の書式は次のとおりです。
=EXPAND(配列, 行数, [列数], [埋め込む値])
- 配列:広げたい元の配列やセル範囲を指定します。
- 行数:広げたあとの行数を指定します。省略したり空にしたりすると、元の配列の行数のままになります。
- 列数:広げたあとの列数を指定します(省略可)。省略または空の場合は、元の配列の列数のままです。
- 埋め込む値:広げた部分に入れる値を指定します(省略可)。省略すると、広げた部分には#N/Aが表示されます。
結果は「スピル」と呼ばれる動作で、数式を入力したセルから右下方向へ自動的に広がって表示されます。表示先のセルに別の値が入っていると結果を表示できないため、数式を入れる前に周囲を空けておきます。
簡単な例で動きを確かめる
A2:B3に次のような2行2列のデータがあるとします。
- A2:1、B2:2
- A3:3、B3:4
別のセルに次の数式を入力します。
=EXPAND(A2:B3,3,3)
すると、2行2列のデータが3行3列に広がり、追加された3列目と3行目には#N/Aが表示されます。
次に、埋め込む値を指定してみます。
=EXPAND(A2:B3,3,3,”-“)
今度は、広げた部分に「-」が入ります。見た目を整えたいときは、埋め込む値に空の文字列「””」や「0」を指定すると扱いやすくなります。
エラーになるケース
EXPAND関数は「広げる」ための関数なので、元の配列より小さいサイズは指定できません。
- 行数や列数に、元の配列より小さい数を指定すると#VALUE!エラーになります。
- 埋め込む値を省略すると、広げた部分のセルが#N/Aになります(数式自体のエラーではなく、仕様どおりの表示です)。
- 指定したサイズが大きすぎる場合は#NUM!エラーになります。
「縮める」処理が必要な場合は、TAKE関数やDROP関数など、行や列を取り出す・除く関数と使い分けると整理しやすくなります。
EXPAND関数の実用的な使い方
列数の違う表をVSTACK関数で結合する前にそろえる
複数の表を縦につなげるVSTACK関数では、列数が少ない表があると、足りない列に#N/Aが表示されます。そこで、列数の少ない表をEXPAND関数であらかじめ広げておくと、結合後の表をすっきり見せられます。
たとえば、A2:D5(4列)の表と、F2:H4(3列)の表を縦につなげたい場合は、次のように書きます。
=VSTACK(A2:D5,EXPAND(F2:H4,,4,””))
2つ目の引数(行数)を空にしているため、行数は元のまま、列数だけが4列に広がります。追加された列には空の文字列が入るので、#N/Aは表示されません。
この「行数を空にして列数だけ指定する」書き方は、EXPAND関数をほかの関数と組み合わせるときによく使うパターンです。
表の下に空行を足して入力欄を確保する
集計表や一覧表の下に、手入力用の余白を一定数だけ付けたいことがあります。ROWS関数で元の行数を数え、それに足したい行数を加えて指定すると、元の表の大きさが変わっても自動で対応できます。
=EXPAND(A2:C10,ROWS(A2:C10)+3,,””)
この数式では、A2:C10の下に3行分の空欄が追加された状態で表示されます。元の範囲を変更したときも、ROWS関数が行数を数え直すため、数式の数字を書き換える必要がありません。
抽出結果を決まった行数の枠に収める
FILTER関数などで抽出した結果は、条件によって行数が変わります。印刷用の帳票やレイアウトが決まった資料では、行数が変わると罫線や下の表とのバランスが崩れがちです。
このような場合は、抽出結果をEXPAND関数で包み、行数を固定します。
=EXPAND(FILTER(A2:C100,B2:B100=”東京”),10,,””)
抽出結果が10行未満なら、残りの行が空欄で埋まり、常に10行分の大きさで表示されます。
ただし、抽出結果が指定した行数より多くなると#VALUE!エラーになります。データ量の上限を見込んで行数を決めるか、TAKE関数で先に件数を絞ってからEXPAND関数に渡すと安定します。
=EXPAND(TAKE(FILTER(A2:C100,B2:B100=”東京”),10),10,,””)
埋め込む値を目的に合わせて選ぶ
埋め込む値は、結果を何に使うかで選び分けると便利です。
- “”(空の文字列):見た目を空欄にしたいときに向いています。ただし、セルは完全な空白ではなく文字列として扱われる点に注意します。
- 0:あとで合計や平均などの計算に使う場合に向いています。
- “未入力”などの文字:埋めた部分であることを明示したいときに使えます。
- 省略(#N/A):埋めた部分をあえてエラー表示にして、後続の処理で区別したいときに使えます。
使うときのコツと注意点
- スピル先を空けておく:結果が表示される範囲にデータがあると、#SPILL!エラーになります。行数・列数を大きく指定する場合は、周囲のセルの状況を確認してから入力します。
- 元の配列より小さくしない:行数・列数には元の配列以上の数を指定します。サイズを減らしたいときはTAKE関数やDROP関数を使います。
- 行数・列数は数式で指定できる:ROWS関数やCOLUMNS関数を組み合わせると、元データの大きさに合わせて自動で広げられます。
- 共有相手の環境を確認する:EXPAND関数に対応していないバージョンでファイルを開くと、正しく計算されません。社外や他部署とやり取りする場合は、相手のExcelのバージョンも意識します。
まとめ
EXPAND関数は、配列やセル範囲を指定した行数・列数まで広げ、空いた部分を好きな値で埋める関数です。単体で使うよりも、VSTACK関数やFILTER関数などの動的配列関数と組み合わせたときに効果を発揮します。
- 書式は=EXPAND(配列, 行数, [列数], [埋め込む値])で、埋め込む値を省略すると#N/Aになる
- 行数を空にすれば、列数だけを広げられる
- VSTACK関数で列数の違う表を結合する前に、列数をそろえるのに使える
- FILTER関数の結果を一定の行数の枠に収められる(行数を超えると#VALUE!)
- 使えるのはMicrosoft 365のExcelとExcel 2024
表の形をそろえる作業を数式で自動化できるため、レイアウトの決まった資料や、複数の表をまとめる作業を効率化したいときに取り入れてみてください。