FILTER関数やVSTACK関数の結果って、条件によって行数がバラバラになりますよね。
そのまま横に並べるとレイアウトが崩れて困った経験はありませんか?
手動で空行を追加してサイズを揃えるのは手間ですし、修正漏れも起きがちです。
EXPAND関数を使えば、配列を好きなサイズに自動で拡張できます。
この記事では、構文・引数の詳細からpad_withの設定、実務で使える応用例、よくあるエラーの対処法まで解説します。
この記事は次のような人におすすめ
- 動的配列の結果を固定サイズに揃えたい
- EXPAND関数の引数やpad_withの使い方を知りたい
- EXPAND関数とDROP関数の違いを整理したい
- EXPAND関数で発生するエラーを解決したい
「Excel関数ってなに?」「よくわからないな」という方は、こちらの記事を先に読んでおくとわかりやすいですよ。
EXPAND関数とは?配列を拡張する動的配列関数
EXPAND関数の読み方
読み方は「エクスパンド関数」です。英語の「Expand(拡張する・広げる)」が由来です。
EXPAND関数では何ができるの?
EXPAND関数は、配列やセル範囲を指定した行数・列数に拡張できる関数です。Microsoft 365で利用できます。
例えば3行2列の表を10行3列に広げたいとき、一発で拡張できます。拡張部分には空白や0など、好きな値を埋められます。
「配列のサイズを揃える」という地味だけど大事な作業を自動化してくれます。
FILTER関数やVSTACK関数と組み合わせると、さらに便利ですよ。
EXPANDという名前のとおり「拡大専用」の関数です。配列を小さくすることはできません。
縮小したい場合はDROP関数を使いましょう。
NOTE
EXPAND関数はMicrosoft 365(Windows / Mac)およびExcel for the webで利用できます。買い切り版のExcel 2019では使用できません。
EXPAND関数の使い方(構文と引数)
EXPAND関数の基本構文
まずはEXPAND関数の基本構文を確認しましょう。
=EXPAND(配列, 行, [列], [pad_with])
EXPAND関数の引数は4つです。必須なのは最初の2つだけです。
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| 配列 | 必須 | 拡張したいセル範囲または配列 |
| 行 | 必須 | 拡張後の総行数(元の行数以上を指定) |
| 列 | 省略可 | 拡張後の総列数(省略時は列方向の拡張なし) |
| pad_with | 省略可 | 拡張部分に埋める値(省略時は#N/A) |
EXPAND関数の引数を詳しく解説
第1引数:配列(必須)
「配列」には、拡張したいセル範囲や配列を指定します。A1:C3のようなセル範囲はもちろん、FILTER関数の結果なども使えます。
第2引数:行(必須)
「行」には、拡張後の総行数を数値で指定します。
元の配列の行数以上の値を指定してください。元の行数より小さい値を指定すると#VALUE!エラーになります。
行方向の拡張が不要な場合は、元の行数と同じ値を指定します。
第3引数:列(省略可)
「列」には、拡張後の総列数を数値で指定します。省略した場合、列方向の拡張は行われません。
行と同様に、元の列数より小さい値は指定できません。
第4引数:pad_with(省略可)— 実務では必ず指定しよう
「pad_with」には、拡張部分に埋める値を指定します。この引数の設定はとても重要です。
省略すると#N/Aが表示されるため、実務では必ず指定しておきましょう。
pad_withの指定によって表示がどう変わるか、以下の表にまとめました。
| pad_withの指定 | 拡張部分の表示 | 備考 |
|---|---|---|
| 省略 | #N/A | エラー値として扱われる |
| “” | 空白表示 | 空文字列(ISBLANKはFALSE) |
| 0 | 0 | 数値のゼロとして扱われる |
| “-“ | – | テキストとして表示される |
pad_withを省略すると、拡張部分の#N/Aが他の数式にも連鎖します。特別な理由がなければ “”(空文字列)か 0 を指定してください。
TIP
pad_withに””を指定したセルは見た目は空白ですが、空文字列が入った状態です。ISBLANK関数で判定するとFALSEが返ります。空白セルとして判定したい場合は、IFERROR関数で別途対処してください。
EXPAND関数の基本的な使い方
ここから実際にEXPAND関数を使ってみましょう。
セル範囲を行方向に拡張する
まずはシンプルに、行方向だけ拡張する例です。A1:B3(3行2列)の表を10行に広げます。
=EXPAND(A1:B3, 10, 2, "")
この式では、元の3行2列のデータはそのまま残り、4行目から10行目までが空白で埋められます。
行と列の両方向に拡張する
行と列の両方を拡張することもできます。A1:B3(3行2列)を5行4列にしてみましょう。
=EXPAND(A1:B3, 5, 4, 0)
元のデータの右側と下側に、0で埋められたセルが追加されます。
列方向だけ拡張する
列方向だけ拡張したい場合、行の引数には元の行数をそのまま指定します。
=EXPAND(A1:B3, 3, 6, "")
行数は3のまま変えず、列数だけ2列から6列に拡張しています。
EXPAND関数の実践的な使い方・応用例
基本を押さえたところで、実務で役立つ応用テクニックを紹介します。
FILTER関数の結果を固定サイズに揃える
FILTER関数の結果は条件に合うデータの件数で行数が変わります。
複数のFILTER結果を横に並べると、行数がバラバラでレイアウトが崩れがちです。
EXPAND関数で結果を固定サイズに揃えましょう。
=EXPAND(FILTER(A2:C100, B2:B100="営業部"), 10, 3, "")
この式では以下の処理を行っています。
- A2:C100のうちB列が「営業部」の行を抽出
- 結果を10行3列に拡張し、足りない分を空白で埋める
こうすれば結果が3件でも8件でも、常に10行分の表示領域を確保できます。
VSTACKで列数が異なるテーブルを結合する
VSTACK関数で列数が異なるテーブルを縦結合すると、不足部分が#N/Aで埋まります。
EXPAND関数で列数を揃えておくと、#N/Aを回避できます。
例えば、A1:B5(2列)とD1:F5(3列)を縦に結合する場合です。
=VSTACK(EXPAND(A1:B5, 5, 3, ""), D1:F5)
A1:B5を3列に拡張してからVSTACKで結合しています。こうすれば不足部分が#N/Aではなく空白で埋まります。
同じ考え方でHSTACK関数を使う場合にも、行数を揃える用途で活用できます。
SEQUENCEと組み合わせて連番付きテンプレートを作る
SEQUENCE関数で連番を生成し、EXPAND関数で入力欄を確保するテクニックです。
=HSTACK(SEQUENCE(20), EXPAND({""}, 20, 3, ""))
この式では以下の処理を行っています。
- SEQUENCE(20)で1〜20の連番を生成
- 空白を20行3列に拡張して入力欄を作成
- HSTACKで連番と入力欄を横に結合
名簿や受付リストなど、連番付きの空テンプレートを素早く作りたいときに便利です。
DROP関数と組み合わせてデータを整形する
DROP関数で不要な行を削除してからEXPAND関数でサイズを揃える、という2段階の整形パターンです。
例えばA1:D20のデータからヘッダー行を除いたうえで、結果を10行4列に固定したい場合です。
=EXPAND(DROP(A1:D20, 1), 10, 4, "")
DROPで先頭1行(ヘッダー)を削除し、EXPANDで10行4列に揃えています。レポートの表サイズを統一したいときに便利です。
EXPAND関数とDROP関数の違い・使い分け
EXPAND関数とDROP関数は配列のサイズを変更する関数です。ただし方向が逆で、「拡大」と「縮小」の対です。
EXPAND関数とDROP関数の比較表
| 比較項目 | EXPAND関数 | DROP関数 |
|---|---|---|
| 機能 | 配列を拡大する | 配列を縮小する |
| 操作の方向 | 行・列を追加 | 先頭/末尾の行・列を削除 |
| 引数の意味 | 拡張後の総行列数を指定 | 削除する行列数を指定 |
| 負の数の指定 | 不可(#VALUE!エラー) | 可(末尾から削除) |
| 追加部分の値 | pad_withで指定可能 | なし(削除のみ) |
| 対応環境 | Microsoft 365 | Microsoft 365 |
DROP・TAKE・EXPANDの3関数比較
EXPAND関数・DROP関数に加えて、TAKE関数を含めた3つの配列操作関数を整理します。
| 関数 | 役割 | 配列サイズの変化 | 代表的な使い方 |
|---|---|---|---|
| EXPAND | 配列を指定サイズに拡大 | 大きくなる | FILTER結果を固定サイズに揃える |
| DROP | 先頭/末尾を削除 | 小さくなる | ヘッダー行の除去 |
| TAKE | 先頭/末尾を取り出す | 小さくなる | 上位N件の取得 |
DROPとTAKEは配列を縮小する点では同じですが、アプローチが逆です。DROPは「不要な部分を捨てる」、TAKEは「必要な部分だけ取る」です。
場面別おすすめの選び方
- 結果のサイズを統一したい → EXPAND関数(不足分を埋めて整形)
- ヘッダー行の除去 → DROP関数(「1行消す」がストレートに伝わる)
- 上位N件だけ取得 → TAKE関数(「N件取る」が直感的)
- ヘッダー除去→サイズ揃え → DROP → EXPAND の組み合わせ
- 中間レコードの抽出 → DROP + TAKE の組み合わせ
よくあるエラーと対処法
EXPAND関数で発生するエラーをまとめました。
| エラー | 主な原因 | 対処法 |
|---|---|---|
| #VALUE! | 元の配列より小さいサイズを指定した | 元のサイズ以上の値を指定する。縮小はDROP関数を使う |
| #VALUE! | 行・列に負の値や小数を指定した | 正の整数のみ指定する |
| #N/A | pad_with引数を省略した | pad_withに””や0を指定する |
| #SPILL! | 出力先のセルにデータがある | スピル先のセルを空にする |
| #NAME? | 未対応のExcelバージョンで使用した | Microsoft 365環境で開き直す |
以下、エラーごとに詳しく解説します。
#VALUE! エラー
EXPAND関数で最もよく見かけるのが#VALUE!エラーです。
原因1:拡張後のサイズが元の配列より小さい
EXPAND関数は拡大専用の関数です。元の配列より小さいサイズを指定するとエラーになります。
=EXPAND(A1:C5, 3, 2, "")
A1:C5(5行3列)を3行2列にしようとしていますが、縮小はできません。縮小したい場合はDROP関数を使いましょう。
原因2:行・列に負の値や小数を指定した
行・列の引数には正の整数のみ指定できます。-5や3.5のような値を入れると#VALUE!エラーになります。
#N/A エラー(pad_with省略時)
pad_with引数を省略すると、拡張部分に#N/Aが表示されます。これは「値が未指定」という仕様上の動作です。
ただし、このセルを参照する他の数式でもエラーが連鎖します。pad_withに””や0を指定して回避しましょう。
=EXPAND(A1:B3, 10, 3, "")
#SPILL! エラー
EXPAND関数の結果が表示される範囲に既存データがあると#SPILL!エラーになります。
スピル先のセルを空にするか、数式の入力位置を移動してください。動的配列関数全般で起きるエラーです。
#NAME? エラー
対応していないExcelで使用すると#NAME?エラーになります。EXPAND関数はMicrosoft 365専用です。サブスクリプション版をお使いか確認してください。
まとめ
この記事では、EXPAND関数の基本的な使い方から実践的な応用例まで解説しました。
ポイントをおさらいしましょう。
- EXPAND関数は配列を指定サイズに拡張する動的配列関数
- pad_with引数で拡張部分の値を指定できる。省略すると#N/Aになるので””や0を指定するのがおすすめ
- FILTER関数と組み合わせれば、抽出結果を固定サイズに揃えられる
- DROP関数は縮小、EXPAND関数は拡大と、役割が正反対
- DROP → EXPAND の順で組み合わせれば、不要行の除去とサイズ統一を一度にできる
- #VALUE!エラーは元の配列より小さいサイズを指定したときに発生する
EXPAND関数は単体では地味に見えますが、他の動的配列関数と組み合わせると本領を発揮します。
まずはFILTER関数の結果を固定サイズに揃えるところから試してみてください。
biz-tacticsではExcel関数の一覧を公開しています。他の関数も知りたい方はぜひ参考にしてください。
関数一覧
biz-tacticsではExcel関数の一覧を3パターンご用意しています。
用途に合わせてお使いください。
各一覧の文字色が青くなっている関数はクリックすると解説ページを開くことができます。
エラー値についてのまとめ記事
関数でエラーが発生した際に表示される、エラーの種類を以下の記事でまとめています。
