「縦1列に並んだリストを、7列(曜日)単位のカレンダー形式に並べ替えたい」「100件の商品名を4列の陳列表に自動整形したい」——こうした1次元データを任意の行・列数で折り返して2次元表に変換する作業は、これまでVBAや複雑な数式を組まなければ実現できませんでした。Excel 365ではその課題をWRAPROWS関数・WRAPCOLS関数の1式で解決できます。
両関数は動的配列(スピル)に対応しており、元データが増減しても折り返し結果が自動更新されます。連番カレンダーの生成・商品カタログの整形・週単位シフト表の作成など、定期的に発生するレイアウト変換作業を数式だけで自動化できるため、実務効率を大きく高めます。
本記事では、WRAPROWS・WRAPCOLSの基本構文・2関数の方向の違い・pad_with引数によるパディング制御・実務3シナリオ・他の動的配列関数との組み合わせ・よくあるエラーの対処法・MOS Excel試験での出題ポイントを体系的に解説します。
WRAPROWS・WRAPCOLS関数の概要と違い
2関数は「1次元のベクトル(行または列の配列)を、指定した折り返し幅で2次元配列に変換する」という同じ目的を持ちますが、折り返す方向が異なります。
| 関数 | 折り返し方向 | 読み取り順 | 典型的な用途 |
|---|---|---|---|
| WRAPROWS | 行方向(横に並べて改行) | 左→右、折り返したら次の行へ | 曜日カレンダー・横向き一覧表 |
| WRAPCOLS | 列方向(縦に並べて改列) | 上→下、折り返したら次の列へ | 縦向きカタログ・列単位グルーピング |
たとえば1~7の連番を3個単位で折り返すと、2関数の出力は次のように異なります。
| 数式 | 出力(概念図) |
|---|---|
| =WRAPROWS(SEQUENCE(7), 3) | 1・2・3 → 4・5・6 → 7・空・空(3列・3行) |
| =WRAPCOLS(SEQUENCE(7), 3) | 1・4・7 → 2・5・空 → 3・6・空(3行・3列) |
WRAPROWS関数の基本構文と動作
=WRAPROWS(vector, wrap_count, [pad_with])
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| vector | 必須 | 折り返す1次元の配列またはセル範囲(縦・横どちらも可) |
| wrap_count | 必須 | 1行に並べる要素数(正の整数)。これが1行の列数になる |
| pad_with | 省略可 | 最終行の不足部分を埋める値。省略時は #N/A が入る |
A2:A10(9件の商品名)を3列単位で横並びにする例です。
' A2:A10 の9件を3列×3行に整形(過不足なし)
=WRAPROWS(A2:A10, 3)
' A2:A15 の14件を4列×4行に整形。最終行の2マスは空文字で埋める
=WRAPROWS(A2:A15, 4, "")
出力はD2セルを起点に自動スピルします。元データのA列に行を追加・削除すると、次の計算タイミング(Excelの再計算)で出力が自動更新されます。
wrap_countが整数でない場合の挙動
wrap_countに小数(例: 3.7)を渡すと小数部を切り捨てて3として扱います。0または負の数を渡すと #VALUE! エラーになります。引数をセル参照で指定する場合は、参照先が正の整数であることを確認してください。
WRAPCOLS関数の基本構文と動作
=WRAPCOLS(vector, wrap_count, [pad_with])
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| vector | 必須 | 折り返す1次元の配列またはセル範囲 |
| wrap_count | 必須 | 1列に並べる要素数(正の整数)。これが1列の行数になる |
| pad_with | 省略可 | 最終列の不足部分を埋める値。省略時は #N/A が入る |
WRAPCOLSは「データを上から下へ読み取り、指定した行数に達したら次の列に移動する」という動きをします。
' 1~12の連番を4行単位で縦に並べる(3列×4行)
=WRAPCOLS(SEQUENCE(12), 4)
' 結果:
' 1 5 9
' 2 6 10
' 3 7 11
' 4 8 12
' データが列数の倍数でない場合、空文字でパディング
=WRAPCOLS(SEQUENCE(10), 4, "")
' 結果:
' 1 5 9
' 2 6 10
' 3 7 空
' 4 8 空
pad_with引数でパディング値を制御する
両関数のpad_with引数は、データ件数がwrap_countの倍数でない場合の端数マスの埋め方を制御します。省略時は #N/A が入るため、見た目が目立ちます。用途に応じて適切な値を指定してください。
| pad_with の指定 | 端数マスの表示 | 使い所 |
|---|---|---|
| 省略(既定) | #N/A(エラー表示) | 端数を視覚的に識別したいとき |
| “”(空文字) | 空欄 | 印刷・プレゼン用の一覧表 |
| 0 | 0 | 数値集計を続けるとき(SUM等が誤作動しないよう注意) |
| “-”など | 任意の文字列 | 表の見栄えをダッシュで揃えたいとき |
数式内でpad_withを空文字にする場合は "" と記述します(引数に何も書かないのではなく、空文字を明示する点に注意)。
' 端数を空欄で埋める(推奨パターン)
=WRAPROWS(A2:A20, 5, "")
' 端数を「-」で埋める(表テンプレートに使いやすい)
=WRAPCOLS(A2:A20, 8, "-")
実務活用1:SEQUENCE+WRAPROWSで曜日カレンダーを自動生成する
月の初日が何曜日でも「1日~末日」を月曜始まり7列のカレンダー形式に自動整形する最もシンプルなパターンです。カレンダー管理表・プロジェクト工程表・月次レポートの雛形作成に使えます。
基本パターン:1~31の連番を7列に折り返す
' 1~31を7列(月火水木金土日)のカレンダー形式に整形
=WRAPROWS(SEQUENCE(31), 7, "")
SEQUENCE(31) で1~31の連番を生成し、WRAPROWSで7列に折り返します。31が7の倍数でないため、最終週の余りのマスは空文字(””)で埋まります。これで5行7列のカレンダー骨格ができます。
応用パターン:月初日の曜日に合わせて先頭をずらす
「2026年10月は木曜始まり」のように先頭をずらすには、SEQUENCEの前に空白データを追加します。WEEKDAY関数で月初日の曜日番号(月曜=1)を取得し、その分の空白をCHAR(1)などで埋める方法と、SEQUENCE開始値を負数にするパターンがあります。ここでは実務で扱いやすい空文字埋め方式を示します。
' B1: 対象月の初日(例: 2026/10/1)
' C1: 月初日の曜日オフセット(月曜始まりで0~6)
=MOD(WEEKDAY(B1, 2) - 1, 7)
' D3 に入力:オフセット分の空白+連番を7列カレンダーに変換
=WRAPROWS(
HSTACK(
IF(SEQUENCE(C1) > 0, "", ""),
SEQUENCE(DAY(EOMONTH(B1, 0)))
),
7, ""
)
HSTACKで空白ベクトルと日付連番を横結合してからWRAPROWSに渡すことで、任意の月の曜日ずれに対応した自動カレンダーを1式で生成できます。
実務活用2:商品マスタを指定列数の陳列表に変換する
商品マスタが縦1列に並んでいる場合、WRAPROWSを使えば「4列×N行」の横並び陳列表に変換できます。印刷レイアウトやPowerPoint資料への貼り付け前整形として便利です。
' A2:A50(商品名50件)を4列の陳列表に変換
=WRAPROWS(A2:A50, 4, "")
' 列数をセル参照で動的に変更(D1に列数を入力)
=WRAPROWS(A2:A50, D1, "")
D1セルの数値を変えるだけで列数が変わります。印刷先のページ幅に合わせて列数を調整するだけで、毎月のカタログ更新が自動化されます。
WRAPCOLSで縦方向に並べる陳列表
「1列目に商品1・2・3と並べて、次の列に4・5・6」という縦向き並びにしたい場合はWRAPCOLSを使います。
' 50件の商品名を「1列10行」の縦陳列に変換(5列×10行)
=WRAPCOLS(A2:A51, 10, "")
行数(wrap_count)を変えると列数が変わります。「ページに収まる行数」を固定したい印刷レイアウトに向いています。
実務活用3:日次データを週単位(7列)で管理する
日次の売上データ・作業ログ・気温記録などを「週×曜日」の行列に変換すると、週次のパターン分析がしやすくなります。
' C2:C91(90日分の売上値)を7列(週単位)に折り返す
=WRAPROWS(C2:C91, 7, "")
' 結果:7列×13行(最終週は余りを空欄)
' 対応する日付列も同じ形式で整形して並べる
=WRAPROWS(A2:A91, 7, "")
日付と売上値を同じwrap_countで整形して横に配置すれば、月曜列・火曜列…と曜日ごとの集計が即座に行えます。SUMやAVERAGEで特定列(曜日)を集計することで「土曜の平均売上はどの曜日より高いか」などの分析が数式だけで実現できます。
