以前の記事でトリガーを利用しスプレッドシートのセルを編集する毎にアラートを出すスクリプトを紹介しました。
【GAS】 スプレッスプレッドシートのセルを編集する毎に起動するトリガーの作成方法
今回はトリガー機能を応用し、
対象セルデータ取得→ある条件になったらフォルダを作成→URLを取得し対象列に貼付
このようなスクリプトを作成していきます。これによってフォルダだけでなくファイルの作成、他のスプレッドシートからデータ取得などが出来ます。
フォルダの場所を探す必要がなく一覧でURLを探すことができるので作業効率もあげられることができます。それでは説明していきます。
この記事の内容が役立つターゲット読者
- セルを入力した時に特定のプログラムを実行したい
- 関数ではなくプログラムコードで多岐にわたる処理をしたい
- getRow getColumnなどを上手く使いこなしたい
- フォルダ作成時にURLなどを取得したい
今回のサンプル
以下の画像のように1行目A列にID、B列に使用フォルダーと入力しております。
スクリプト内容:
(事前にインストーラブルトリガーでイベントを編集時に設定しておきます。設定方法は冒頭のリンクを参照してください。)
A列(A2以降)に文字を入力する→フォルダーが自動的にGoogle Driveに作成される→フォルダURLがB列の同じ行に入力がされる
このような内容のスクリプトを紹介します。
注意:初めてコードを実行する際にアクセス権限の許可を求められますが許可をしてください。アクセス権限についての詳細は以下の記事に詳しく載っています。
無料のGmailアカウントでGASに初回の実行許可を与える方法
完成スクリプト
以下のスクリプトをコピペしてスプレッドシートのA列B行に文字を記入してみてください。
//A列のセル編集時にフォルダーを作成し、そのURLをB列の同じ行に記入するプログラム *フォルダURLが入力されない場合は一度スプレッドシートを更新してみてください。 function createFolderURL(e) { var sheet = SpreadsheetApp.getActiveSheet(); var range = e.range; var row = range.getRow(); var column = range.getColumn(); if(column === 1 && row !== 1){ var folderName = "テスト"; var url = DriveApp.createFolder(folderMame).getUrl(); var targetRange = sheet.getRange(row, 2); targetRange.setValue(url); } }
コードの解説
A列B行に記入した文字(上記の画像だと A と入力した部分)を取得する方法に関しては、今回イベントオブジェクト(createFolderURL(e)の(e)の部分)で取得しています。
(以下のリンクにてイベントオブジェクトについて詳しく載っております。)
【GAS】スマホやタブレットからスプレッドシートのスクリプトを実行する方法
もちろん以下のように
var sheet = SpreadsheetApp.getActiveSheet(); var cell = sheet.getActiveCell();
アクティブセルを取得してセル情報を取得していくことも可能ですが、イベントオブジェクトを使用することによって様々なデータ(例えば入力する前のデータなど)が取得できますのでこちらの方法を使うことをお勧めします。
行・列の取得方法(getRow getColumn)
編集したセルの行・列を取得することによって様々な処理が可能になります。
例えば今回のように
A行A列にデータを入れた際にA行B列にデータを入れたい
入力したセルの列によって起動させるプログラムを変更したい
このような処理が簡単に行うことができます。この処理を行うためにe.rangeというメソッドを使用します。このメソッドを使用することにより、セルの情報を取得することができ、行と列の情報も取得することが可能になります。
行と列の取得メソッド(判定方法)
以下のメソッドを使用することによって行と列が取得できます。
getRow:縦(スプレッドシートの数字順の方向)
getColumn:横(スプレッドシートのアルファベット順の方向)
こちらのメソッドを使用する際に、どちらが行でどちらが列を取得できるか一瞬分からなくなることがあります。
ここで簡単に判別する方法があるので以下にまとめておきます。お役に立てば幸いです。
ColumnのCは右側が空いている
RowのRは下側が空いている
読者の方でいつも迷っているという方がいればこのように覚えてしまってください。
サンプル画像ではA2セル(A行B列)にAと入力していますので
row = 2
column =2と出てきます。
セル編集範囲の指定
トリガー(今回は編集時)を使うことによって、セルが編集されると起動するスクリプトが作成できるようになります。そのため何も条件を指定しないと全てのセルでスクリプトが起動されてしまいます。
ですので今回のスクリプトの6行目
if(column === 1 && row !== 1){}
こちらのように範囲を指定する必要があります。(1列目かつ2行目以降が条件になっています)1行目は項目になるので除外しています。
また今回のようなスクリプトではスプレッドシートに複数シートがある場合、どのシートでも1列目、2行目以降のセルを編集するとトリガーが起動してしまうのでシートを指定する方法も有効です。
.getSheetName() シートを指定するためにシート名を取得
でシート名を取得しトリガーを指定したいシート名だけを指定してみてください。
フォルダを作成しそのフォルダURLを取得するcreateFolderメソッドとgetUrlメソッド
条件が当てはまった場合、フォルダを作成しそのフォルダのURLを取得します。
var url = DriveApp.createFolder(foldername).getUrl();
該当はスクリプトの8行目の部分です。今回はルートフォルダに作成していますが指定フォルダに作成することも出来ます。createFolderについては以下の記事に詳細が書いてありますので確認してみてください。
【GAS】Googleドライブ上に新規フォルダを作成するcreateFolder
作成したフォルダのURLを取得し、貼り付けをしたいので.getUrl()メソッドを使用してリンクを取得しています。
このスクリプトによって
フォルダを作成→作成したフォルダのURLを取得
という作業が行われています。そして最後の2行のコードで取得したURLをセルの行(今回は2行目)の2列目に貼り付けるというところまでが今回のスクリプト作成でした。
まとめ
この記事では、セルを編集するたびにフォルダを作成、URLを取得しB列の同じ行に貼り付けるというプログラムを作成しました。またそれに関するGASスクリプト
使用する行・列の取得方法:getRow getColumn
編集するセルの範囲の指定方法:e.range
フォルダ作成からのURL取得方法:createFolderとgetUrl
以上の機能も合わせて紹介しました。今回の機能を応用することによってトリガー作業によって様々な設定をスプレッドシートに関数を記入せず完了することが出来ます。関数によって起こる起動時の遅さなども解消することにもなると思います。
ここまでお読みいただきありがとうございました。