目次
を使って、セル範囲を1行にする簡単な方法です。 TOROW 関数を使用します。
Microsoft Excel 365では、配列を使ってさまざまな操作を行うための新しい関数がいくつか導入されました。 TOROWを使えば、範囲から行への変換をすぐに行うことができます。 ここでは、この新しい関数で実現できるタスクの一覧を紹介します。
エクセルTOROW関数
ExcelのTOROW関数は、セルの配列や範囲を1つの行に変換するために使用されます。
この関数は合計3つの引数をとり、そのうち最初の引数のみが必要とされる。
TOROW(配列、[無視]、[scan_by_column])どこで
アレイ (必須) - 1つの行に変換するための配列あるいは範囲。
無視 (オプション) - 空白またはエラーを無視するかどうかを決定します。 これらの値のいずれかを取ることができます。
- 0または省略(デフォルト) - すべての値を保持する
- 1 - ブランクを無視する
- 2 - エラーを無視する
- 3 - 空白やエラーを無視する
スキャンバイカラム (オプション) - 配列をスキャンする方法を定義します。
- FALSE または省略(デフォルト) - 配列を行単位で水平方向に走査します。
- TRUE - 配列を縦方向に列単位で走査します。
ヒント
- 配列を1つの列に変換するには、TOCOL関数を使用します。
- 行から配列への逆変換を行うには、WRAPCOLS 関数で列方向に折り返すか、WRAPROWS 関数で配列から行方向に折り返します。
- 行を列にするには、TRANSPOSE 機能を使用します。
TOROWの稼働率
TOROWは、Excel for Microsoft 365(Windows版、Mac版)とExcel for Webでのみサポートされる新機能です。
エクセルでの基本的なTOROWの計算式
単純な範囲から行への変換を行うには、TOROW式の基本形を使用します。 このためには、最初の引数( 勢揃い ).
例えば、3列3行からなる2次元配列を1行にする場合、計算式は次のようになる。
=TOROW(A3:C6)
1つのセル(ここではA10)に数式を入力すると、すべての結果を保持するために必要な数のセルに自動的にこぼれます。 Excel用語では、薄い青枠で囲まれた出力範囲を「こぼし範囲」と呼びます。
この処方の仕組み
まず、与えられたセル範囲を2次元配列に変換します。 カンマで区切られた列とセミコロンで区切られた行に注目してください。
{"Apple","Banana","Cherry";1,2,3;4,5,6;7,8,9}
次に、TOROW関数は、配列を左から右に読み、1次元の水平配列に変換する。
{"Apple","Banana","Cherry",1,2,3,4,5,6,7,8,9}
結果はセルA10に送られ、そこから右隣のセルに流出する。
空白やエラーを無視した範囲から行への変換
デフォルトでは、TOROW関数は空のセルやエラーを含むソース配列のすべての値を保持します。 出力では、空白セルの代わりにゼロ値が表示され、非常に紛らわしい場合があります。
への ふたを開けると を設定します。 目をつぶる 引数を 1 にする。
=torow(a3:c5, 1)
への エラー無視 を設定します。 目をつぶる の引数を 2 にする。
=torow(a3:c5, 2)
両方をスキップするため。 空白とエラー には3を使用します。 目をつぶる の議論になります。
=torow(a3:c5, 3)
下の画像は、3つのシナリオをすべて実行したものです。
配列を水平または垂直に読み取る
デフォルトの動作では、TOROW関数は配列を左から右へ水平方向に処理します。 上から下へ列ごとに値をスキャンするには、第3引数( scan_by_column(スキャンバイカラム ) を TRUE または 1 に設定する。
例えば、ソース範囲を行単位で読み取る場合、E3の式は次のようになる。
=TOROW(A3:C5)
範囲を列単位でスキャンするには、E8の数式を使用します。
=torow(a3:c5, ,true)
どちらの場合も、結果として得られる配列のサイズは同じですが、値の並び方が異なります。
複数の範囲を1つの行にマージする
隣接しない複数の範囲を1つの行にまとめるには、まずHSTACKとVSTACKを使ってそれぞれ水平方向と垂直方向に積み重ねて1つの配列にし、次にTOROW関数を使って組み合わせた配列を行に変換します。
ビジネスロジックに応じて、以下の式のいずれかがタスクを実行します。
配列を水平に積み重ね、行単位で変換する。
最初の範囲をA3:C4、2番目の範囲をA8:C9とすると、以下の式は2つの範囲を水平に重ねて1つの配列とし、左から右に値を読む行に変換します。 その結果が下の画像のE3です。
=torow(hstack(a3:c4, a8:c9))
配列を水平に積み重ね、列単位で変換する。
積層された配列を上から下へ垂直に読み出すには、下図のE5のようにTOROWの第3引数をTRUEに設定します。
=torow(hstack(a3:c4, a8:c9), ,true)
配列を縦に積み上げ、行単位で変換する。
後続の各配列を前の配列の下に追加し、結合した配列を水平方向に読み出すには、E12の式となる。
=torow(vstack(a3:c4, a8:c9))
配列を縦に積み上げ、列単位で変換する。
後続の各配列を前の配列の下に追加し、結合した配列を縦に走査するには、次の式になります。
=torow(vstack(a3:c4, a8:c9), ,true)
この論理をよりよく理解するために、結果の配列における値の順序の違いを見てみましょう。
範囲から一意な値を行に抽出する
Microsoft Excel 2016から、UNIQUEという名前の、1つの列や行から簡単にユニークな値を取得できる素晴らしい関数ができました。 しかし、複数列の配列を扱うことはできません。 この制限を克服するには、UNIQUEとTOROW関数を一緒に使用します。
例えば、A2:C7の範囲から異なる(distinct)値をすべて抽出し、結果を1行に配置する場合、数式は次のようになります。
=unique(torow(a2:c7), true)
TOROWは1次元の水平配列を返すので、2番目の( バイコル ) の UNIQUE の引数を TRUE にして、列を互いに比較する。
結果をアルファベット順に並べたい場合は、上記の数式をSORT関数で囲みます。
=sort(unique(torow(a2:c7), true), , ,true )
UNIQUEと同様に バイコル の引数もTRUEに設定される。
Excel 365 - 2010のためのTOROW代替
TOROW関数が使えないExcelのバージョンでは、古いバージョンで動作するいくつかの異なる関数を組み合わせて、範囲を1行に変換することができます。 これらの解決策はより複雑ですが、動作はします。
範囲を水平方向にスキャンする場合、一般的な計算式は次のようになります。
INDEX( レンジ , quotient(column (a1)-1, columns() レンジ ))+1, mod(列(a1)-1, 列( レンジ ))+1)範囲を縦にスキャンする場合、一般的な計算式は次のようになります。
INDEX( レンジ , mod(列(a1)-1, 列( レンジ ))+1, quotient(列(a1)-1, 列( レンジ ))+1)A3:C5のサンプルデータセットの場合、数式は以下のような形になります。
範囲を行単位でスキャンする場合。
=index($a$3:$c$5, quotient(column(a1)-1, columns($a$3:$c$5))+1, mod(column(a1)-1, columns($a$3:$c$5))+1)
この式は、TOROW関数の第3引数をFALSEに設定するか、省略した場合の代替式である。
=TOROW(A3:C5)
範囲を列ごとにスキャンする場合。
=index($a$3:$c$5, mod(column(a1)-1, columns($a$3:$c$5))+1, quotient(column(a1)-1、columns($a$3:$c$5))+1)。
この式は、TOROW関数の第3引数をTRUEにしたものと同等である。
=torow(a3:c5, ,true)
なお、動的配列のTOROW関数とは異なり、これらの従来の数式は、結果を表示させたい各セルに入力する必要があります。 今回の例では、最初の数式(行単位)はE3に入り、M3を通じてコピーされます。 2番目の数式(列単位)はE8に入り、M8を通じてドラッグされます。
数式を正しくコピーするために、絶対参照を使って範囲を固定します($A$3:$C$5)。 名前の付いた範囲でもかまいません。
数式を必要以上のセルにコピーしてしまった場合、「余分な」セルに#REF!エラーが表示されます。 これを解決するには、数式を次のようにIFERROR関数で囲みます。
=iferror(index($a$3:$c$5, quotient(column(a1)-1, columns($a$3:$c$5))+1, mod(column(a1)-1, columns($a$3:$c$5))+1), "")
これらの計算式の仕組み
以下は、値を行ごとに並べる最初の計算式の詳細な内訳です。
=index($a$3:$c$5, quotient(column(a1)-1, columns($a$3:$c$5))+1, mod(column(a1)-1, columns($a$3:$c$5))+1)
計算式の中心では、INDEX関数を使って、範囲内の相対的な位置に基づいてセルの値を取得しています。
があります。 行番号 はこの式で計算されます。
quotient(column(a1)-1, columns($a$3:$c$5))+1
1,1,1,2,2,3,3,3, ...のように、各数値がソース範囲にある列の数だけ繰り返される繰り返し数列を生成することです。 そして、これを行う方法を以下に説明します。
QUOTIENT関数は、除算の整数部分を返します。
について 分子 この場合、COLUMN(A1)-1 を使用すると、数式が入力された最初のセルの 0 から、次のセルまでの通し番号が返されます。 n (この例では、E2 に 0、M3 に 8 が入力されています。
について 分母 この場合、COLUMNS($A$3:$C$5))を使用すると、範囲内の列の数(この例では3)に等しい定数が返されます。
その結果、QUOTIENT関数は最初の3セル(E3:G3)で0を返し、これに1を加えるので、行番号は1になります。
次の3つのセル(H3:J3)については、QUOTIENTは1を返し、+1は行番号2を与えます。 といった具合です。
を計算すること。 列番号 の場合、MOD機能を使って適切な数列を構築します。
mod(column(a1)-1, columns($a$3:$c$5))+1
この範囲には3つの列があるので、シーケンスは次のようになります。
MOD関数は、除算後の余りを返します。
E3では、MOD(COLUMN(A1)-1、COLUMNS($A$3:$C$5))+。
になる
MOD(1-1, 3)+1)
となり、1が返されます。
F3において、MOD(COLUMN(B1)-1、COLUMNS($A$3:$C$5))+。
になる
MOD(2-1, 3)+1)
となり、2が返されます。
行と列の番号が決まれば、INDEXはその行と列の交点にある値を簡単に取得することができます。
E3では、INDEX($A$3:$C$5, 1, 1)は、参照する範囲の1行1列目、つまりセルA3からの値を返します。
F3では、INDEX($A$3:$C$5, 1, 2)は1行2列目、つまりセルB3からの値を返す。
などなど。
2番目の数式は、列ごとに範囲をスキャンするものですが、行番号の計算にMODを、列番号の計算にQUOTIENTを使用する点が異なります。
TOROW機能が動作しない
TOROW関数の結果がエラーになる場合、これらの理由の可能性が高いです。
#NAME?エラー
多くのExcel関数では、#NAME?エラーは関数名が間違っていることを明確に示しています。 TOROWでは、その関数がお使いのExcelで使用できないことを意味する場合もあります。 Excelのバージョンが365以外の場合、TOROWの代替案を使用してみてください。
#NUMエラー
NUMエラーは、返された配列が1行に収まらないことを示します。 多くの場合、より小さな範囲ではなく、列や行全体を参照したときに発生します。
#SPILLエラー
多くの場合、#SPILLエラーは数式を入力した行に、結果をこぼせるだけの空白セルがないことを示唆しています。 隣のセルが視覚的に空いている場合は、スペースやその他の印刷できない文字がないことを確認してください。 詳細は、Excelで#SPILLエラーが意味するものを参照してください。
以上、エクセルでTOROW関数を使って2次元の配列や範囲を1行に変換する方法でした。 読んでいただきありがとうございました!来週のブログでお会いできるのを楽しみにしています。
練習用ワークブック(ダウンロード
Excel TOROW関数 - 計算式の例 (.xlsx ファイル)