カメリアの記事

意味があることやないことを綴ります

公開しても仕方ない GAS の魅力

GAS は Google のオフィスアプリで使えるプログラムです。僕はもっぱら Google スプレッドシートで、個人的な独自関数として利用しています。 JavaScript が書けるなら使わない手はないでしょう。なんせ、これがあるからできること、があるのですから。

ニッチ

それにしてもニッチな独自関数が出来上がります。自分の用途にだけマッチした関数なんですから。というか、せっかく作ったプログラムですから公開したいんですが、こんなニッチさだから公開の意味がない。誰も使わないし、使い方を説明することも難しい。なんて惜しいんでしょう。

ニッチさゆえの魅力

でもそれくらい自分の用途に合ったものが作れるのですから便利さはひとしおです。冒頭でも書きましたが「 GAS があるからできること」があるのです。逆を言えば、 GAS がなければできないことがあるんですね。これは大きな違いです。まさに魅力の源泉。

例えば

下の独自関数は Google スプレッドシートのプロットに書き込んだ伏線を一つのセルにまとめて表示するものです。僕以外の人がそう聞いても「ふうん」としかならないでしょう。僕もそうとしかなりませんし。でも実際は力を発揮しているんですよ。 GAS は素晴らしいですね。

// # vJoin
// ## 機能
// * srcObj の各行において index で示す正規表現が indexPos 番目の値と等しければ itemPos 番目の値を join する
// * セパレータは sep で指示するが省略できる
// * 表示オプションは dispOpt で指示するが省略できる
//
// ## 利用例
// * 提示情報などをまとめる
// * 伏線をまとめる
function vJoin(srcObj, index, indexPos, itemPos, sep, dispOpt) {
  let lineBeg0 = ""
  let lineBeg1 = ""
  if (!sep) {
    sep = ", "
  }
  if (!dispOpt) {
    lineBeg0 = RegExp(".*")
    lineBeg1 = ""
  } else if (dispOpt === "index") {
    lineBeg0 = RegExp("(.*)")
    lineBeg1 = "$1 "
  }
  return srcObj.filter(w => String(w[indexPos - 1]).match(index) !== null && String(w[itemPos - 1]) !== "").map(w => String(w[indexPos - 1]).replace(lineBeg0, lineBeg1) + w[itemPos - 1]).join(sep)
}