GASを使ったタスク管理作りの第2回目です!
今回はfor文について紹介しつつ、タスクのアラートメール送信するGAS作りの続きを行います。
for文はGASのなかでもよく使うコードなのでぜひ覚えて様々なプログラムに活用していきましょう!
前回までのおさらい
前回までの記事はこちらです。合わせてご覧ください。
前回まではスプシと今日の日付の取得を行いました。
今回は、スプシに書いた表の情報を取得します。
イメージ図を分解したものがこちらです。
繰り返し処理
表の情報を取得する時は繰り返し処理のコードfor文を行うことで取得できます。
for文の基本の形はこちらです!
for (初期化式; 条件式; 増減式){
条件式が正しい場合行う処理
}
初期化式、増減式など聞きなれない言葉が多いですよね…一つずつ紹介します!
初期化式とは簡単に言えばどこから繰り返しを始めるかということです。
タスク管理の表の場合、3行目から作業リストが書かれていますよね。
なので、3行目から始めるように初期化式を書きます。
初期化式には変数を使ってこのように書きます。
for (var i =3; 条件式; 増減式){
条件式が正しい場合行う処理
}
次の条件式はどの場合なら繰り返しの処理を行うかを指定します。
タスク管理の表の場合、繰り返しを何行目まで行うかを指定します。
この条件式を指定しないとGASはいつまで繰り返しを行うかが分からなくなってしまいます。
ちゃんと繰り返しの最後を指定してあげましょう!
表に記載がある最後の行まで繰り返せば表の情報がすべて取得できます。
そのため、スプシの最終行を取得するコードを追加しましょう!
このコードはfor文の条件式に使うデータなのでこの様にfor文の前に書きます。
var lastRow= sssheet.getLastRow();
for (var i =3; 条件式; 増減式){
条件式が正しい場合行う処理
}
最終行の取得が出来たら条件式を書きましょう。
条件式には比較演算子という物を使います。
比較演算子とは前後の値を比較して正しいか正しくないかを調べます。
なじみのある言葉で言うと、以上、以下、未満などの事です。
for文でよく使われる比較演算子はこの4つです!
演算子 | 意味 |
> | より大きい |
>= | 以上 |
< | より小さい |
<= | 以下 |
比較演算子にはほかにも種類がありますがそちらはif文というコードでよく使われます。
if文も今後紹介しますのでその時に一緒に解説します!
それでは比較演算子を使って条件式も書いてみたものがこちらです!
var lastRow= sssheet.getLastRow();
for (var i =3; i <= lastRow; 増減式){
条件式が正しい場合行う処理
}
この条件式はi(3行目)からlastRow(スプシの最後行まで)だったら処理してほしいを意味します。
最後に増減式です。
この増減式を指定しないと、ずっと同じ場所を繰り返し続けてしまいます。
そのため、条件式が正しい場合行った処理の後に増減を指定してあげましょう。
例えばタスク管理の表の場合、3行目から初めて最終行まで処理をしてほしいです。
最終行まで行くにはプラスかマイナスどちらが必要かを考え式を埋めましょう。
今回の表の場合は3行目から最終行まで向かうのでプラスしていく必要があります。
また表のすべての情報が1つずつほしいので増減の数は1つになります。
プラス、マイナスの書き方ですが、1プラスしたい時は++と書きます。
1マイナスしたい場合は–と書きます。
完成したfor文がこちらです!
var lastRow= sssheet.getLastRow();
for (var i =3; i <= lastRow; i++){
条件式が正しい場合行う処理
}
あとは{}の中で繰り返したい処理を書きます。
値の取得
作業リスト、期限、完了列の値を取得しましょう!
値の取得はこの様に書きます。
var 変数名 = sssheet.getRange(範囲).getValue();
範囲には列と行を指定します。
行数はfor文の中でiを使って取得できているので列+iと書きます。
//作業リスト列
var taskname = sssheet.getRange("B"+i).getValue();
//完了列
var comp = sssheet.getRange("D"+i).getValue();
//期限列
var taskdate = sssheet.getRange("C"+i).getValue();
変数名は分かり易いように作業リストであればtasknameなど英語で書くようにしましょう!
期限列は日付の取得で紹介したUtilities.formatDataを使ってスプシと同じ表示形式にしましょう!
//作業リスト列
var taskname = sssheet.getRange("B"+i).getValue();
//完了列
var comp = sssheet.getRange("D"+i).getValue();
//期限列
var taskdate = sssheet.getRange("C"+i).getValue();
//期限列の取得した値を指定の表示形式にする
var taskday =Utilities.formatDate( taskdate, 'Asia/Tokyo', 'yyyy/MM/dd');
ここで試しにconsole.logで繰り返しで取得した値を出力してみましょう!
このように表の最終行まで繰り返してデータが取得できました!
あとがき
今回は繰り返し処理、値の取得について紹介しました。
ここまで紹介したコードの全容がこちらです
function taskMail() {
var ssID = "スプシID";
var sssheet =SpreadsheetApp.openById(ssID).getSheetByName("作業一覧");
var date = new Date();
var today =Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy/MM/dd')
var lastRow= sssheet.getLastRow();
for (var i =3; i <= lastRow; i++){
var taskname = sssheet.getRange("B"+i).getValue();
var comp = sssheet.getRange("D"+i).getValue();
var taskdate = sssheet.getRange("C"+i).getValue();
var taskday =Utilities.formatDate( taskdate, 'Asia/Tokyo', 'yyyy/MM/dd')
}
}
この2つのコードはスプシと連携したGAS作成では必須で覚えた方がいいコードです!
今回のタスク管理以外でも例えばスプシのデータをコピペして見積書を作る時や、何か資料を作るなどなど…
何となく、データを取得しないといけないということがイメージ着くかと思います!
ぜひ今回紹介したコードを使ってスプシと連携したGASを作ってみましょう!
次回はタスク管理の最終回!条件文のif文について紹介します!
是非合わせてご覧ください。
コメント