目次
列や行の値を2次元配列に変換するには、WRAPCOLSまたはWRAPROWS関数を使用するのが最も手っ取り早い方法です。
Excelは、初期の頃から数値の計算や分析に優れていますが、配列の操作は従来から困難でした。 動的配列の導入により、配列式の利用が容易になりました。 また、Microsoftは、配列の操作や再形成を行う新しい動的配列関数をリリースしています。 このチュートリアルでは、2つの関数の使用方法について説明します。WRAPCOLSとWRAPROWSを使えば、列や行をあっという間に2次元配列に変換することができます。
エクセルWRAPCOLS関数
ExcelのWRAPCOLS関数は、行または列の値を、行ごとに指定された値の数に基づいて2次元配列に変換します。
この構文には次の引数があります。
WRAPCOLS(vector, wrap_count, [pad_with])どこで
- ベクトル (必須) - 入力となる1次元の配列または範囲.
- ラップカウント (必須) - 列ごとの値の最大数。
- パッド付き (オプション) - 最後の列を埋めるのに十分な項目がない場合に詰める値。 省略した場合、不足する値は #N/A (デフォルト) でパッドされます。
例えば、範囲B5:B24を1列5値の2次元配列に変更する場合、計算式は以下のようになります。
=wraprows(b5:b24, 5)
任意の1つのセルに数式を入力すると、必要なだけ自動的にセルに流出します。 WRAPCOLS出力では、値が上から下へ縦に並べられ、ベースは ラップカウント カウントされた後、新しいカラムが開始されます。
エクセルWRAPROWS関数
ExcelのWRAPROWS関数は、指定した1行あたりの値数に基づいて、行または列の値を2次元配列に変換します。
構文は以下の通りです。
WRAPROWS(vector, wrap_count, [pad_with])です。どこで
- ベクトル (必須) - 入力となる1次元の配列または範囲.
- ラップカウント (必須) - 行ごとの値の最大数。
- パッド付き (オプション) - 最後の行を埋めるのに十分なアイテムがない場合に、パッドする値です。 デフォルトは #N/A です。
例えば、範囲B5:B24を、各行に5つの値を持つ2次元配列に変換する場合、数式は次のようになります。
=wraprows(b5:b24, 5)
流出範囲の左上のセルに数式を入力すると、他のすべてのセルに自動的に入力されます。 WRAPROWS関数は、値を左から右へ水平に並べ、ベースとなる ラップカウント カウントに達した後、新しい行を開始します。
WRAPCOLSとWRAPROWSの在庫状況
いずれの機能も、Excel for Microsoft 365(Windows、Mac)およびWeb版Excelでのみ利用可能です。
以前のバージョンでは、従来のより複雑な数式を使用して、列から配列、行から配列への変換を実行することができます。 このチュートリアルでは、さらに別の解決策を詳しく説明します。
ヒント:2次元配列を1列、1行にする逆操作は、それぞれTOCOL、TOROW関数を使用します。
Excelで列/行を範囲に変換する方法 - 例
基本的な使い方を把握したところで、もう少し具体的なケースを見てみましょう。
列または行ごとの値の最大数を設定する
元のデータの構造によっては、列(WRAPCOLS)や行(WRAPROWS)に再整理するのが適している場合があります。 どの関数を使っても、それは ラップカウント 引数で、各列/行の値の最大数を決定する。
例えば、範囲B4:B23を2次元配列に変換し、各列の値が最大10個になるようにするには、次の式を使用します。
=wrapcols(b4:b23, 10)
同じ範囲を行ごとに並べ替えて、各行が最大4つの値を持つようにするには、次のような式になります。
=wraprows(b4:b23, 4)
下の画像は、その様子を表したものです。
結果の配列の欠損値をパッドする
結果の範囲のすべての列/行を埋めるのに十分な値がない場合、WRAPROWSとWRAPCOLSは2次元配列の構造を維持するために#N/Aエラーを返します。
デフォルトの動作を変更するには、カスタム値をオプションの パッド付き の議論になります。
例えば、範囲B4:B21を最大幅5個の2次元配列に変換し、最後の行を埋めるのに十分なデータがない場合はダッシュで埋めるには、次の数式を使用します。
=wraprows(b4:b21, 5, "-")
欠損値を長さ0の文字列(空白)に置き換えるには、以下の式になります。
=wraprows(b4:b21, 5, "")
というデフォルトの動作(D5の式)と比較してみてください。 パッド付き が省略されます。
複数行を2次元の範囲にマージする
いくつかの別々の行を1つの2次元配列にまとめるには、まずHSTACK関数で行を水平に積み上げ、WRAPROWSやWRAPCOLSで値をラップします。
例えば、3つの行(B5:J5, B7:G7, B9:F9)から値をマージして、それぞれ10個の値を含む列にラップする場合、数式は次のようになります。
=wrapcols(hstack(b5:j5, b7:g7, b9:f9)), 10)
複数の行の値を組み合わせて、各行が5つの値を含む2次元の範囲にする場合、数式は次のようになります。
=wraprows(hstack(b5:j5, b7:g7, b9:f9)), 5)
複数の列を2次元配列にまとめる
複数の列を2次元の範囲にまとめるには、まずVSTACK関数で縦に積み上げ、値を行(WRAPROWS)または列(WRAPCOLS)に折り返します。
例えば、3つの列(B5:J5, B7:G7, B9:F9)の値を、各列が10個の値を含む2次元範囲に結合する場合、数式は次のようになります。
=wrapcols(hstack(b5:j5, b7:g7, b9:f9)), 10)
同じ列を、各行が5つの値を含む2次元の範囲に結合するには、次の式を使用します。
=wraprows(hstack(b5:j5, b7:g7, b9:f9)), 5)
配列の折り返しおよびソート
元画像の範囲がランダムな値で、ソートして出力したい場合は、このようにします。
- SORT関数を使って、初期配列を好きなように並べ替えます。
- ソートされた配列を WRAPCOLS または WRAPROWS に供給する。
例えば、B4:B23の範囲を4値ずつ行にまとめ、その範囲をAからZにソートするには、次のような数式を作成します。
=wraprows(sort(b4:b23), 4)
同じ範囲を列で囲み、それぞれに10個の値を入れ、出力をアルファベット順に並べるには、次のような式になります。
=wrapcols(sort(b4:b23), 10)
結果は次のようになる。
ヒント:できた配列の値を並べるには 降順 を設定し、第3引数( ソート順 を-1する。
Excel 365 - 2010のためのWRAPCOLSの代替品
WRAPCOLS関数がサポートされていない古いバージョンのExcelでは、1次元配列の値を列にまとめる独自の数式を作成できます。 これは、5つの異なる関数を組み合わせて使用することで実現できます。
WRAPCOLSは、行を2次元の範囲に変換する代替手段です。
IFERROR(IF(ROW(A1)> n , "", INDEX( 行範囲 , , 行(a1) + (列(a1)-1)*。 n )), "")列を2次元の範囲に変換するWRAPCOLSの代替案。
IFERROR(IF(ROW(A1)> n , "", INDEX( column_range , 行(a1) + (列(a1)-1)*。 n )), "")どこ n は列ごとの値の最大数である。
下の画像では、以下の式で1行の範囲(D4:J4)を3行の配列に変更しています。
=IFERROR(IF(ROW(A1)>3, "", INDEX($D$4:$J$4, , ROW(A1) + (COLUMN(A1)-1)*3)), "")
そして、この数式は1列の範囲(B4:B20)を5列の配列に変更します。
=IFERROR(IF(ROW(A1)>5, "", INDEX($B$4:$B$20, ROW(A1) + (COLUMN(A1)-1)*5)), "")
上記の解決策は、類似のWRAPCOLSの数式をエミュレートし、同じ結果を得ることができます。
=wrapcols(d4:j4, 3, "")
と
=wrapcols(b4:b20, 5, "")
ダイナミックアレイのWRAPCOLS関数と異なり、従来の数式は1数式1セル方式であることに注意してください。 つまり、最初の数式はD8に入力され、3行下、3列右にコピーされます。 2番目の数式はD14に入力され、5行下、4列右にコピーされます。
これらの計算式の仕組み
どちらの式でも、行番号と列番号に基づいた値を配列から返すINDEX関数を使用しています。
INDEX(array, row_num, [column_num])1列の配列を扱うので,この場合は 行番号 引数で指定するため、デフォルトは1です。 col_num は、数式がコピーされた各セルに対して自動的に計算されます。 そして、その方法は次のとおりです。
行(a1)+(列(a1)-1)*3)
ROW 関数は、A1 リファレンスの行番号(1)を返します。
COLUMN関数はA1参照の列番号を返しますが、これも1です。 1を引くと0になります。 また、0に3をかけると0になります。
そして、ROWで返される1とCOLUMNで返される0を足し合わせて、結果として1を得るのです。
こうすることで、移動先の範囲(D8)の左上のセルのINDEX式がこのように変換される。
index($d$4:$j$4, ,行(a1)+(列(a1)-1)*3)))
に変更する。
index($d$4:$j$4, ,1)
で、指定された配列の1列目の値(D4の "Apples")を返します。
数式がセル D9 にコピーされると、相対セル参照は行と列の相対位置に基づいて変更され、絶対範囲参照は変更されないままです。
index($d$4:$j$4,, 行(a2)+(列(a2)-1)*3))
に変わります。
index($d$4:$j$4,, 2+(1-1)*3))
になります。
index($d$4:$j$4,, 2))
で、指定された配列の2列目、E4の "Apricots "の値を返します。
IF関数は行番号をチェックし、指定した行数(ここでは3)より大きい場合は空文字列("")を、そうでない場合はINDEX関数の結果を返します。
IF(ROW(A1)>3, "", INDEX(...))
最後に、IFERROR関数は、数式が本当に必要以上に多くのセルにコピーされたときに発生する#REF!エラーを修正します。
列を 2 次元範囲に変換する 2 番目の数式も同じ論理で動作します。 違いは、ROW + COLUMN の組み合わせを使用して、2 次元範囲を求めることです。 行番号 の引数を指定します。 col_num この場合、ソース配列のカラムは 1 つだけなので、パラメータは不要です。
Excel 365 - 2010のWRAPROWS代替品
Excel 2019以前のバージョンで1次元配列の値を行に折り返すには、WRAPROWS関数の代わりに以下のものを使用することができます。
行を2次元の範囲に変換する。
IFERROR(IF(COLUMN(A1)> n , "", INDEX( 行範囲 , , 列(a1)+(行(a1)-1)*. n )), "")列を2次元範囲に変更する。
IFERROR(IF(COLUMN(A1)> n , "", INDEX( column_range , 列(a1)+(行(a1)-1)*. n )), "")どこ n は、1行あたりの値の最大数です。
サンプルデータセットでは、次の数式を使用して、1 行の範囲 (D4:J4) を 3 列の範囲に変換します。 数式はセル D8 に置かれ、その後 3 列と 3 行に渡ってコピーされます。
=IFERROR(IF(COLUMN(A1)>3, "", INDEX($D$4:$J$4, , COLUMN(A1)+(ROW(A1)-1)*3)), "")
1列の範囲(B4:B20)を5列の範囲に整形するには、D14に以下の数式を入力し、5列と4行に渡ってドラッグします。
=IFERROR(IF(COLUMN(A1)>5, "", INDEX($B$4:$B$20, COLUMN(A1)+(ROW(A1)-1)*5)), "")
Excel 365では、同等のWRAPCOLSの数式で同じ結果を得ることができます。
=wraprows(d4:j4, 3, "")
と
=wraprows(b4:b20, 5, "")
これらの計算式の仕組み
基本的に、これらの式は前の例と同じように動作します。 違いは、(1)と(2)をどのように決定するかです。 行番号 と col_num INDEX関数の座標を指定します。
index($d$4:$j$4,, 列(a1)+(行(a1)-1)*3)))
移動先の範囲(D8)の左上のセルの列番号を取得するには、次の式を使用します。
列(a1)+(行(a1)-1)*3)
に変化すること。
1+(1-1)*3
となり、1が与えられます。
その結果、以下の式は、指定された配列の最初の列の値、つまり「Apples」を返します。
index($d$4:$j$4,, 1)
ここまでは先ほどの例と同じですが、他のセルではどうなるのか見てみましょう...。
セルD9では、相対的なセル参照が次のように変更されます。
index($d$4:$j$4,, 列(a2)+(行(a2)-1)*3))
そこで、式は次のように変形する。
index($d$4:$j$4,, 1+(2-1)*3))
になります。
index($d$4:$j$4,, 4))
で、指定された配列の4列目、G4の "Cherries "の値を返す。
IF関数は列番号をチェックし、指定した列数より大きい場合は空文字列("")を、そうでない場合はINDEX関数の結果を返します。
IF(COLUMN(A1)>3, "", INDEX(...))
仕上げとして、IFERRORは、数式を実際に必要以上のセルにコピーした場合、「余分な」セルに#REF!エラーが表示されるのを防止します。
WRAPCOLS または WRAPROWS 機能が動作しない
お使いのExcelで「折り返し」関数が使えない、またはエラーになる場合、以下の理由が考えられます。
#NAME?エラー
Excel 365では、関数名のスペルミスにより#NAME?エラーが発生することがあります。 他のバージョンでは、関数がサポートされていないことを示します。 回避策として、WRAPCOLS代替またはWRAPROWS代替を使用することができます。
#VALUE!エラー
の場合、#VALUEエラーが発生します。 ベクトル の引数は一次元配列ではありません。
#NUM!エラー
の場合、#NUMエラーが発生します。 ラップカウント の値は0または負の数です。
#SPILL!エラー
多くの場合、#SPILLエラーは、結果をこぼすのに十分な空白セルがないことを示しています。 隣のセルを消去すれば、解消されます。 それでもエラーが続く場合は、Excelの#SPILLの意味と修正方法について確認してください。
以上、ExcelでWRAPCOLS関数とWRAPROWS関数を使って1次元範囲を2次元配列に変換する方法でした。 読んでいただきありがとうございました!来週のブログでお会いできるのを楽しみにしています。
練習用ワークブック(ダウンロード
WRAPCOLSおよびWRAPROWS関数 - サンプル (.xlsxファイル)