第19回.いろいろな繰り返し処理
プログラミングにおいて、最も重要で最も多く使われるのが、条件分岐と繰り返し処理です。
ここまで説明してこなかった書き方も加えて、繰り返し処理の前提について説明します。
リファレンスにある反復処理
do...while | テスト条件が偽と評価されるまで指定された文を実行するループを作成します。 この条件は文が実行されたあとに評価され、その結果少なくとも 1 回は指定された文が実行されます。 |
for | 丸括弧で囲まれ、セミコロンで区切られた 3 つの式と、それに続くループ内で実行される文から構成されるループを作成します。 |
for...in | オブジェクトの列挙可能なプロパティに対し任意の順番で反復処理を行います。 それぞれ個別のプロパティに対し、文を実行できます。 |
for...of | 反復可能オブジェクト(配列、配列様のオブジェクト、イテレータとジェネレータを含む)を反復処理し、それぞれ個別のプロパティの値に対する実行文をともなった反復処理フックを呼び出します。 |
while | テスト条件が真と評価される間、指定した文を実行するループを作成します。 この条件は文が実行される前に評価されます。 |
この中では、forについては、
for each...in
と言うのもあったようで、
for...in
for...of
と合わせて、主に配列のループに使われたりしているようですが、「Legacy generator function」となっているので割愛します。
for
の再確認と、
do...while
while
および、
break
continue
について解説します。
繰り返し処理の例題
金額 = 単価 × 数量
の計算を行う場合で説明します。
for
statement
}
この式では、var キーワードを用いて新しい変数を任意で宣言してもかまいません。
これらの変数はループにローカルなものではありません。
つまり、ループの外でも有効な変数となります。
この式が true に評価されるなら、statement が実行されます。
この式が false に評価されるなら、実行は for の構成子に続く最初の式に飛びます。
これは、condition の次の評価の前に発生します。
カウンタ変数を更新または増加するために使われます。
statement
function mySample5() {
var sheet = SpreadsheetApp.getActiveSheet()
var tannka,suuryou,lastRow
lastRow = sheet.getLastRow()
for (var i=2; i<=lastRow; i++) {
tannka = sheet.getRange(i, 2).getValue()
suuryou = sheet.getRange(i, 3).getValue()
sheet.getRange(i, 4).setValue(tannka * suuryou)
}
}
第8回.最終行を取得して繰り返す
詳細は、第8回を参照してください。
do...while
statement
} while (condition);
condition が true に評価されるなら、statement は再度実行されます。
condition が false に評価されるときは、制御が do...while に続く文へ渡ります。
function mySample19_1() {
var sheet = SpreadsheetApp.getActiveSheet()
var tannka,suuryou,i
i=2;
do {
tannka = sheet.getRange(i, 2).getValue();
suuryou = sheet.getRange(i, 3).getValue();
sheet.getRange(i, 4).setValue(tannka * suuryou);
i++;
} while (sheet.getRange(i, 1).getValue() != "");
}
指定された文は少なくとも 1回は実行されます。
つまり、必ず1回はstatementが実行され、その後に条件判定されます。
上記のスクリプトの場合、2行目にデータが無い場合でも実行されてしまいます。
時に便利な場合もありますが、
forと、次のwhile で、全て代用できるので、無理に覚える必要はないでしょう。
while
statement
}
この条件が true に評価されるなら、statement が実行されます。
条件が false に評価されるときは、while ループの後の文に実行が続きます。
function mySample19_2() {
var sheet = SpreadsheetApp.getActiveSheet()
var tannka,suuryou,i
i=2;
while (sheet.getRange(i, 1).getValue() != "") {
tannka = sheet.getRange(i, 2).getValue();
suuryou = sheet.getRange(i, 3).getValue();
sheet.getRange(i, 4).setValue(tannka * suuryou);
i++;
}
}
ループに入る前に、条件が判定されます。
最初から条件が満たされなければ、1回もstatementは実行されません。
break
break [label];
であり、labelを指定できますが、使う必要が無い、というより、使わない方が良いでしょう。
ラベル付き文はどんなブロック文でもかまいません。
ループ文である必要もありませんが、ループからの脱出に使われることが多いです。
function mySample19_3() {
var sheet = SpreadsheetApp.getActiveSheet()
var tannka,suuryou
for (var i=2; i<=11; i++) {
tannka = sheet.getRange(i, 2).getValue();
suuryou = sheet.getRange(i, 3).getValue();
if (tannka == "") {
break;
}
sheet.getRange(i, 4).setValue(tannka * suuryou);
}
}
上記では、単価(B列)に値が入っていなければ、forのループを抜けています。
単価が空欄の行に達した時点でループを抜け、それ以降の行は佳さんしません。
一番内側のプロックからだけ抜けることになります。
for (・・・) {
break;
statement1
}
statement2
}
この場合のbreakは、
statement1を実行せずに、statement2に移ります。
continue
continue [label];
であり、labelを指定できますが、あまり使わない方が良いでしょう。
代わりに、
while ループの中では、条件へ戻ります。
for ループの中では、更新式へジャンプします。
continue 文には、プログラムが現在のループの代わりにループ文の次の反復へジャンプすることを可能にします。
この場合、continue 文は、このラベル付き文(ブロック文)の中にネストされている必要があります。
function mySample19_4() {
var sheet = SpreadsheetApp.getActiveSheet()
var tannka,suuryou
for (var i=2; i<=11; i++) {
tannka = sheet.getRange(i, 2).getValue();
suuryou = sheet.getRange(i, 3).getValue();
if (tannka == "") {
continue;
}
sheet.getRange(i, 4).setValue(tannka * suuryou);
}
}
上記では、単価(B列)に値が入っていなければ、forに戻りループを続けます。
単価が空欄の行は飛ばして、次の行に進むという事です。
結果として、単価が空欄の行以外は全て計算されます。
一番内側のプロックのラベル(for)に進みます。
for (・・・) {
continue;
statement1
}
statement1
}
この場合のbreakは、
statement1を実行せずに、内側(2行目)のforに移ります。
繰り返し処理の最後に
つまり、ループに入る前に、繰り返し回数を取得できることが多いはずだということです。
また、
continueは、ifのブロックにそれ以降を全て入れてしまえば同じことになりますが、
記述が分かり易くなったり見やすくなったりしますので覚えるようにしてください。
同じテーマ「Google Apps Script入門」の記事
第16回.Google Apps Scriptの文法
第17回.JavaScript リファレンス
第18回.組み込み関数を使う
第19回.いろいろな繰り返し処理
第20回.エラー処理(try・・・catch)
第21回.配列って何なんだ?
第22回.オブジェクト、メソッド、プロパティとは
第23回.行・列を操作する(挿入・削除・非表示・サイズ)
第24回.シートの挿入・削除・名前変更
第25回.スプレッドシート(ブック)の作成・名前変更
第26回.セルのコピー&各種ペースト
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.ブック・シートの選択(Select,Activate)|VBA入門
10.条件分岐(Select Case)|VBA入門
- ホーム
- その他
- Google Apps Script入門
- いろいろな繰り返し処理
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。