知っておく必要のある5つのGoogleスプレッドシートスクリプト関数

Googleスプレッドシート(Google Sheets)は、MicrosoftExcelで実行できるほぼすべてのことを実行できる強力なクラウドベースのスプレッドシートツールです。しかし、 Googleスプレッドシート(Google Sheets)の真の力は、それに付属するGoogleScripting機能です。(Google Scripting)

Google Appsスクリプトは、 (Google Apps)Googleスプレッドシートだけで(in Google Sheets)なく、Googleドキュメント、Gmail、Googleアナリティクス(Google Analytics)、およびその他のほぼすべてのGoogleクラウドサービスでも機能するバックグラウンドスクリプトツールです。これにより、これらの個々のアプリを自動化し、それらの各アプリを相互に統合できます。

この記事では、Google Apps Scriptingの使用を開始する方法、セルデータを読み書きするためのGoogle Sheetsでの基本的なスクリプトの作成、および最も効果的な高度なGoogleSheetsスクリプト機能について学習します。

GoogleAppsScriptを作成する方法(How to Create a Google Apps Script)

今すぐ、 Googleスプレッドシート内から最初の(Google Sheets)GoogleAppsスクリプトの作成を開始できます。 

これを行うには、メニューから[ツール]、[(Tools)スクリプトエディター(Script Editor)]の順に選択します。

これにより、スクリプトエディタウィンドウが開き、デフォルトでmyfunction()という関数になります。ここで、 GoogleScript(Google Script)を作成してテストできます。

試してみるには、あるセルからデータを読み取り、そのセルで計算を実行し、データ量を別のセルに出力するGoogleスプレッドシートスクリプト関数を作成してみてください。(Google Sheets)

セルからデータを取得する関数は、getRange( )関数とgetValue()関数です。行と列でセルを識別できます。したがって、行2と列1(A列)に値がある場合、スクリプトの最初の部分は次のようになります。

function myFunction() {
   var sheet = SpreadsheetApp.getActiveSheet();
   var row = 2;
   var col = 1;
   var data = sheet.getRange(row, col).getValue();
}

これにより、そのセルの値がデータ(data)変数に格納されます。データに対して計算を実行してから、そのデータを別のセルに書き込むことができます。したがって、この関数の最後の部分は次のようになります。

   var results = data * 100;
   sheet.getRange(row, col+1).setValue(results);
}

関数の記述が完了したら、保存するディスクアイコンを選択します。 

このような新しいGoogleスプレッドシート(Google Sheets)スクリプト関数を(実行アイコンを選択して)初めて実行するときは、スクリプトをGoogleアカウントで実行するための(Google Account)承認(Authorization)を提供する必要があります。

続行する権限を許可します。スクリプトを実行すると、スクリプトが計算結果をターゲットセルに書き込んだことがわかります。

基本的なGoogleAppsScript(Google Apps)関数の記述方法がわかったところで、さらに高度な関数を見てみましょう。

getValuesを使用して配列をロードする(Use getValues To Load Arrays)

配列を使用して、スクリプトを使用してスプレッドシート内のデータを計算するという概念を新しいレベルに引き上げることができます。getValuesを使用してGoogleApps(Google Apps)スクリプトに変数を読み込む場合、変数はシートから複数の値を読み込むことができる配列になります。

function myFunction() {
   var sheet = SpreadsheetApp.getActiveSheet();
   var data = sheet.getDataRange().getValues();

データ変数は、シートのすべてのデータを保持する多次元配列です。データに対して計算を実行するには、forループを使用します。forループのカウンターは各行で機能し、データをプルする列に基づいて列は一定のままです。

このスプレッドシートの例では、次のように3行のデータに対して計算を実行できます。

for (var i = 1; i < data.length; i++) {
   var result = data[i][0] * 100;
   sheet.getRange(i+1, 2).setValue(result); 
   }
}

上記と同じように、このスクリプトを保存(Save)して実行します。すべての結果がスプレッドシートの列2に入力されていることがわかります。

配列変数のセルと行を参照することは、getRange関数を使用する場合とは異なることに気付くでしょう。 

data [i] [0]は、最初の次元が行で2番目の次元が列である配列次元を参照します。これらは両方ともゼロから始まります。

getRange(i+1, 2)は、i = 1の場合(行1がヘッダーであるため)、2番目の行を参照し、2は結果が格納される2番目の列です。

appendRowを使用して結果を書き込む(Use appendRow To Write Results)

新しい列ではなく新しい行にデータを書き込みたいスプレッドシートがある場合はどうなりますか?

これは、 appendRow(appendRow)関数を使用して簡単に実行できます。この関数は、シート内の既存のデータを気にすることはありません。既存のシートに新しい行を追加するだけです。

例として、1から10までカウントし、[カウンター(Counter)]列に2の倍数のカウンターを表示する関数を作成します。

この関数は次のようになります。

