いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Gスプレッドシート)カンマ区切りされた値を任意の順番に並べ替える

 Googleスプレッドシートで、カンマ区切りで記録されている値の順番を自由に並べ替える方法についてです。
 カンマ区切りだけでなく別の区切り文字であっても応用できます。

  • SORT関数とSPLIT関数を使って、カンマ区切りされている値の順番を自由に並べ替えることができます。

手順

f:id:accs2014:20190609112757p:plain:right:w650

 セルB3に、カンマ区切りの値が記録されています。
 カンマが連続しているところがあり、カンマの間を含めると7つの部分に区切られていることに注意してください。
 これに対し、C3セルに次のように入力します。

=JOIN(",",SORT(TRANSPOSE(SPLIT(B3,",",,FALSE)),{4;1;2;6;3;7;5},TRUE))

 SPLIT関数で値を分割し(カンマが連続しているのを無視せず、空白として分割する)、TRANSPOSE関数で縦に並べ替え、SORT関数で並べ替えます。ただしソートの基準となる値は配列「{4;1;2;6;3;7;5}」とし(セミコロン区切りにすることに注意)、昇順とします。最後にJOIN関数で再度カンマ区切りに戻します。
 配列「{4;1;2;6;3;7;5}」により並べ替えの順番を指定しています。配列の要素の数は「カンマの数+1」とする必要があります。この例では配列の2番目の値が「1」なので、カンマ区切りの2番目の値つまり「B」が最初に来ます。INDEX関数のように考えると4番目の値(空白)が最初に来るように思えますが、そうではありませんので注意してください。
 

f:id:accs2014:20190609112754p:plain:right:w400

 実行結果です。
 なお、SORT関数ではなくINDEX関数と組み合わせる方法もありそうですが、エラーが出てうまくいかない模様です。

 ちなみに、カンマが連続する箇所を無視する(空白として分割しない)場合は下記のようにします。カンマが連続する箇所がない場合は上記と同じ結果になりますが、ある場合は(取得される値の数と{ }内の数字の数が一致しないため)エラーになります。カンマの連続を無視すると項目数が不定になり扱いにくいため、あえてこちらを用いる意味はなさそうです。

=JOIN(",",SORT(TRANSPOSE(SPLIT(B3,",")),{4;1;2;3;5},TRUE))