TOROW関数も並べる方向が違うだけでほぼ同じです。
- 「=TOCOL(範囲)」という式で、複数行複数列のデータを縦1列に並べ替えることができます。
機能と構文
TOCOL関数の機能は「指定した範囲を縦1列に並べ替える」というものです。
構文は次のとおりです。
TOCOL(範囲[, 削除する値, スキャン順])
第1引数だけが必須です。
第2引数と第3引数に設定できる値は次のとおりです。
値 | 効果 |
---|---|
0 | すべての値を保持する(既定値) |
1 | 空白セルを削除する |
2 | エラーを削除する |
3 | 空白セルとエラーを削除する |
値 | 効果 |
---|---|
FALSE | 上の行から順に値をスキャンする(既定値) |
TRUE | 左の列から順に値をスキャンする |
基本的な使用例
次の画像ではG2セルに式を入力し、B2:E3の範囲に並ぶ8つの値を縦1列に並べ替えた結果を得ています。
G2セル
=TOCOL(B2:E3)
TRANSPOSE関数などと同様に指定した範囲を並べ替えるというだけの関数で、基本的にはとても単純です。
第2引数(削除する値)の効果と使用例
第2引数には次の4種の値を指定でき、省略した場合は0を指定したものとみなされます。
値 | 効果 |
---|---|
0 | すべての値を保持する(既定値) |
1 | 空白セルを削除する |
2 | エラーを削除する |
3 | 空白セルとエラーを削除する |
以下では0以外を指定する例を見てみます。
まずは1を指定した例です。
並べ替えの対象とするB2:E3の範囲には空白セルが1つ含まれていますが、並べ替えに伴い削除されているのがわかります。
G2セル
=TOCOL(B2:E3,1)
空白セル(値がない)は削除されますが、空文字列(="")は削除されないので注意が必要です。
次に2を指定した例です。
B2:E3の範囲には2つのエラー(#N/Aと#VALUE!)が含まれていますが並べ替えと共に削除されているのがわかります。
G2セル
=TOCOL(B2:E3,2)
なお空白セルが0に変換されているのが気になるかもしれませんが、これについては「=TOCOL(IF(B2:E3="","",B2:E3),2)」とすれば空白セルは空文字列になります。
こちらは3を指定した例です。
並べ替えと共に空白セルとエラー、合わせて3つのセルの内容が削除されているのがわかります。
G2セル
=TOCOL(B2:E3,3)
この場合も空文字列は削除されません。
第3引数(スキャン順)の効果と使用例
第3引数には次の2種の値を指定でき、省略した場合はFALSEを指定したものとみなされます。
値 | 効果 |
---|---|
FALSE | 上の行から順に値をスキャンする(既定値) |
TRUE | 左の列から順に値をスキャンする |
まずはFALSEを指定した例です(結果は一番最初の画像と同じですが、比較のため再掲します)。
対象となるB2:E3セルの範囲を上の行から順にスキャンしていくので、上の方にある値が並べ替え後には上に並びます。
G2セル
=TOCOL(B2:E3,,FALSE)
次の画像はTRUEを指定した例です。
対象となるB2:E3セルの範囲を左の列から順にスキャンしていくので、左の方にある値が並べ替え後には上に並びます。
G2セル
=TOCOL(B2:E3,,TRUE)
応用例
利用例が思いつきにくそうな関数ですが、検索やデータ変換に重要な役割を果たします。
フィルタ代わりにする
エラーや空白セルを削除するだけならFILTER関数よりずっと簡単にできるので、もともと1列の配列に対して使っても便利です。
クロス抽出の逆
クロス表内の値から見出し行(列)を検索・抽出するのは厄介でしたが、TOCOL関数を使って実現できます。詳しくは次の記事で紹介しています。
アンピボットなど
データの形式を変換するのに役立ちます。具体例として次のようなものが挙げられます。