Google Apps Script(GAS)からスプレッドシートのquery関数を使って行取得

Googleスプレッドシートをデータベースとして使いたかったのですが、シート全体を取得し一行ずつ条件に合うかどうかを調べるやり方はなかなか面倒な感じでしたので、他の方法を模索してみることにしました。

解決策

GoogleスプレッドシートにはQUERY関数という便利な関数がありますのでこれを使ってみます。

検索結果用のシート(別に同じシート内でも構わないのですが)を用意し、そこにデータのある別シートを範囲とするQUERY関数を実行すると、条件にマッチしたデータを含む表が出来ますので、それを取得すれば良いわけです。

やり方

QUERY関数

まずはQUERY関数の使い方ですが、以下のような何かの視聴予定や記録をつけた表があるとします。ここから、「観終った」作品で自分でつけた評価が80点以上のデータを抽出してみます。

検索結果用のシートのA1セルに、以下のように入力すると行タイトルと条件に合う行だけが抽出されます。

=QUERY(DATA!A:F,"WHERE C = '観終わった' AND D >= 80",1)

GAS

GASの基本的な作成・実行の手順は割愛します。

以下のような感じでデータを取得します。出力はログだけです。

function getMyData(){
   var ss_id = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
   var sh_name = 'QUERY';
   var sh = SpreadsheetApp.openById(ss_id).getSheetByName(sh_name);
   sh.getRange(1,1).setValue('=QUERY(DATA!A:F,"WHERE C = \'' + '観終わった' + '\' AND D >= 80",1)');
   const lastRow = sh.getLastRow();
   console.log(lastRow);
   for (var i=2; i<=lastRow; i++) {
     var title = sh.getRange(i, 2).getValue();
     var myval = sh.getRange(i, 4).getValue();
     console.log(title + ' ' + myval); 
   }
 }

スプレッドシートに直接クエリーを実行出来る?

QUERY関数のヘルからQuery languageに関するヘルプページへのリンクがあったので。ちょっと覗いてみるとどうやらスプレッドシートに対して直接クエリーを実行することも出来るようです・・・。これについても今度試してみたいと思います。

https://developers.google.com/chart/interactive/docs/querylanguage

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)