function myFunction() {
   var sheet = SpreadsheetApp.getActiveSheet();

   for (var i = 1; i<11; i++) {
      var result = i * 2;
     sheet.appendRow([i,result]);
   }
}

この関数を実行したときの結果は次のとおりです。

URLFetchAppを使用してRSSフィードを処理する(Process RSS Feeds With URLFetchApp)

以前のGoogleスプレッドシート(Google Sheets)スクリプト関数とURLFetchAppを組み合わせて、任意のWebサイトからRSSフィードを取得し、そのWebサイトに最近公開されたすべての記事のスプレッドシートに行を書き込むことができます。

これは基本的に、独自のRSSフィードリーダースプレッドシートを作成するためのDIYの方法です。(DIY)

これを行うためのスクリプトもそれほど複雑ではありません。

function myFunction() {
   var sheet = SpreadsheetApp.getActiveSheet();
   var item, date, title, link, desc; 
   var txt = UrlFetchApp.fetch("https://www.topsecretwriters.com/rss").getContentText();
   var doc = Xml.parse(txt, false);  

   title = doc.getElement().getElement("channel").getElement("title").getText();
   var items = doc.getElement().getElement("channel").getElements("item");   

// Parsing single items in the RSS Feed

for (var i in items) {
   item  = items[i];
   title = item.getElement("title").getText();
   link  = item.getElement("link").getText();
   date  = item.getElement("pubDate").getText();
   desc  = item.getElement("description").getText();
   
   sheet.appendRow([title,link,date,desc]);
}
}

ご覧のとおり、Xml.parseは(Xml.parse)RSSフィードから各アイテムを引き出し、各行をタイトル、リンク、日付、説明に分けています。 

appendRow関数を使用すると、 RSSフィード内のすべてのアイテムの適切な列にこれらのアイテムを配置できます。

シートの出力は次のようになります。

RSSフィードのURLをスクリプトに埋め込む代わりに、シートにURLを含むフィールドを作成し、監視するWebサイトごとに1つずつ、複数のシートを作成することができます。

文字列を連結(Concatenate Strings)し、キャリッジリターン(Carriage Return)追加します(Add)

いくつかのテキスト操作機能を追加することでRSSスプレッドシートをさらに一歩進め、次に電子メール機能を使用して、サイトのRSSフィード内のすべての新しい投稿の要約を含む電子メールを自分に送信できます。

これを行うには、前のセクションで作成したスクリプトの下に、スプレッドシート内のすべての情報を抽出するスクリプトを追加する必要があります。 

RSSデータをスプレッドシート に書き込むために使用したのと同じ「items」配列からのすべての情報を一緒に解析することにより、件名と電子メールのテキスト本文を作成する必要があります。

これを行うには、「items」のForループの前に次の行を配置して、件名とメッセージを初期化します。

var subject = ‘Latest 10 articles published at mysite.com’
var message = ‘’

次に、「items」forループの最後(appendRow関数の直後)に次の行を追加します。

message = message + title + '\n' + link + '\n' + date + '\n' + desc + '\n' + '\n \n';

「+」記号は、4つの項目すべてを連結し、その後に「」が続き、各行の後にキャリッジリターンが表示されます。各タイトルデータブロックの最後に、適切にフォーマットされた電子メール本文に対して2つのキャリッジリターンが必要になります。

すべての行が処理されると、「body」変数は電子メールメッセージ文字列全体を保持します。これで、メールを送信する準備が整いました。

GoogleAppsScriptでメールを送信する方法(How To Send Email In Google Apps Script)

Google Scriptの次のセクションでは、「件名」と「本文」をメールで送信します。GoogleScriptでこれを行うのは非常に簡単です(Google Script)

var emailAddress = [email protected];
MailApp.sendEmail(emailAddress, subject, message);

MailAppは、 (MailApp)Google Appsスクリプト内の非常に便利なクラスであり、Googleアカウントのメールサービスにアクセスしてメールを送受信できます。このおかげで、sendEmail関数を使用した1行で、メールアドレス、件名、本文だけで任意のメールを送信できます。(send any email)

結果の電子メールは次のようになります。 

WebサイトのRSSフィードを抽出し、それを(RSS)Googleスプレッドシート(Google Sheet)に保存し、URLリンクを含めて自分自身に送信する機能を組み合わせると、任意のWebサイトの最新コンテンツをフォローするのに非常に便利です。

これは、アクションを自動化し、複数のクラウドサービスを統合するためにGoogleAppsスクリプトで利用できる機能の一例にすぎません。(Google Apps)



About the author

私は長年 Android とオフィス ソフトウェアを扱ってきたコンピューター技術者です。私はまた、過去 5 年ほどの間、人々に Mac の使い方を教えてきました。あなたのコンピュータの問題を解決する方法を知っている人を探しているなら、おそらく私がお手伝いできるでしょう!



Related posts