値の列または行を2次元配列に変換する最速の方法は、ラップコールまたはラプロウ機能を使用することです。
Excelの初期の日以来、数値の計算と分析が非常に優れています。しかし、アレイを操作することは伝統的に挑戦でした。動的配列の導入により、配列式の使用がはるかに簡単になりました。そして今、Microsoftは、アレイを操作および再形成するために、新しい動的配列関数のセットをリリースしています。このチュートリアルでは、2つのそのような関数、ラップコールとラプロウを使用して、列または行をすぐに2D配列に変換する方法を教えてください。
ExcelのLapCols関数は、行の行または列を行ごとの値に基づいて2次元配列に変換します。
構文には次の引数があります。
wrapcols(vector、wrap_count、[pad_with])どこ:
たとえば、範囲B5:B24を列あたり5値を持つ2次元配列に変更するには、式は次のとおりです。
=WRAPROWS(B5:B24, 5)
任意の単一のセルに式を入力すると、必要な数のセルに自動的にこぼれます。ラップコール出力では、 wrap_count値に基づいて、値が上から下まで垂直に配置されます。カウントに達した後、新しい列が開始されます。
Excelのラプロウ機能は、指定した行ごとの値に基づいて、値の行または列を2次元配列に変換します。
構文は次のとおりです。
wraprows(vector、wrap_count、[pad_with])どこ:
たとえば、範囲B5:B24を各行に5つの値を持つ2Dアレイに変換するには、次の式は次のとおりです。
=WRAPROWS(B5:B24, 5)
流出範囲の上部左セルの式に入力すると、他のすべてのセルに自動的に入力されます。 wraprows関数は、 wrap_count値に基づいて、左から右への値を水平に配置します。カウントに到達した後、新しい行を開始します。
両方の機能は、Microsoft 365(Windows and Mac)のExcelでのみ利用可能で、WebでExcelです。
以前のバージョンでは、従来のより複雑な数式を使用して、列からアレイへの変換を実行できます。このチュートリアルでは、代替ソリューションについて詳しく説明します。
ヒント。逆操作を行うには、2D配列を単一の列または行に変更するには、それぞれTOCOLまたはTOROW機能を使用します。
基本的な使用法を把握しているので、いくつかの具体的なケースを詳しく見てみましょう。
元のデータの構造に応じて、列(ラップコール)または行(ラプロウ)に再配置するのに適している場合があります。使用する関数のいずれにせよ、各列/行の値の最大数を決定するのはwrap_count引数です。
たとえば、範囲B4:B23を2D配列に変換するために、各列に最大10値があるように、この式を使用します。
=WRAPCOLS(B4:B23, 10)
同じ範囲を列ごとに再配置して、各行に最大4つの値を持つように、式は次のとおりです。
=WRAPROWS(B4:B23, 4)
下の画像は、これがどのように見えるかを示しています。
結果の範囲のすべての列/行を埋めるために値が不十分な場合、ラプロウとラップコールは#n/aエラーを返して、2D配列の構造を維持します。
デフォルトの動作を変更するには、オプションのPAD_ITH引数にカスタム値を提供できます。
たとえば、範囲b4:b21を最大5値幅の2Dアレイに変換し、最後の行をダッシュでパディングして、それを満たすのに十分なデータがない場合は、この式を使用します。
=WRAPROWS(B4:B21, 5, "-")
欠損値をゼロの長さの文字列(ブランク)に置き換えるには、次の式は次のとおりです。
=WRAPROWS(B4:B21, 5, "")
結果をデフォルトの動作(D5の式)と比較してください。
いくつかの個別の行を単一の2Dアレイに結合するには、最初にhstack関数を使用して行を水平に積み重ね、次にラプロウまたはラップコールを使用して値をラップします。
たとえば、3列(B5:J5、B7:G7およびB9:F9)から値をマージし、それぞれ10値を含む列にラップするには、式は次のとおりです。
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
複数行の値を2D範囲に結合するには、各行に5つの値が含まれているため、式には次の形式があります。
=WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)
いくつかの列を2D範囲にマージするには、最初にVSTack関数を使用して垂直に積み重ねてから、値を行(ラプロウ)または列(ラップコール)にラップします。
たとえば、3列(B5:J5、B7:G7、およびB9:F9)の値を2D範囲に結合するには、各列に10値が含まれています。式は次のとおりです。
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
同じ列を2D範囲に結合するには、各行に5つの値が含まれている場合、この式を使用します。
=WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)
ソース範囲がランダムな順序で値を持っている場合に、出力をソートしたい場合は、次のように進行します。
たとえば、範囲b4:b23をそれぞれ4つの値にラップし、結果の範囲をaからzまで並べ替えるには、次のような式を作成します。
=WRAPROWS(SORT(B4:B23), 4)
同じ範囲を列に包むには、それぞれ10値を10値にし、出力をアルファベット順に並べ替えるには、式は次のとおりです。
=WRAPCOLS(SORT(B4:B23), 10)
結果は次のように見えます:
ヒント。結果の配列の値を降順で配置するには、sort関数の3番目の引数( sort_order )を-1に設定します。
LapCols関数がサポートされていない古いExcelバージョンでは、独自の式を構築して、1次元配列から列に値をラップすることができます。これは、5つの異なる関数を一緒に使用することで実行できます。
行を2D範囲に変換するための代替手段:
iferror(if(row(a1)> n 、 ""、index( row_range 、、 row(a1)(column(a1)-1)* n ))、 "")列を2D範囲に変換するための代替手段:
iferror(if(row(a1)> n」 、 ""、index( column_range 、row(a1)(column(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(D4:J4, 3, "")
そして
=WRAPCOLS(B4:B20, 5, "")
動的配列ラップコール機能とは異なり、従来の式は1つの形式1-セルアプローチに従うことに留意してください。そのため、最初の式はD8に入力され、右に3列の3列と3列をコピーしました。 2番目の式はD14に入力され、右側に5行下にコピーしました。
これらの式の仕組み
両方の式の中心に、行番号と列番号に基づいて提供された配列から値を返すインデックス関数を使用します。
index(array、row_num、[column_num])1列の配列を扱っているため、 row_num引数を省略することができるため、デフォルトは1になります。トリックは、式がコピーされるセルごとにCol_Numを自動的に計算することです。そして、これが私たちがこれを行う方法です:
ROW(A1) (COLUMN(A1)-1)*3)
行関数は、A1リファレンスの行番号、1です。
列関数は、A1参照の列番号を返します。これも1です。 0を3で掛けると0が与えられます。
次に、1列ごとに返され、0が列で返され、結果として1を取得します。
このようにして、宛先範囲(D8)の上部左セルのインデックス式は、この変換を受けます。
INDEX($D$4:$J$4, ,ROW(A1) (COLUMN(A1)-1)*3))
の変更
INDEX($D$4:$J$4, ,1)
指定された配列の最初の列から値を返します。これは、D4の「リンゴ」です。
式がセルD9にコピーされると、相対セル参照は行と列の相対位置に基づいて変化しますが、絶対範囲の参照は変更されません。
INDEX($D$4:$J$4,, ROW(A2) (COLUMN(A2)-1)*3))
変換:
INDEX($D$4:$J$4,, 2 (1-1)*3))
次のようになります
INDEX($D$4:$J$4,, 2))
指定された配列の2番目の列から値を返します。これは、E4の「アプリコット」です。
IF関数は行番号をチェックし、指定した行の数(私たちの場合は3)よりも大きい場合は、空の文字列( "")を返します。
IF(ROW(A1)>3, "", INDEX(…))
最後に、iferror関数は#refを修正します!フォーミュラが実際に必要以上に多くのセルにコピーされたときに発生するエラー。
列を2D範囲に変換する2番目の式は、同じロジックで動作します。違いは、列列の組み合わせを使用してインデックスのrow_num引数を把握することです。ソースアレイには列が1つしかないため、この場合はcol_numパラメーターは必要ありません。
Excel 2019以前に1次元配列からの値を行に巻き付けるために、ラプロウ機能の代替案を使用できます。
行を2D範囲に変換します:
iferror(if(column(a1)> n 、 ""、index( row_range 、、 column(a1)(row(a1)-1)* n )、 "")列を2D範囲に変更します:
iferror(if(column(a1)> n 、 ""、index( column_range 、column(a1)(row(a1)-1)* n ))、 "")ここで、 nは行あたりの値の最大数です。
サンプルデータセットでは、次の式を使用して、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では、同等のラップコール式でも同じ結果を達成できます。
=WRAPROWS(D4:J4, 3, "")
そして
=WRAPROWS(B4:B20, 5, "")
これらの式の仕組み
基本的に、これらの式は前の例のように機能します。違いは、インデックス関数のrow_numおよびcol_num座標を決定する方法です。
INDEX($D$4:$J$4,, COLUMN(A1) (ROW(A1)-1)*3))
目的地の範囲(D8)の左上セルの列番号を取得するには、次の式を使用します。
COLUMN(A1) (ROW(A1)-1)*3)
その変更:
1(1-1)*3
1を与えます。
その結果、以下の式は、指定された配列の最初の列、つまり「リンゴ」から値を返します。
INDEX($D$4:$J$4,, 1)
これまでのところ、結果は前の例と同じです。しかし、他のセルで何が起こるか見てみましょう…
細胞D9では、相対細胞の参照は次のように変更されます。
INDEX($D$4:$J$4,, COLUMN(A2) (ROW(A2)-1)*3))
したがって、式は次のように変わります。
INDEX($D$4:$J$4,, 1 (2-1)*3))
次のようになります
INDEX($D$4:$J$4,, 4))
指定された配列の4列目から値を返します。これはG4の「チェリー」です。
IF関数は列番号をチェックし、指定した列の数よりも大きい場合、空の文字列( "")を返します。
IF(COLUMN(A1)>3, "", INDEX(…))
最後の仕上げとして、Iferrorは#Refを防ぎます!実際に必要なよりも多くのセルに式をコピーする場合、「エクストラ」セルに表示されるエラー。
「ラップ」関数がExcelで使用できない場合、またはエラーが発生した場合、それは以下の理由の1つである可能性が最も高くなります。
Excel 365で、#Name?関数の名前を間違えたためにエラーが発生する可能性があります。他のバージョンでは、関数がサポートされていないことを示します。回避策として、wrapcolsの代替品を使用するか、ラプロウの代替品を使用できます。
ベクトル引数が1次元配列ではない場合、#valueエラーが発生します。
wrap_count値が0または負の数の場合、#numエラーが発生します。
ほとんどの場合、#spillエラーは、結果をこぼすのに十分な空白のセルがないことを示します。隣接する細胞をきれいにすると、それはなくなります。エラーが続く場合は、Excelで#Spillの意味とそれを修正する方法を確認してください。
これが、ラップコールとラプロウの関数を使用して、1次元範囲をExcelの2次元配列に変換する方法です。お読みいただきありがとうございます。来週のブログでお会いしましょう!
wrapcols and wraprows関数 - 例(.xlsxファイル)
以上が列 /行をExcelの配列に変換する:wrapcols&wraprows関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。