いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)TOCOL関数の使い方

 Googleスプレッドシートで2023年2月にExcelから輸入された、TOCOL関数の使い方についてです。
 従来のFLATTEN関数に似ていますが機能が拡張されています。なおTOROW関数も利用可能となっており、並べる方向が違うだけでほぼ同じです。

  • TOCOL関数により複数行複数列からなるデータを縦1列に並べ替えることができます。

機能と構文

 TOCOL関数の機能は「指定した範囲の値を縦1列に並べ替える」というものです。
 構文は次のとおりで、第1引数だけが必須となっています。

TOCOL(範囲[, 無視する値, スキャン方向])

 第2引数と第3引数に設定できる値は次のとおりです。 

第2引数の設定値
効果
0すべての値を保持する(既定値)
1空白セルを削除する
2エラーを削除する
3空白セルとエラーを削除する

第3引数の設定値
効果
FALSE上の行から順に値をスキャンする(既定値)
TRUE左の列から順に値をスキャンする

基本的な使い方

 次の画像ではG2セルに式を入力し、B2:E3の範囲にある8つの値を縦1列に並べ替えた配列を得ています。

 G2セル

=TOCOL(B2:E3)

 関数のタイプとしてはTRANSPOSE関数などと同様で、範囲を指定するだけで面倒な並べ替えが簡単にできる、というものになっています。

第2引数(無視する値)の効果と使用例

 第2引数には次の4種の値を指定できます。省略した場合は0を指定したものとみなされます。

効果
0すべての値を保持する(既定値)
1空白セルを削除する
2エラーを削除する
3空白セルとエラーを削除する

 以下では0以外を指定する例を見てみます。



 まずは1を指定した場合です。
 並べ替えの対象範囲に空白セルが1つ含まれていますが、並べ替えた結果には含まれておらず削除されているのがわかります。
 なお削除されるのは空白セルのみで、空文字列(="")は削除されません



 次に2を指定した場合です。
 対象範囲に2つのエラー(#N/Aと#VALUE!)が含まれていますが、並べ替えと共に削除されています。
 ところでExcelと違って空白セルが0にならないのがありがたいです。XLOOKUPやFILTERでもそうですが、これはGoogleスプレッドシートのアドバンテージといっていいと思います。



 最後に3を指定した場合です。
 空白セルとエラー、合わせて3つの値が削除されているのがわかります。空文字列は削除されません。 

第3引数(スキャン方向)の効果と使用例

 第3引数には次の2種の値を指定できます。
 省略した場合はFALSEを指定したものとみなされます。

効果
FALSE上の行から順に値をスキャンする(既定値)
TRUE左の列から順に値をスキャンする


 次の画像はFALSEを指定した場合です。内容的には一番最初の画像と全く同じですが比較のため掲載します。
 この場合、対象範囲を上の行から順にスキャンしていくので、元のデータにおいて上の方にある値が並べ替え後も上に並びます。



 こちらはTRUEを指定した場合です。
 対象範囲を左の列から順にスキャンしていくので、元のデータにおいて左の方にある値が並べ替え後に上に並びます。

FLATTEN関数との違い

 従来使われていたFLATTEN関数との違いですが、第1引数だけ使っている限りは全く同じ結果になります。
 つまり違いは上記で紹介した第2引数以降の機能、ということになります。

応用例

フィルタとして使う

 もともと1列の配列に対して、空白セルやエラーを削除するために使うという使い方ができます。
 FILTER関数を使うより簡単です。