葛飾でひっそり暮らすIT屋の G Suite メモ

Google Apps で快適業務ライフなノウハウを伝えます

Googleスプレッドシートで複数の範囲を連結する関数を自作した

Photo credit: Dakiny via Visualhunt / CC BY

Googleスプレッドシートを使っていて、複数のセル範囲を一列にまとめたい時があるんですね。

例えば、シート1とシート2に別々の顧客データがあって、全部のメールアドレスをリストにするとか。

そういうときに、それぞれのシートのメールアドレスをまとめる関数が見当たらなかったのです。

なので、作りました。

Googleスプレッドシートは自分で関数を作ることができるのでかなり便利です。

スクリプトだと、データを変更するたびに実行する必要がありますよね。

でも、関数ならデータの変更に合わせて再計算されるのでだいぶ楽です。

コードはこちら。

function CONCATRANGE(firstRowAsTitle) {
  var arr = Array.prototype.slice.call(arguments); // 引数を配列に変換しておく
  var resultArr = [];
  arr.shift(); // firstRowAsTitle を取り除いている
  arr.map(function(x) {
    if (firstRowAsTitle) x.shift(); // タイトル行を取り除く
    resultArr = resultArr.concat(x);
  })
  return resultArr.filter(function(x, i, self) {
    return x[0] !== ""; // 空白セルを除外する
  });
}

使い方は

=CONCATRANGE(最初の行がタイトル,セル範囲1,セル範囲2,...)

とセルに入力する。

「最初の行がタイトル」というところには "true" か "false" をいれます。

これは、指定したセル範囲の最初の行がタイトルの場合にそれを削除したうえで処理をするためのものです。

列をまるごと指定するときに活躍します。

こういう柔軟性がGoogleスプレッドシートのいいところですね。