FILTER関数やVSTACK関数の結果って、条件によって行数がバラバラになりますよね。そのまま横に並べるとレイアウトが崩れて困ることもあるはずです。
EXPAND関数を使えば、配列を指定したサイズに自動で拡張できます。不足分には好きな値を埋められるので、サイズの違う結果をきれいに揃えられますよ。
この記事では、EXPAND関数の基本的な使い方から実務活用パターンまでまとめて紹介します。DROP・TAKE関数との違いも整理していますよ。
スプレッドシートのEXPAND関数とは?
EXPAND関数(読み方: エクスパンド関数)は、配列やセル範囲を指定した行数・列数に拡張する関数です。「Expand(拡張する・広げる)」が名前の由来です。
たとえば、3行2列の表を10行3列に広げたいとき、一発で拡張できます。拡張部分には空白や0など、好きな値を埋められますよ。
EXPAND関数にできることをまとめると、次のとおりです。
- 配列を指定した行数に拡張する
- 列方向の拡張もできる(第3引数を使用)
- 行と列を同時に拡張することもできる
- 拡張部分に埋める値を自由に指定できる(第4引数)
EXPANDという名前のとおり「拡大専用」の関数です。配列を小さくすることはできません。縮小したい場合はDROP関数を使いましょう。
NOTE
EXPAND関数はGoogleスプレッドシート独自の関数ではなく、ExcelのMicrosoft 365やExcel 2024でも使用できます。ただし、Excel 2021以前のバージョンでは使えません。
EXPAND関数の基本構文
=EXPAND(配列, 行, [列], [pad_with])
カッコの中に、対象の範囲と拡張後のサイズを指定します。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 配列 | 必須 | 拡張したいセル範囲または配列 |
| 行 | 必須 | 拡張後の総行数(元の行数以上を指定) |
| 列 | 任意 | 拡張後の総列数(省略時は列方向の拡張なし) |
| pad_with | 任意 | 拡張部分に埋める値(省略時は#N/A) |
第2引数(行)と第3引数(列)には、元の配列のサイズ以上の値を指定します。元のサイズより小さい値を指定すると#VALUE!エラーになるので注意してくださいね。
第4引数(pad_with)は省略すると拡張部分に#N/Aが表示されます。実務では””(空文字列)か0を指定しておくのがおすすめです。
EXPAND関数の基本的な使い方
ここでは、売上データを使ってEXPAND関数で配列を拡張する例を紹介します。
サンプルデータ
A1:C4に以下のデータが入っているとします。
| A | B | C | |
|---|---|---|---|
| 1 | 担当者 | 商品 | 売上 |
| 2 | 佐藤 | 商品A | 50,000 |
| 3 | 田中 | 商品B | 30,000 |
| 4 | 鈴木 | 商品C | 45,000 |
行方向に拡張する
3行のデータ部分を8行に拡張してみましょう。出力先のセル(たとえばE1)に以下の数式を入力します。
=EXPAND(A1:C4, 8, 3, "")
| E | F | G | |
|---|---|---|---|
| 1 | 担当者 | 商品 | 売上 |
| 2 | 佐藤 | 商品A | 50,000 |
| 3 | 田中 | 商品B | 30,000 |
| 4 | 鈴木 | 商品C | 45,000 |
| 5 | |||
| 6 | |||
| 7 | |||
| 8 |
元の4行3列を8行3列に拡張しました。5行目以降は空白で埋められています。pad_withに””を指定したので、見た目はスッキリですね。
行と列の両方向に拡張する
行と列を同時に拡張することもできます。A1:C4(4行3列)を6行5列にしてみましょう。
=EXPAND(A1:C4, 6, 5, 0)
元のデータの右側と下側に、0で埋められたセルが追加されます。pad_withに0を指定したので、拡張部分にはすべて0が入ります。
列方向だけ拡張する
列方向だけ拡張したい場合は、行の引数に元の行数をそのまま指定します。
=EXPAND(A1:C4, 4, 6, "")
行数は4のまま変えず、列数だけ3列から6列に拡張しています。
pad_withの指定による違い
pad_with引数の設定で、拡張部分の表示が変わります。
| pad_withの指定 | 拡張部分の表示 | 備考 |
|---|---|---|
| 省略 | #N/A | エラー値として扱われる |
| “” | 空白表示 | 空文字列(ISBLANKはFALSE) |
| 0 | 0 | 数値のゼロとして扱われる |
| “-“ | – | テキストとして表示される |
pad_withを省略すると、拡張部分の#N/Aが他の数式にも連鎖します。特別な理由がなければ””か0を指定してください。
TIP
pad_withに””を指定したセルは見た目は空白ですが、空文字列が入っています。ISBLANK関数で判定するとFALSEが返る点に注意してくださいね。
EXPAND関数の実務活用パターン
パターン1: FILTER結果を固定サイズに揃える
FILTER関数の結果は、条件に合うデータの件数で行数が変わります。複数のFILTER結果を横に並べると行数がバラバラでレイアウトが崩れがちです。
EXPAND関数で結果を固定サイズに揃えましょう。
=EXPAND(FILTER(A2:C100, B2:B100="営業部"), 10, 3, "")
FILTER関数の結果をそのままEXPANDに渡して、10行3列に拡張しています。結果が3件でも8件でも、常に10行分の表示領域を確保できますよ。
パターン2: VSTACKで列数が異なるテーブルを結合する
VSTACK関数で列数が異なるテーブルを縦結合すると、不足部分がエラーになることがあります。
EXPAND関数で列数を揃えてから結合しましょう。
=VSTACK(EXPAND(A1:B5, 5, 3, ""), D1:F5)
A1:B5(2列)を3列に拡張してからVSTACKで結合しています。不足部分が空白で埋まるので、きれいな一覧表が完成しますよ。
パターン3: DROP + EXPANDでヘッダー除去とサイズ統一を同時に行う
DROP関数で不要な行を削除してから、EXPAND関数でサイズを揃える2段階の整形パターンです。
=EXPAND(DROP(A1:D20, 1), 10, 4, "")
DROPで先頭1行(ヘッダー)を削除し、EXPANDで10行4列に揃えています。レポートの表サイズを統一したいときに便利です。
パターン4: HSTACKで行数が異なるテーブルを横結合する
HSTACK関数で行数が異なるテーブルを横に結合するときも、EXPAND関数で行数を揃えてから結合できます。
=HSTACK(EXPAND(A1:B3, 5, 2, ""), EXPAND(D1:E5, 5, 2, ""))
どちらのテーブルも5行2列に揃えてからHSTACKで結合しています。行数の違いによるエラーを防げますよ。
パターン5: SEQUENCE + EXPANDで連番付きテンプレートを作る
SEQUENCE関数で連番を生成し、EXPAND関数で入力欄を確保するテクニックです。
=HSTACK(SEQUENCE(20), EXPAND({""}, 20, 3, ""))
SEQUENCE(20)で1〜20の連番を生成し、空白を20行3列に拡張して入力欄を作成しています。HSTACK関数で連番と入力欄を横に結合すれば、連番付きの空テンプレートが完成します。
DROP・TAKE関数との違い・使い分け
EXPAND関数には、配列のサイズを変更する仲間としてDROP関数とTAKE関数があります。3つの関数を比較してみましょう。
| 比較項目 | EXPAND関数 | DROP関数 | TAKE関数 |
|---|---|---|---|
| 機能 | 配列を拡大する | 先頭/末尾を削除する | 先頭/末尾を取り出す |
| 配列サイズ | 大きくなる | 小さくなる | 小さくなる |
| 引数の意味 | 拡張後の総行列数 | 削除する行列数 | 取得する行列数 |
| 負の数の指定 | 不可(#VALUE!エラー) | 可(末尾から削除) | 可(末尾から取得) |
| pad_with引数 | あり(拡張部分の値) | なし | なし |
| 代表的な使い方 | FILTER結果の固定サイズ化 | ヘッダー行の除去 | 上位N件の取得 |
DROPとTAKEは配列を縮小する関数ですが、アプローチが逆です。DROPは「不要な部分を捨てる」、TAKEは「必要な部分だけ取る」です。EXPANDはこの2つとは方向が逆で、配列を大きくする関数です。
使い分けの目安は次のとおりです。
- 結果のサイズを統一したい → EXPAND関数(不足分を埋めて整形)
- ヘッダー行や合計行を除外したい → DROP関数(「不要な行を消す」が直感的)
- 上位N件だけ取り出したい → TAKE関数(「N件取る」が直感的)
- ヘッダー除去してからサイズを揃えたい → DROP + EXPANDの組み合わせ
迷ったときは「配列を大きくしたい? 小さくしたい?」と考えてみてください。大きくするならEXPAND、小さくするならDROPかTAKEです。
よくあるエラーと対処法
EXPAND関数で発生するエラーをまとめました。
| エラー | 原因 | 対処法 |
|---|---|---|
#VALUE! | 元の配列より小さいサイズを指定した | 元のサイズ以上の値を指定する。縮小はDROP関数を使う |
#VALUE! | 行・列に負の値や小数を指定した | 正の整数のみ指定する |
#N/A | pad_with引数を省略した | pad_withに””や0を指定する |
#REF! | 出力先のセルに既にデータがある | 出力先の範囲を空にする |
#NAME? | 関数名のスペルミス | 「EXPAND」のスペルを確認する |
特に注意したいのが #VALUE! エラーです。EXPAND関数は拡大専用なので、元の配列より小さいサイズは指定できません。
=EXPAND(A1:C5, 3, 2, "")
A1:C5は5行3列です。3行2列にしようとすると#VALUE!エラーになります。縮小したい場合はDROP関数を使いましょう。
もうひとつよくあるのが #N/A です。pad_with引数を省略すると拡張部分に#N/Aが表示されます。これは仕様どおりの動作ですが、他の数式にもエラーが連鎖します。pad_withに””か0を指定しておくのがおすすめですよ。
TIP
IFERRORで#N/Aを処理する方法もありますが、他のエラーまで隠してしまいます。最初からpad_withを指定しておく方が安全です。
まとめ
EXPAND関数は、配列を指定したサイズに拡張する関数です。FILTER関数やVSTACK関数と組み合わせると、サイズの異なる結果をきれいに揃えられます。
この記事のポイントをおさらいしておきましょう。
- EXPAND関数は
=EXPAND(配列, 行, [列], [pad_with])で、配列を拡張する - pad_with引数を省略すると拡張部分に#N/Aが表示される。””や0を指定するのがおすすめ
- FILTER関数の結果を固定サイズに揃えたり、VSTACK関数の結合前に列数を正規化したりできる
- DROP関数は縮小、EXPAND関数は拡大で、方向が正反対のペア関数
- DROP関数でヘッダーを除去してからEXPANDでサイズを揃える組み合わせが便利
- 元の配列より小さいサイズを指定すると#VALUE!エラー。縮小にはDROP関数を使う
まずは =EXPAND(A1:C4, 10, 3, "") のように、表を固定サイズに揃えるところから試してみてください。FILTER関数やVSTACK関数と組み合わせれば、配列操作がグッと効率的になりますよ。
