2021年6月28日月曜日

Google apps script とスプレッドシートでスプレッドシート比較ツールを作ってみる

Google apps scriptというのをたんなるエクセルのマクロのような存在と思いこんでいたりすると、大きなまちがいだなと最近すごく感じています。

実際に、これを使うと、簡単なウェブアプリケーションが作れたりします。例えば、Slackの会話を添付ファイル込みでエクスポートするWebアプリケーションも作れたもします。

 また、Google apps scriptとスプレッドシートをの組み合わせもいい基盤です。入力と出力を必要とするようなツール基盤としていろいろ便利な存在です。

以下の具体例を交えて説明しておきます。

Google apps scriptを使うとカスタムメニューを追加することができます。

コードは簡単です。こんな風に書くだけです。

function onOpen() {
  SpreadsheetApp.getUi()
      .createMenu('比較ツール')
      .addItem('比較実行''executeCompare')
      .addToUi();
}

Spreadsheetのうち一つのシートをパラメータ設定用のシートにして、結果を出力するシートをもう一つ作ると、
パラメータをセットした後に、ツールを実行ということができるようになります。

イメージとして、実際のサンプルツールを作ってみました。
こちらは、2つのスプレッドシートを比較するツールになります。


こちらのスプレッドシートをコピーして実行してみてください。

使い方も簡単に書いておきます。

上の図のようにvarsのシートに
  1. 比較したいスプレッドシートのURLを記載します。
  2. 比較したいシートの名称を記載します。
  3. キーとなるカラムを指定します。(複数時には、カンマ区切り)
  4. 比較したいカラムを指定します。(複数時には、カンマ区切り)
これらをセットして、メニューの比較ツール→比較実行から実行すると、Resultタブに結果が出てきます。
それ以外のシートは作業用です。

結果の例)



比較に使えるサンプルも用意してみましたのでそのまま実行できるのではないかと思います。

30分くらいでぱっと作ったものなので、バグってたらすいません。

2つのファイルを比較するって比較的ニーズはありそうなんですが、もしも、こんなこともやれるようにしたいなどのご要望があったら、
コメント欄からいただければ、ちょっとここから改善してみるかもしれません。

声がなくても、自分用にいろいろ改善していこうかと思っています。

2021年3月22日月曜日

Googleスプレッドシートのフィルタに別シートのListを使ってフィルタしたい

 フィルタするときのフィルタに指定する値を別表に書いているものを使ってフィルタしたいという例があると思います。

例えば、

表1:

A1
B2
C3
D4
B5
A6
B7
C8
C9
D10

表2:

A
B

があり、表1をA,Bでフィルタをかけたいというようなイメージです。


SQLのイメージ的にいうと

SELECT * from 表1 where ID in (SELECT ID from 表2)

みたいなイメージのことをSpreadSheetを使ってやりたいなというところです。


これどうやってやるのが一番簡単なのかちょっといろいろ探ってみたのですが、

おそらく、FILTER関数とMATCH関数を使って実現するのがよさそうです。


書き方は下記の感じです。

=FILTER(フィルタしたい票の範囲,MATCH(フィルタしたい範囲の条件部分,フィルタを掛けたい値の別表,0))

実例はこちらになります。

=FILTER(A1:B10,MATCH(A1:A10,'別表2'!A1:A2,0))


実際のサンプルスプレッドシートはこちらです。

https://docs.google.com/spreadsheets/d/1tSr8mukLFhREQCYxy6gsp2QUz9-Ie6liPV7uHt3fOh0/edit?usp=sharing