- 今回やりたかったこと
- ちょっとトリッキーなやり方
- WHEREとか使わない、ただ配列参照で結合したい場合
- 中間テーブルを作ることになっても良い場合
- 参考になったページ
- 脱線してたまたま見つけたけど便利そうな情報
Googleスプレッドシートには QUERY関数というSQLライクに指定範囲から情報を取得できる超便利な関数があります。2つのデータテーブルを結合したり、列を入れ替えたり、集計したり、WHERE句でフィルタしたりととにかく便利。
活用方法はいつもお世話になっているブログ「いつも隣にITのお仕事」さんがとてもわかり易いのでこちらを参照ください。
今回やりたかったこと
以下のように2つのフィールドの内容を結合して一つのフィールドにしたかったんです。
SQLっぽく書けるんだしCONCATで一発でしょー。と思いましたがダメでした。
CONCAT
は使えないらしい。Google先生できれば実装していただけると嬉しいです。
ちょっとトリッキーなやり方
「スプレッドシート QUERY CONCAT」で検索してたどり着いたStackOverflowには「CANCAT」はありませんとのコメントとともに transpose
関数で行列入れ替えをして結合処理をしたあとに再度 transpose
で元に戻して、余分に入った半角スペースを SUBSTITUTE
でもとに戻すという配列数式。
なんかもうちょっとスマートなやり方無いのかなと思いつつもWHERE句なども使いつつとなると仕方ないのかなと思います。
=ARRAYFORMULA( SUBSTITUTE( trim( transpose( query( transpose( QUERY(A:C, "select B, C where A>3") ), , COLUMNS( QUERY(A:C, "select B, C where A>3") ) ) ) ), " ", "" ) )
WHEREとか使わない、ただ配列参照で結合したい場合
ARRAYFORMULA
で配列同士を&で結合させるだけ。これなら簡単ですね。
=ARRAYFORMULA(B3:B & C3:C)
中間テーブルを作ることになっても良い場合
前述の配列同士を結合したものを中間テーブルとして、最終的に中間テーブルを再度QUERY関数で参照するという手もありますね。後々のメンテナンスも考えるとこのやり方がいいのかなぁ。
参考になったページ
脱線してたまたま見つけたけど便利そうな情報
これいい。GAS使わずになんちゃってCSV化できる。