Excelで列/行を配列に変換する:WRAPCOLS & WRAPROWS関数

  • これを共有
Michael Brown

列や行の値を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)

    配列の折り返しおよびソート

    元画像の範囲がランダムな値で、ソートして出力したい場合は、このようにします。

    1. SORT関数を使って、初期配列を好きなように並べ替えます。
    2. ソートされた配列を 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ファイル)

    Michael Brown は、ソフトウェア ツールを使用して複雑なプロセスを簡素化することに情熱を注ぐ熱心なテクノロジー愛好家です。テクノロジー業界で 10 年以上の経験があり、Microsoft Excel と Outlook、さらに Google Sheets と Docs のスキルを磨いてきました。 Michael のブログは、彼の知識と専門知識を他の人と共有することに特化しており、生産性と効率を向上させるためのわかりやすいヒントとチュートリアルを提供しています。経験豊富なプロフェッショナルであろうと初心者であろうと、Michael のブログでは、これらの重要なソフトウェア ツールを最大限に活用するための貴重な洞察と実践的なアドバイスを提供しています。