Google Apps Scriptで繰り返しと条件分岐を組み合わせて、データの仕分けを自動化する:Excel VBAプログラマーのためのGoogle Apps Script入門(6)(2/2 ページ)
Googleが提供するGoogle Apps Script(GAS)のプログラミングで、Google Apps(主にスプレッドシート)を操作する方法を解説していく連載。今回は、条件分岐とfor文を組み合わせた少し複雑な処理について解説する。 また、for文以外の繰り返し処理についても、その使い方を解説する。
for文以外の繰り返し処理
次は、前回紹介したfor文以外の繰り返し処理とif文の組み合わせについて見ていこう。
配列とインデックスを使う繰り返し処理for〜in文
for〜in文の書式
for({index} in {配列}){
{処理}
}
{index}には、{配列}のインデックスを格納する変数を指定する。
ここからも図1の表を使用する。まず、リスト1で行った処理をfor〜in文で実現してみよう。
「スクリプトエディタ」から「反復処理1」というファイルを作成する。「反復処理1.gs」内に、リスト4のコードを記述する。
function myloopFunction() { var sheet=SpreadsheetApp.getActiveSheet(); var value={}; var values=sheet.getRange("B3:B10").getValues(); var i=0; for(index in values) { value[index]=values[i]; if(value[index] >= 65) { sheet.getRange(i+3,3).setValue("◎"); } i++; } }
getValuesは配列を返すので、6〜14行目で、インデックスの配列を格納する変数indexを用意して、配列変数valuesの値を同じく宣言している配列変数valueに格納している(8行目)。後は、リスト1と同じ説明だが、配列を取り出す変数として「i」を宣言して「0」で初期化しておく(5行目)。この例の場合は「i++;」で配列変数から順番に値を取得して条件分岐を行っている(13行目)。
リスト4の実行結果は図2と同じになる。
条件が満たされるまで繰り返すdo〜while文
次は、do〜while文を使ってみよう。リスト2と同じことを、do〜while文で実現してみるには、どうすればいいだろうか。
do〜while文の書式
do{
{処理}
}
While({条件式})
「スクリプトエディタ」から「反復処理2」というファイルを作成する。「反復処理2.gs」内に、リスト5のコードを記述する。
function myloop2Function() { var sheet=SpreadsheetApp.getActiveSheet(); var value={}; var values=sheet.getRange("B3:B10").getValues(); var count=values.length; var i=0; do{ value[i]=values[i] if(value[i] >= 65) { sheet.getRange(i+3,3).setValue("◎"); }else{ sheet.getRange(i+3,3).setValue("×"); } i++; }while(i < count); }
whileの後ろに、繰り返し変数「i」が、取得した配列変数に格納されたデータの個数分より小さい間(16行目)、do〜while内の処理を繰り返すことになる。この例の場合の繰り返し変数「i」は1ずつ増加させる必要がある(15行目)。
実行結果は図3と同じだ。
条件が真の間、処理を繰り返すwhile文
最後に、while文を使ってみよう。リスト3と同じことを、このwhile文で実現してみるにはどうすればいいのだろうか。
while文の書式
while({条件式}){
{処理}
}
「スクリプトエディタ」から「反復処理3」というファイルを作成する。「反復処理3.gs」内に、リスト6のコードを記述する。
function myloop3Function() { var sheet=SpreadsheetApp.getActiveSheet(); var value={}; var values=sheet.getRange("B3:B10").getValues(); var count=values.length; var i=0; while(i < count) { value[i]=values[i] if(value[i] >= 65) { sheet.getRange(i+3,3).setValue("◎"); }else if(value[i] >= 50 && value[i] < 65){ sheet.getRange(i+3,3).setValue("○"); }else{ sheet.getRange(i+3,3).setValue("×"); } i++; } }
これも、ほとんどリスト3と変わらない。
whileの後の条件式に、繰り返し変数「i」が、配列変数のデータの個数を格納している、変数countより小さい間(7行目)、8〜17行目で、値を取得し、値を取得する過程で、点数によって条件分岐を行っている。この例の場合の繰り返し変数「i」は1ずつ増加させる必要がある(18行目)。
実行結果は図4と同じだ。do〜whileとwhileの違い
Excel VBAとの違い、
for〜in文と同じような、配列とインデックスを使う繰り返し処理として、Excel VBAにも「For Each〜Next」文がある。これは書式が異なるだけで、使い方はJavaScriptとほとんど変わりはない。
while文についても、Excel VBAには「Do While〜Loop」という書き方がある。条件が成立している間、処理を繰り返し実行する。do〜while文は、この条件が最初に来るか、最後に来るかの違いだけだ。
詳細は、記事「初心者のためのJavaScript入門(5):JavaScriptで繰り返し処理をしてみよう!」を参照してほしい。
次回は、データの移動、コピー、選択、挿入、削除の仕方
今回は、これで終わりだ。条件分岐と反復処理を組み合わせた使い方を見てきたが、Excel VBAをマスターされている方なら、これらの構文の使い方は容易に理解できたのではないだろうか。
次回は、今回学んだ条件分岐と反復処理を組み合わせた使い方を応用して、データの移動、コピー、選択、挿入、削除の仕方について解説する。
参考文献
- 『Google Apps Scriptビギナーズガイド Kindle版』(掌田津耶乃 著、Tuyano-Project刊)
著者プロフィール
PROJECT KySS 薬師寺 国安(やくしじ くにやす)
1950年生まれ。フリーVBプログラマー。高級婦人服メーカーの事務職に在職中、趣味でVBやActiveXに取り組み、記事を執筆。2003年よりフリー。.NETやRIAに関する執筆多数。Windowsストアアプリも多数公開中(約270本)。
Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
PROJECT KySSは、1997年に薬師寺聖と結成したコラボレーション・ユニット
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Excelマクロ/VBAリファレンス用途別・キーワード別一覧超まとめ
- 初心者のためのJavaScript入門
- ピボットテーブルとは何か──「そもそも、何をする機能か」を理解する
Excelを通じて「ピボットテーブル」の基礎を学び、データ分析を実践するまでを習得する本連載。初回はピボットテーブルの基礎と、「どんなことができるのか」を解説する。