memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

Googleスプレッドシートで独自ワークシート関数を作る

Googleスプレッドシートを使って、学内業務(時間割作成)用のツールをちょこちょこと作っています。

以下のような表(A〜D列)で担当者(X1〜X3)を検討します。

f:id:ke_takahashi:20190712110631p:plain

時間割を入力するときには、各科目の担当者名リストが必要になりますので、それをこの表(A〜D列)から作ろうってことです。

Excelでもできますが、データを共有することを考えてGoogleスプレッドシートにしています(大学でG Suitsを利用していることもあり)。

この表(A〜D列)から担当者名リストは作れないので。。。段階を踏みます。

まず、赤枠の表を、青枠に単純コピーします。

そして、シアンのセルに「=if(B2>0,F$1,"")」という式を入力します。もし「1」が立っていたら担当者名を表示する、という式です。普通です。

で、ここから本題。

青枠の名前表?のようなものができたので、あとは、これをまとめ(カンマ区切りにして)たいところです。

GASで作れなくはありませんが、あちこちに同じ処理が出てくるので、ワークシート関数って自作できるよな。。。と思ってぐぐって作りましたよ、ということです。

結構。。。大変でした。デバッグがなかなか難しく、権限がないとか怒られること多々で(Logger.logやBrowser.msgboxを使おうとすると権限が必要らしいのですが設定のしかたが難しく。。。少し調べましたが理解できませんでした)。。。結論は以下です。

まず、「ツール」ー「スクリプトエディタ」を選択して、コードとして以下を記入します。

function CSV_VALS(range) {
  return range[0].filter(function(v){return v;}).join(',');
}

ちなみに、これは横方向の選択範囲のみ有効です。もし縦にしたい場合はrange[0]をrangeにすればいいようです。

あとは、黄色のセルの場所に「=CSV_VALS(F2:H2)」と入力するだけです。知っておくと便利です。個人的にサラリーマンSEやってたときにはExcelVBAにお世話になりました。オレオレな設計補助ツールをよく作っていました。

いまやるならGASですね。

便利です。