「1列のリストを、3列に並べ直したい」──そんな場面、ありませんか?
商品リストをカタログ形式に整形するとき、手作業でコピペすると時間がかかります。
更新のたびに並べ直すのも、地味に手間ですよね。
ExcelのWRAPCOLS関数を使えば、この作業を数式1つで自動化できます。
データが増えても更新不要で、常に最新の状態を保てますよ。
この記事では、WRAPCOLS関数の構文・引数・使い方から、実務ユースケース・エラー対処まで解説します。
WRAPCOLS関数とは?Excelでのバージョン確認
WRAPCOLS関数は、1次元の配列を「列方向に折り返す」関数です。
縦1列や横1行のデータを、指定した列数の2次元配列に変換できます。
読み方は「ラップコルズ」です。
“WRAP”(折り返す)と “COLS”(列、複数形)を組み合わせた名前です。
たとえば、A列に12個のデータがあるとします。=WRAPCOLS(A1:A12, 4) と入力すると、4行×3列の配列が自動生成されます。
元のリストを更新すると、出力も自動で再整形されますよ。
Microsoft 365 / Excel 2024以降のみ使用可能
WRAPCOLS関数は、以下の環境でのみ動作します。
| 環境 | 対応 |
|---|---|
| Microsoft 365(Windows / Mac / Web) | ○ |
| Excel 2024(Windows / Mac) | ○ |
| Excel 2021 | × |
| Excel 2019 / 2016 | × |
スピル(数式の結果が複数セルに自動展開される機能)に対応した環境が必要です。
バージョンが古い場合は使えませんので、事前に確認してみてください。
Excel 2021以前では代替方法が必要
Excel 2021以前では、WRAPCOLS関数は使えません。
INDEX関数やOFFSET関数の組み合わせで同様の処理は可能です。
ただし数式が複雑になるため、可能ならMicrosoft 365への移行を検討してみてください。
WRAPCOLS関数の書き方(構文と引数)
基本構文
=WRAPCOLS(vector, wrap_count, [pad_with])
引数は3つで、3つ目のみ省略できます。
引数の詳細
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| vector | 必須 | 折り返す元の1次元配列またはセル参照 |
| wrap_count | 必須 | 各列の最大行数(1以上の整数) |
| pad_with | 省略可 | 端数セルに入れる値。省略時は #N/A |
第1引数 vector(必須):折り返す元データ
vectorには、1次元の配列またはセル参照を指定します。
A1:A12のような縦1列でも、A1:L1のような横1行でも使えます。
注意点があります。
A1:C5のような複数行×複数列の2次元範囲を渡すと、#VALUE! エラーになります。
vectorは必ず1次元(1行または1列)で指定してください。
2次元データを渡したい場合はTOCOL関数(2次元配列を縦1列に変換する関数)と組み合わせます。
この活用法は後述の「TOCOL関数との組み合わせ」で解説します。
第2引数 wrap_count(必須):各列の行数を指定
wrap_countには、各列に何行分のデータを並べるかを指定します。
たとえば wrap_count=4 なら、各列に4行分のデータが入ります。
12個のデータなら 12÷4=3 なので、4行×3列の配列になります。
0以下の値を指定すると #NUM! エラーになります。
必ず1以上の整数を指定してください。
第3引数 pad_with(省略可):端数セルの埋め方
データ件数がwrap_countで割り切れない場合、最終列に空きセルが生じます。
pad_withには、その空きセルに表示する値を指定できます。
- 省略した場合:空きセルに #N/A が表示される
""を指定した場合:空白セルになる0を指定した場合:0で埋まる
端数が出る場面では、pad_with="" を指定するのが見た目にきれいですよ。
基本的な使い方:1列データを複数列に折り返す
縦1列リストを3列配列に変換する例
A列に果物名が12個あるとします。
| A列 |
|---|
| りんご |
| みかん |
| ぶどう |
| もも |
| なし |
| いちご |
| すいか |
| メロン |
| バナナ |
| キウイ |
| マンゴー |
| パイナップル |
セルC1に次の数式を入力します。
=WRAPCOLS(A1:A12, 4)
結果は次のような4行×3列の配列になります。
| 列1 | 列2 | 列3 |
|---|---|---|
| りんご | なし | バナナ |
| みかん | いちご | キウイ |
| ぶどう | すいか | マンゴー |
| もも | メロン | パイナップル |
データが列の上から順に詰め込まれています。
12個がwrap_count=4で割り切れるため、端数は発生しません。
端数が出る場合(pad_withの活用)
データが13個で、wrap_count=4の場合を見てみましょう。
=WRAPCOLS(A1:A13, 4, "")
| 列1 | 列2 | 列3 | 列4 |
|---|---|---|---|
| 1番目 | 5番目 | 9番目 | 13番目 |
| 2番目 | 6番目 | 10番目 | (空白) |
| 3番目 | 7番目 | 11番目 | (空白) |
| 4番目 | 8番目 | 12番目 | (空白) |
13÷4は割り切れないため、4列目が1行分だけになります。pad_with="" を指定しているので、残り3セルが空白になります。
pad_withを省略した場合、空白の代わりに #N/A が表示されますよ。
表示をすっきりさせたい場合は、忘れずに "" を指定してみてください。
横1行データを折り返す場合
WRAPCOLSはA1:L1のような横並びのデータにも使えます。
=WRAPCOLS(A1:L1, 4)
横1行の12個のデータが、4行×3列の配列に変換されます。
縦リストを渡したときと結果の形状は同じです。
入力データの向きに関わらず、同じように使えるのが便利ですよ。
WRAPROWS関数との違いと使い分け
折り返し方向の違い(列 vs 行)
WRAPCOLS関数と対になる関数に、WRAPROWS(ラップロウズ)があります。
構文はほぼ同じです。
=WRAPROWS(vector, wrap_count, [pad_with])
2つの違いは「折り返す方向」だけです。
- WRAPCOLS:列方向(縦)に折り返す → 縦長の配列
- WRAPROWS:行方向(横)に折り返す → 横長の配列
たとえば {a, b, c, d, e, f} の6要素を、wrap_count=3 で折り返すとします。
WRAPCOLS(各列3行)の結果:
| 列1 | 列2 |
|---|---|
| a | d |
| b | e |
| c | f |
WRAPROWS(各行3列)の結果:
| 列1 | 列2 | 列3 |
|---|---|---|
| a | b | c |
| d | e | f |
WRAPCOLSは縦長の配列、WRAPROWSは横長の配列になります。
どちらも「折り返す」ことに変わりはありませんが、方向が逆になります。
結果の形状と典型用途の比較表
| 項目 | WRAPCOLS | WRAPROWS |
|---|---|---|
| 折り返し方向 | 列方向(縦に詰める) | 行方向(横に詰める) |
| wrap_countの意味 | 各列の行数 | 各行の列数 |
| 結果の形状 | 縦長配列(多行・少列) | 横長配列(少行・多列) |
| 典型的な用途 | カタログ・グリッド整形 | 横並び比較・ヘッダー生成 |
「縦に整形したい」ならWRAPCOLS、「横に展開したい」ならWRAPROWSと覚えておくと選びやすいですよ。
実務ユースケース3選
ユースケース①:商品リストを3列カタログ形式に自動整形
販売管理システムからエクスポートした商品名が縦1列に並んでいます。
これを3列のカタログ形式に整形してみましょう。
A列(A2:A10)に商品名が9個あるとします。
セルC1に次の数式を入力します。
=WRAPCOLS(A2:A10, 3)
変換前(A列の縦リスト):
| A列 |
|---|
| 商品A |
| 商品B |
| 商品C |
| 商品D |
| 商品E |
| 商品F |
| 商品G |
| 商品H |
| 商品I |
変換後(3行×3列の配列):
| 列1 | 列2 | 列3 |
|---|---|---|
| 商品A | 商品D | 商品G |
| 商品B | 商品E | 商品H |
| 商品C | 商品F | 商品I |
9個をwrap_count=3で割ると3列になります。
商品が追加・削除されても、A列を更新するだけです。
カタログの再整形は数式が自動でやってくれますよ。
ユースケース②:日次データを週単位(4列)に折り返す
28日分の日次売上データがD2:D29にあるとします。
これを7行×4列(週単位)に折り返すと、週ごとの比較がしやすくなります。
=WRAPCOLS(D2:D29, 7)
| 第1週 | 第2週 | 第3週 | 第4週 |
|---|---|---|---|
| 1日目 | 8日目 | 15日目 | 22日目 |
| 2日目 | 9日目 | 16日目 | 23日目 |
| 3日目 | 10日目 | 17日目 | 24日目 |
| 4日目 | 11日目 | 18日目 | 25日目 |
| 5日目 | 12日目 | 19日目 | 26日目 |
| 6日目 | 13日目 | 20日目 | 27日目 |
| 7日目 | 14日目 | 21日目 | 28日目 |
各列が1週間分のデータになります。
SUM関数やAVERAGE関数を週ごとに適用するのも簡単になりますよ。
ユースケース③:SEQUENCE+WRAPCOLSで連番グリッドを自動生成
SEQUENCE関数(連続した数値を生成する関数)と組み合わせると、連番グリッドが1つの数式で作れます。
たとえば、1〜16の連番を4行×4列のグリッドにするには:
=WRAPCOLS(SEQUENCE(16), 4)
| 列1 | 列2 | 列3 | 列4 |
|---|---|---|---|
| 1 | 5 | 9 | 13 |
| 2 | 6 | 10 | 14 |
| 3 | 7 | 11 | 15 |
| 4 | 8 | 12 | 16 |
SEQUENCE(16) が {1, 2, …, 16} の連番を生成します。
WRAPCOLSがそれを4行ずつの列に変換し、4×4のグリッドになります。
座席番号の振り方や番号管理表の自動生成に活用できますよ。
SEQUENCE関数の詳細は ExcelのSEQUENCE関数の使い方 も参照してみてください。
TOCOL関数と組み合わせた応用テクニック
2次元データを1次元化してWRAPCOLSで再配置するレシピ
WRAPCOLSのvectorには1次元配列しか渡せません。
しかし実務では、複数列のデータをまとめて再配置したいことがあります。
そこで活用するのがTOCOL関数です。
TOCOLは2次元配列を縦1列に変換する関数です。
TOCOLとWRAPCOLSを組み合わせることで、柔軟な再配置が可能になります。
例:2列×4行のデータを再配置する
A1:B4に2列×4行(計8セル)のデータがあるとします。
=WRAPCOLS(TOCOL(A1:B4), 4)
処理の流れ:
① TOCOL(A1:B4) → 2次元データを8要素の縦1列に変換
② WRAPCOLS(..., 4) → 4行×2列の配列に再配置
2次元データを一度1次元に「ならして」から、好きな列数で再配置できます。
「複数列のリストをまとめて並べ替えたい」という場面で特に便利なテクニックです。
TOCOL関数の詳細は ExcelのTOCOL関数の使い方 で解説しています。
TOROW関数(2次元配列を横1行に変換する関数)を使ったパターンは ExcelのTOROW関数の使い方 を参照してみてください。
エラーの原因と対処法まとめ
WRAPCOLS関数で発生しうるエラーは4種類です。
| エラー | 主な原因 | 対処法 |
|---|---|---|
| #N/A | pad_withを省略していて端数セルがある | pad_with="" や pad_with=0 を指定する |
| #VALUE! | vectorに2次元配列を指定した | TOCOLで1次元化してからWRAPCOLSに渡す |
| #NUM! | wrap_countに0以下の値を指定した | 1以上の整数を指定する |
| #REF! | スピル先のセルに値が入っている | 出力先の範囲を空にしてから入力し直す |
#N/A エラー:端数が出る場合の対処
データ件数がwrap_countで割り切れないと、最終列の末尾に #N/A が出ます。
#N/A(エヌエー)は “Not Available”(利用不可)の略で、値がないことを示します。
=WRAPCOLS(A1:A10, 3) ' 10÷3=3余り1 → 最終列の末尾2セルに#N/A
空白にしたい場合:
=WRAPCOLS(A1:A10, 3, "")
0で埋めたい場合:
=WRAPCOLS(A1:A10, 3, 0)
端数が出る可能性があるときは、最初からpad_withを指定しておくと安心ですよ。
#VALUE! エラー:2次元配列を渡した場合
vectorに2次元範囲(複数行×複数列)を渡すと #VALUE! になります。
' NG: 2次元配列を直接渡す
=WRAPCOLS(A1:C5, 3) ' → #VALUE!
' OK: TOCOLで1次元化してから渡す
=WRAPCOLS(TOCOL(A1:C5), 3)
vectorに渡しているセル範囲が2次元になっていないか確認してみてください。
#NUM! エラー:wrap_countの値が不正
wrap_countに0以下の値を指定すると #NUM! になります。
=WRAPCOLS(A1:A12, 0) ' → #NUM!
=WRAPCOLS(A1:A12, -1) ' → #NUM!
1以上の整数を指定してください。
セル参照でwrap_countを指定している場合は、そのセルの値を確認してみてください。
#REF! エラー:スピル先に値が入っている
WRAPCOLS関数はスピルを使って結果を複数セルに展開します。
出力先の範囲に他のデータが入っていると、#REF! エラーになります。
出力先となるセル範囲を空にしてから、数式を入力し直してください。
スピルに必要な範囲が広い場合は、周囲のデータを別の場所に移動してみてください。
まとめ:WRAPCOLS関数でリスト整形を自動化しよう
この記事の要点を整理します。
| ポイント | 内容 |
|---|---|
| できること | 1次元リストを列方向に折り返して2次元配列に変換 |
| 構文 | =WRAPCOLS(vector, wrap_count, [pad_with]) |
| 対応環境 | Microsoft 365 / Excel 2024以降のみ |
| WRAPROWSとの違い | 縦長配列(WRAPCOLS)vs 横長配列(WRAPROWS) |
| 主なエラー | #N/A / #VALUE! / #NUM! / #REF! |
WRAPCOLS関数を使えば、手作業で並べ替えていたリストが数式1つで自動化できます。
データが増えても更新不要なので、メンテナンスの手間もなくなりますよ。
ぜひ実務で試してみてください。
関連関数
配列操作の関連記事もあわせてどうぞ。
- ExcelのTOCOL関数の使い方(2次元配列を縦1列に変換)
- ExcelのTOROW関数の使い方(2次元配列を横1行に変換)
- ExcelのSEQUENCE関数の使い方(連番を自動生成)
- ExcelのHSTACK関数の使い方(配列を横方向に結合)
- ExcelのVSTACK関数の使い方(配列を縦方向に結合)
- ExcelのCHOOSECOLS関数の使い方(指定列を抽出)
- ExcelのCHOOSEROWS関数の使い方(指定行を抽出)
- ExcelのTAKE関数の使い方(先頭・末尾を抽出)
