Google Apps Scriptで値の変更をトリガーにしつつ変更されたセルの行番号と列番号を知る

trigger

photo credit: Giorgio Galeotti Non-Violence – UN, New York, NY, USA – August 18, 2015 via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Google Apps Scriptでチームで使えるタスク管理ツールをスプレッドシート、Googleフォーム、Googleカレンダーで作成するシリーズです。

前回の記事はこちらです。

Googleフォームの送信があったときにイベントの予定をGoogleカレンダーに入れる
チームで使えるタスク管理ツールをスプレッドシート、フォーム、カレンダーで作成しています。今回はGoogle Apps Scriptを使って、フォームからの送信を受けてカレンダーにイベント追加する方法です。

Googleフォームからの新規タスクを入力がると、タスク管理用のGoogleカレンダーのタスク期限の日時にイベントが追加されるという処理を作成しました。

今回から、スプレッドシートのタスクのステータスが「完了」にされたときの処理を考えてきます。

まず、Google Apps Scriptのイベントトリガー「値の変更」の使い方と、値の変更されたセルの位置を知る方法から解説をします。

これは、かなりあちこちで使えるテクニックですので、ぜひマスター頂ければと思います。

スポンサーリンク

前回までのおさらい

Googleフォームからタスクを入力すると、スプレッドシートにその情報が追加されます。これは、通常のGoogleフォームの動きですね。

このスプレッドシートにフォームからの情報通知があったということをトリガーに、イベント追加のスクリプトが起動して、以下のようにカレンダーに追加されつつ

Google Apps Scriptでタスクをイベントとしてカレンダーに追加

スプレッドシートにはE列イベントIDと、F列ステータスが入力される

Google Apps ScriptでカレンダーのイベントIDとステータスを入力

というところまで前回進めました。

Googleフォームの送信があったときにイベントの予定をGoogleカレンダーに入れる
チームで使えるタスク管理ツールをスプレッドシート、フォーム、カレンダーで作成しています。今回はGoogle Apps Scriptを使って、フォームからの送信を受けてカレンダーにイベント追加する方法です。

今回は、スプレッドシートのF列が「未完」から「完了」に切り替わったときにスクリプトを起動させる、という点を進めていきます。

イベントトリガー「値の変更」を設定する

まず、スプレッドシートの特定のセルの値が変更されたときを検知して、スクリプトを起動させる必要があります。

その場合は、イベントトリガー「値の変更」を使えばOKですね。

例えば、showStatusという関数を起動させるのであればメニューの「リソース」→「現在のプロジェクトのトリガー」からウィンドウを開いて、「新しいトリガー」をクリック。

そこで、実行を「showStatus」、イベントを「スプレッドシートから」「値の変更」を選択して、「保存」ですね。

Google Apps Scriptで値の変更をイベントトリガーにする

これで、スプレッドシートの任意のセルに値の変更があった場合には、都度「showStatus」が実行されることになります。

値の変更があったセルの位置を知る方法

次にスプレッドシートの中で値が変更されたのはどのセルなのか?を知る必要があります。

例えば、F2セルが「完了」に変更されたのであれば「牛乳を買う」というタスクについてGoogleカレンダーのイベント名を変更しますし、F列でないセルであれば何の処理も実行する必要もありません。

getActiveCellで変更されたセル位置を取得

値が変更されたセルの位置を知るということは、言い換えれば「今、カーソルがあるセル」の位置を知るということと同義ですから、アクティブなセルの位置を返すgetActiveCellメソッドを使います。

Sheetオブジェクト.getActiveCell()

getRowとgetColumnでセルの位置を取得

また、指定のセルの行番号および列番号を取得する場合は、Rangeオブジェクトに対してそれぞれgetRow、getColumnメソッドを使います。

Rangeオブジェクト.getRow()
Rangeオブジェクト.getColumn()

値の変更があったセルの位置を表示するスクリプト

それでは、上記メソッドを使って、値の変更があったセルがどこなのかを調べて、その結果を返すスクリプトを作成してみましょう。

こちらをご覧下さい。

function showStatus(){

  var mySheet = SpreadsheetApp.getActiveSheet(); //シートを取得
  var myCell = mySheet.getActiveCell(); //アクティブセルを取得

  if(myCell.getColumn()==6){ //アクティブセルがF列かを判定
    Browser.msgBox(myCell.getRow() + '行目のステータスが変更されました');
  }
}

まず4行目でアクティブセルを取得しています。

そして6行目のif文ですが、アクティブセルの列番号を調べてそれが6つまりF列「ステータス」かどうかを判定して、そうであればその行番号を調べてメッセージを表示します。F列でない場合は何の処理もしない、ということになりますね。

実行結果

では、こちらを保存して実行してみましょう。

例えば、スプレッドシートでセルF3のステータスを「完了」に変更してみますと

Google Apps Scriptで値の変更があったセルの行番号を表示する

このように「3行目のステータスが変更されました」とメッセージが表示されます。

別のセル、例えばA6セルに何か入力してみても

Google Apps Scriptで値の変更が処理の対象とならない場合

特に何も起きません。

まとめ

以上、イベントトリガー「値の変更」の使い方と、値の変更があったセルの行および列を知る方法についてお伝えしました。

getActiveCell、getRow、getColumnはセットで使う場合が多いと思うので、ぜひまとめて覚えておきたいですね。

次回ですが、実際にGoogleカレンダーのイベント名を変更していく処理についてお伝えしていきます。

Google Apps ScriptでGoogleカレンダーのイベントタイトルを変更する方法
Google Apps Scriptとスプレッドシート、フォーム、カレンダーを使って、チームで使えるタスク管理ツールを作成しています。今回はGoogleカレンダーのイベント名を変更する方法です。

どうぞお楽しみに!

連載目次:スプレッドシート、フォーム、カレンダーで作るタスク管理ツール

本シリーズはチームで使えるタスク管理ツールをG Suiteのスプレッドシート、フォーム、カレンダーを組み合わせて作ってしまおう!というものです。手軽にビジュアルでわかりやすいツールを作れますよ。
  1. 入力インターフェースとして超優秀!Googleフォームで新規タスクを入力する
  2. Googleフォームの送信があったときにイベントの予定をGoogleカレンダーに入れる
  3. Google Apps Scriptで値の変更をトリガーにしつつ変更されたセルの行番号と列番号を知る
  4. Google Apps Scriptでカレンダーのイベントタイトルを変更する方法
タイトルとURLをコピーしました