Google Apps Scriptで繰り返しと条件分岐を組み合わせて、データの仕分けを自動化するExcel VBAプログラマーのためのGoogle Apps Script入門(6)(2/2 ページ)

» 2017年04月13日 05時00分 公開
[薬師寺国安PROJECT KySS]
前のページへ 1|2       

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++;
  }
}
リスト4 リスト1の処理を「for…in」で実現した

 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);
}
リスト5 リスト2のコードをdo〜while文で実現するコード

 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++;
  }
}
リスト6 リスト3のコードをwhile文で実現するコード

 これも、ほとんどリスト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をマスターされている方なら、これらの構文の使い方は容易に理解できたのではないだろうか。

 次回は、今回学んだ条件分岐と反復処理を組み合わせた使い方を応用して、データの移動、コピー、選択、挿入、削除の仕方について解説する。

参考文献

著者プロフィール

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年に薬師寺聖と結成したコラボレーション・ユニット


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。