ExcelのWRAPCOLS関数の使い方|1列を指定列数の配列に折り返す

スポンサーリンク

「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
ad
be
cf

WRAPROWS(各行3列)の結果:

列1列2列3
abc
def

WRAPCOLSは縦長の配列、WRAPROWSは横長の配列になります。
どちらも「折り返す」ことに変わりはありませんが、方向が逆になります。

結果の形状と典型用途の比較表

項目WRAPCOLSWRAPROWS
折り返し方向列方向(縦に詰める)行方向(横に詰める)
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
15913
261014
371115
481216

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/Apad_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つで自動化できます。
データが増えても更新不要なので、メンテナンスの手間もなくなりますよ。

ぜひ実務で試してみてください。

関連関数

配列操作の関連記事もあわせてどうぞ。

タイトルとURLをコピーしました