Officeスクリプトのwhile文で繰り返し処理を習得!無限ループを防ぐポイントも解説

当ページのリンクには広告が含まれています。
Officeスクリプトでwhile文の使いかたアイキャッチ

「Officeスクリプトで条件を満たすまでループするにはどうしたらいいの?」
そんなこと思ったことありませんか?


・繰り返し処理は、forEachやfor文以外にも方法があるの?

条件を満たすまでループを続けたい場合にはどうすればいいの?

その場合は、Officeスクリプトの「while文」を
使用すると解決します!


この記事では、Officeスクリプトのwhile文を詳しく解説します。

Officeスクリプトのwhile文を使うと、特定の条件が満たされるまで繰り返し処理を行いながら動的にループを制御する方法と、無限ループを防ぐための適切な終了条件の設定について解説します。

この記事では、while文の基本的な使い方を解説し、実際にどのように利用するかを具体的な例を通じて学んでいきます。
繰り返し処理の考え方を深め、Excelスクリプトの自動化をさらに強化しましょう。


【 この記事の概要 】

よく使う度
難しさ
覚えておくと安心度
目次

この記事を読むと「できるようになる」こと

この記事を読むことで、次のことができるようになります。

Officeスクリプトの繰り返し処理「while文」とは? | 他の繰り返し処理との違いと使い分け

Officeスクリプトでは、繰り返し処理を行うためのさまざまな方法が用意されています。

その中でも、「while文」は、特定の条件が満たされるまで繰り返し処理を行えるため、動的なループ制御が必要な場合に非常に便利です。
while文を活用することで、例えばセルの値が特定の数値に達するまで自動で処理を続けるといった操作が簡単に実現できます。

以下に、Officeスクリプトで使える繰り返し処理の種類と、その特徴をまとめました。
それぞれのループの特徴を知っておくと、シーンに合わせて最適なループを選べるようになります。

Officeスクリプトの繰り返し処理の種類

スクロールできます
繰り返し処理
の種類
特徴と使い方主な用途
for文事前に決めた回数だけ処理を繰り返す固定回数の繰り返しが必要な時
forEach文配列やリスト内の各要素に順番に処理を行う配列やリスト全体に操作をしたい時
map配列の各要素を変換し、新しい配列を作成配列内のデータを変換したい時
filter条件に合った配列の要素を抽出し、新しい配列を作成条件に合う要素だけを抽出したい時
while文特定の条件がtrueである間、処理を繰り返す条件に基づく動的な繰り返しが必要な時
do…while文少なくとも1回は処理を行い、条件に基づき繰り返す条件次第で複数回処理する時
引用元 : Officeスクリプトでできるfor文の繰り返し処理|基本から応用まで

Officeスクリプトの「while文」の構成・使い方について

Officeスクリプトで「while文」を使うと、特定の条件が満たされるまで処理を繰り返し実行できます。

while文ではループの終了条件を自分で設定するため、動的にループの回数を管理したい場合に便利です。

以下で、「while文」の基本的な構成と押さえておくべきポイントを解説します。

while文の構成

Officeスクリプトの「while文」の構成
設定解説
  • i <= 数値 (必須)
    • while文の丸括弧内には、ループが継続するための条件が記述されます。

      この条件式がtrueである限り、ループは繰り返されます。
      条件式がfalseになると、ループは終了します。
      ※ループのカウンターは、「i」でなくても問題ありません。

例:while文の基本的な書き方

Officeスクリプトでwhile文を使う際の基本構成を以下に紹介します。

ここでは、カウンター変数を使って条件を設定し、ループの終了を適切に管理します。

function main(workbook: ExcelScript.Workbook) {
    let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
    let i: number = 0; // ループ用のカウンター変数をnumber型で初期化

    while (i <= 10) { // iが10以下である限りループが継続
        let cell: ExcelScript.Range = sheet.getRange(`A${i + 1}`);
        cell.setValue(i); // A列にカウンターの値を設定
        i++; // カウンターを1ずつ増やす
    }
}
while文の基本的な書き方
このコードの解説
  1. カウンター変数の初期化
    まず、ループを管理するためのカウンター変数iを初期化します。
    カウンター変数は任意の名前を使えますが、iがよく使われます。
  2. 条件式を設定
    while (i <= 10)のように、ループの継続条件を設定します。
    条件がtrueの間はループが繰り返され、falseになるとループは終了します。
  3. カウンターの更新
    ループごとにi++でカウンターを更新し、条件がfalseになるタイミングを確保します。
    カウンターの更新を忘れると無限ループが発生するため注意が必要です。

実行結果

上記のコードでは、iが0から10になるまで、console.log(i)によってカウンターの値が出力されます。
ループが進行するたびにiが増加し、iが11になった時点でループが終了します。

このように、while文は動的な条件で繰り返し処理を行いたい場合に便利です。条件に応じて柔軟にループを管理できるので、Officeスクリプトでのデータ操作や自動化処理を効率化する強力な手段となります。

スポンサーリンク

Officeスクリプトのwhile文でループを中断する方法:breakとcontinueの使い方

Officeスクリプトでwhile文を使うと、条件を満たすまで繰り返し処理を行うことができますが、ループ処理を途中で中断したい場合もあります。

while文の中でループを中断するためのbreakとcontinueの使い方について解説します。

これらを活用すると、Officeスクリプトでの自動化処理を効率よく進めることができます。

ループを強制終了する「break」

break文は、ループ処理の途中で指定の条件を満たした場合に、ループ全体を強制的に終了させるために使用します。

例えば、データが特定の値に達したら繰り返し処理をやめるといった用途に便利です。無駄な処理を省くことで、処理効率を上げることができます。

コード例: breakを使用したwhile文

以下の例では、変数iが5に達した時点で、break文が実行され、ループが終了します。

function main(workbook: ExcelScript.Workbook) { 
    let i: number = 0; 

    while (i < 10) { // iが10未満の間、ループを実行
        if (i === 5) {
            console.log(`iが${i}になったのでループを終了します`); 
            break; // iが5の時点でループを強制終了
        }
        i++;
    }
}
breakを使用したwhile文

処理をスキップする「continue」

continue文は、現在のループ処理をスキップして次のループへ進みたい場合に使用します。

例えば、偶数のときは処理をスキップし、奇数のときだけ処理を行いたいケースに便利です。

コード例: continueを使用したwhile文

以下のコードでは、iが偶数の場合、continue文によって処理がスキップされ、奇数のときのみconsole.log(i)が実行されます。

function main(workbook: ExcelScript.Workbook) { 
    let i: number = 0; 

    while (i < 10) { // iが10未満の間、ループを実行
        i++; 

        if (i % 2 === 0) {
            continue; // iが偶数の時は処理をスキップして次の反復に進む
        }

        console.log(i); // 奇数の時のみiの値が出力される
    }
}
continueを使用したwhile文

while文の中断方法まとめ

制御文説明使用例
breakループ全体を強制終了する特定の値に達したら終了
continue現在のループのみをスキップする偶数のとき処理をスキップ

while文でbreakcontinueの使い方を理解することで、ループ処理を柔軟に制御できるようになります。

これにより、Officeスクリプトでのデータ処理やExcel自動化がより効果的に行えるようになります。
必要に応じてこれらの制御文を使いこなし、効率的なスクリプトを作成しましょう。

¥2,500 (2024/11/01 23:18時点 | Amazon調べ)
\楽天ポイント4倍セール!/
楽天市場で探す

Officeスクリプト「while文」を使用時の注意ポイント

while文を使用する際は、以下のポイントに注意することで、予期しないエラーや無限ループの発生を防ぎ、スムーズに処理を進めることができます。

注意ポイント1 : 無限ループに注意

無限ループとは、終了条件が満たされずに繰り返し処理が終わらない状態のことです。

無限ループが発生すると、Excelの動作が停止したり、スクリプトが応答しなくなったりするため、while文を使う際には注意が必要です。

以下では、無限ループを防ぐための3つの対策を、具体的なコード例とともに解説します。

また、万が一無限ループが発生した際に強制的に停止する方法も紹介します。

終了条件を適切に設定する

ループが終わるための条件を明確に設定することが大切です。

カウンター変数iを使って終了条件を管理する場合、例えばi < 3という条件を設定し、処理が進むうちにiが条件を満たさなくなるようにしましょう。

function main(workbook: ExcelScript.Workbook) {
    let i: number = 0; 

    while (i < 3) { // iが3未満の間、ループを継続
        console.log(`現在のiの値: ${i}`); // iの現在値を出力
        i++; // カウンターを更新
    }
    console.log("ループが正常に終了しました");
}
終了条件を適切に設定する

上記のコードでは、i < 3という条件がfalseになった時点でループが終了します。

i++でカウンターが更新されるため、ループは3回で正常に終了します。

カウンター変数を確実に更新する

カウンター変数の更新を忘れると、ループの条件が変わらず、無限ループに陥ってしまうことがあります。

必ずi++i += 1などでカウンターを更新し、終了条件に到達できるようにしましょう。

function main(workbook: ExcelScript.Workbook) { 
    let i: number = 0;

    while (i < 3) { // iが3未満の間、ループを継続
        console.log(`iの値: ${i}`); // iの現在値を出力
        i++; // カウンターを更新して無限ループを防ぐ
    }
}

上記の例ではi++がないため、iの値が変わらずにi < 3が永遠にtrueになり、無限ループが発生します。

ループ内でカウンターを確実に更新することで、このような事態を防ぐことができます。

break文で保険をかける

予期せぬ理由で終了条件がうまく機能せず、無限ループに陥る可能性がある場合は、break文を使って特定の条件でループを強制終了できるようにしておくと安心です。

例えば、カウンター変数が一定以上の値に達したら終了するように設定することができます。

function main(workbook: ExcelScript.Workbook) { 
    let i: number = 0;

    while (true) { // 本来の条件に関係なくループを実行
        console.log(`iの値: ${i}`);

        if (i >= 3) { // iが3以上ならループを強制終了
            console.log("breakでループを終了します");
            break; // ループを強制終了
        }
        i++; // カウンターを更新
    }
}
break文で保険をかける

無限ループに入ってしまった場合の強制停止方法

万が一、無限ループに入ってスクリプトが停止しなくなった場合、Excel OnlineやOfficeスクリプトの実行を強制的に停止する必要があります。

以下は無限ループを強制停止する方法です。

強制停止する方法
  • Excel OnlineやWebブラウザの場合
    • ブラウザのタブを閉じるか、F5キーでページをリロードすることでスクリプトが停止します。
  • Excelデスクトップ版を使用している場合
    • Ctrl + Alt + Deleteキーを押してタスクマネージャーを開き、Excelを選択して「タスクの終了」を選びます。
      これによりExcelのすべての動作が停止するため、保存されていないデータが失われる可能性がある点には注意してください。

注意ポイント2 : while文での処理順序に注意

while文は特定の条件がtrueである限り実行されるため、処理の順序が重要になります。

必要な操作が意図した順番で実行されていないと、次の処理が期待通りに進まなかったり、エラーが発生する可能性があります。

特に、順番がずれることで処理結果が変わる場合や、依存関係がある処理がうまく実行されない場合に注意が必要です。

処理順序を整えるためのポイント
  • 順序が依存する処理はwhile文の冒頭で行う
    • 特定の初期設定や前提条件が必要な処理は、while文内での最初の操作として配置するようにしましょう。
      これにより、後続の処理が安定して動作するようになります
  • 操作順を整理してコードを見直す
    • 複数の操作を実行する場合は、処理が前後しないようコードの順番を整理します。
      例えば、データの取得→データの更新→条件チェックの順で処理することで、処理が正確に進行します。
  • コメントで処理の意図を明確にする
    • while文内での処理順序が重要な箇所には、コメントを挿入してコードの意図を分かりやすく説明すると、後から見直す際にも役立ちます。

コード例:while文での処理順序

以下の例では、「データ取得」→「条件の更新」→「次の処理」の順に整え、while文内での処理が意図した順序で進むようにしています。

function main(workbook: ExcelScript.Workbook) { 
    let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet(); 
    let i: number = 0;
    
    while (i < 3) { // iが3未満の間、ループを実行
        // データ取得を最初に実行
        let value: string | number | boolean = sheet.getRange(`A${i + 1}`).getValue();
        
        // 取得したデータに基づいて処理を行う
        if (value === "終了") { // "終了"という値が見つかった場合
            console.log("終了条件が見つかったため、ループを停止します");
            break; // 終了条件が満たされた場合にループを停止
        }

        // 次の処理のためにカウンターを更新
        i++;
    }
}
while文での処理順序

このコードでは、データの取得、条件の確認、次のループへの更新という順序で処理が進み、while文内の処理が意図通りの順序で実行されます。

スポンサーリンク

Officeスクリプト「while文」の使用例をご紹介

それでは、OfficeスクリプトのFor分を使用した使用例を紹介します。

以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。

Officeスクリプトの基礎から応用までを効率よくしっかり学習したい方には、UdemyのOfficeスクリプト講座もおすすめです。

特に自己学習で進める場合、ビデオや実践例があると理解が進みやすくなります。

使用例1: カウンター変数の条件が「false」になるまで繰り返す

この例では、Excelスクリプトのwhile文を使い、特定の条件が満たされるまでセルに値を順番に設定する方法を紹介します。

具体的には、カウンター変数iを用いて、Excelの「A1」から「A10」までのセルに0から9までの数値を順次入力します。

コード例 | while文による繰り返し処理

function main(workbook: ExcelScript.Workbook) { 
  // アクティブなシートを取得
  let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
  
  // カウンター変数を初期化
  let i: number = 0;

  // カウンターが10未満である限り、ループを実行
  while (i < 10) {
    // セルにカウンターの値を設定
    sheet.getRange(`A${i + 1}`).setValue(i);
    // カウンターを更新
    i++;
  }
}

処理結果

カウンター変数の条件が「false」になるまで繰り返す

コードの動作概要

STEP
シートの取得

workbook.getActiveWorksheet()メソッドを使い、Excelで現在アクティブなシートを取得します。
このシートがsheet変数に格納され、以降の操作対象として扱われます。
sheet変数の型はExcelScript.Worksheet型に指定しています。

STEP
カウンター変数の初期化

let i = 0; でカウンター変数iを初期化します。
iは繰り返し処理で使用するカウンターで、最初の値を0に設定しています。
この変数はループの中で更新され、各セルへの入力値の管理に使用されます。

STEP
while文による繰り返し処理

while (i < 10)という条件で、iが10未満の間、ループを続けます。
ここでのwhile文は、特定の条件が満たされるまで繰り返し処理を行うため、柔軟な繰り返し処理が可能です。

STEP
各セルへの値の入力

sheet.getRange(\A${i + 1}`).setValue(i);で、指定したセルにiの値を設定します。
i + 1でセルの行位置を指定しているため、例えばiが0の場合は「A1」に0が入力されます。
ループが進むごとに次のセルにi`の値が入力され、最終的に「A1」から「A10」まで順番に数値が設定されます。

STEP
カウンターの更新

i++でカウンター変数iを1ずつ増加させます。
これにより、次のセルに進みながら値が入力され、iが10以上になるとループが終了します。

このコードで使用している機能

  • let (変数)
    • letは変数を宣言するためのキーワードです。
  • getActiveWorksheet() (アクティブなシートの取得)
    • workbook.getActiveWorksheet()は、Excelのアクティブなシートを取得するメソッドです。
  • getRange() (セル範囲の取得)
    • sheet.getRange(\A${i + 1}`)で、指定したセル範囲を取得します。
  • setValue() (セルへの値の設定)
    • 取得したセルに数値を入力するためのメソッドです。

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. function main(workbook: ExcelScript.Workbook)
    • Officeスクリプトのメイン関数「main」を定義しています。
      workbookパラメータが渡され、Excelのワークブック全体にアクセスできるようになります。
  2. let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
    • この行で現在アクティブなシートを取得し、「sheet」という変数に格納しています。
      「sheet」変数を使用して、シートに対する操作が可能になります。
  3. let i: number = 0;
    • カウンター変数iをnumber型で初期化しています。iはループでセルの位置指定や値の管理に使用されます。
  4. while (i < 10)
    • 変数「i」が10未満の間、繰り返し処理を続けるためのwhile文を定義しています。
      この条件が「false」になるとループは終了します。
  5. sheet.getRange(\A${i + 1}`).setValue(i);`
    • テンプレートリテラル「 A${i + 1} 」を使って、セルの位置を動的に指定しています。
      例えば、「i」が0の場合、「A1」セルが指定され、そこに「i」の値(0)が入力されます。
  6. i++
    • カウンター変数「i」を「1」増加させます。
      この更新により、次のセルに進むことができ、ループが管理されます。
  7. }
    • 関数「main」の終了を示します。

総括・ポイント

このコード例では、while文を使用して特定の条件を満たすまで繰り返し処理を行い、Excelのセル範囲に値を入力しています。

while文によるループ処理は、動的な条件に基づく反復処理が必要な場面で特に有効です。

シンプルなカウンター変数「i」を用いることで、複雑な処理を行わずにExcelの自動化が可能になり、大量のデータ入力や指定範囲への操作を効率的に行うことができます。

使用例2: if文 (条件分岐) を組み合わせ繰り返し処理を行う

この例では、while文を使い、カウンター変数iに応じた条件分岐を行いながらExcelシートのセルに値を設定する方法を紹介します。

具体的には、カウンターiが偶数の場合のみセルに値を入力するような繰り返し処理を行います。

コード例 | while文による条件分岐付きの繰り返し処理

function main(workbook: ExcelScript.Workbook) { 
  // アクティブなシートを取得
  let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
  
  // カウンター変数を初期化
  let i: number = 0;

  // カウンターが10未満である限り、ループを実行
  while (i < 10) {
    // iが偶数の場合のみ、セルに値を設定
    if (i % 2 === 0) {
      sheet.getRange(`A${i + 1}`).setValue(i);
    }
    // カウンターを更新
    i++;
  }
}

処理結果

while文による条件分岐付きの繰り返し処理

コードの動作概要

STEP
シートの取得

workbook.getActiveWorksheet()を使用して、Excelの現在アクティブなシートを取得します。
このシートがsheet変数に格納され、以降の操作対象となります。sheet変数にはExcelScript.Worksheet型を指定し、シート操作が安全に行えるようにしています。

STEP
カウンター変数の初期化

let i = 0;でカウンター変数iを0に初期化します。
この変数はセルの位置や条件分岐のために使用され、ループの条件も管理しています。

STEP
while文による繰り返し処理

while (i < 10)の条件で、iが10未満の間ループを実行します。
これにより、カウンター変数iが10以上になるとループが終了します。

STEP
条件分岐

if (i % 2 === 0)の条件で、iが偶数であるかを確認します。
i % 2 === 0は、iが偶数であることを示し、偶数の場合にのみ以下のセル値設定処理が実行されます。

STEP
各セルへの値の入力

sheet.getRange(\A${i + 1}`).setValue(i);で、カウンターiが偶数のときにのみ対応するセルに値を設定します。
例えば、iが0の場合は「A1」に0が、i`が2の場合は「A3」に2が入力されます。

STEP
カウンターの更新

i++でカウンター変数iを1ずつ増加させ、ループが次の反復に進むようにします。
iが10に達すると、ループが終了します。

このコードで使用している機能

  • let (変数)
    • letは変数を宣言するためのキーワードです。
  • getActiveWorksheet() (アクティブなシートの取得)
    • workbook.getActiveWorksheet()は、Excelのアクティブなシートを取得するメソッドです。
  • getRange() (セル範囲の取得)
    • sheet.getRange(\A${i + 1}`)で、指定したセル範囲を取得します。
  • if文 (条件分岐)
    • 特定の処理を実行するよう条件分岐を指定しています。
  • setValue() (セルへの値の設定)
    • 取得したセルに数値を入力するためのメソッドです。

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. function main(workbook: ExcelScript.Workbook)
    • Officeスクリプトのメイン関数「main」を定義しています。
      workbookパラメータが渡され、Excelのワークブック全体にアクセスできるようになります。
  2. let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
    • getActiveWorksheetメソッドで現在アクティブなシートを取得し、「sheet」変数に格納しています。
      この変数を使ってシート操作を行います。
  3. let i: number = 0;
    • カウンター変数「i」をnumber型で初期化します。
      繰り返し処理におけるセルの位置指定や条件分岐で使用されます。
  4. while (i < 10)
    • 「i」が10未満の間、繰り返し処理を行うwhile文を定義します。
      ループの条件が「false」になると、繰り返し処理は終了します。
  5. if (i % 2 === 0)
    • カウンター「i」が偶数の場合にのみ、次のセル入力処理を実行する条件分岐です。
      この条件が「true」の場合のみ、「if文」内の処理が実行されます。
  6. sheet.getRange(\A${i + 1}`).setValue(i);`
    • テンプレートリテラル「 A${i + 1} 」でセルの行位置を動的に指定し、セルに「i」の値を入力します。
      たとえば、「i」が「2」の場合、「A3」に「2」が設定されます。
  7. i++
    • カウンター変数「i」を「1」増加させます。
      これにより、次の反復処理での「i」の値が更新され、ループ条件に影響を与えます。
  8. }
    • 関数「main」の終了を示します。

総括・ポイント

このコード例では、while文の中で条件分岐を使用し、カウンター変数が偶数の場合のみセルに値を入力しています。

while文とif文を組み合わせることで、特定の条件に基づいたデータ入力が可能になり、Excelのセルに柔軟なデータ操作を行うことができます。

繰り返し処理を使って、特定のルールに沿ったデータ操作が自動化できるため、大量データの管理や入力を効率化する際に役立ちます。

使用例3: breakを使用してループを途中で終了する

この例では、while文の中でbreak文を使用し、カウンター変数iが特定の条件を満たしたときにループを強制終了する方法を紹介します。

具体的には、カウンターiが5に達した時点で、Excelシートのセル入力を中断します。

コード例 | break文によるループの途中終了

function main(workbook: ExcelScript.Workbook) { 
  // アクティブなシートを取得
  let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
  
  // カウンター変数を初期化
  let i: number = 0;

  // カウンターが10未満である限り、ループを実行
  while (i < 10) {
    // セルにカウンターの値を設定
    sheet.getRange(`A${i + 1}`).setValue(i);
    
    // カウンターが5に達したらループを強制終了
    if (i === 5) {
      break;
    }
    
    // カウンターを更新
    i++;
  }
}

処理結果

breakを使用してループを途中で終了する

コードの動作概要

STEP
シートの取得

workbook.getActiveWorksheet()を使用して、現在アクティブなシートを取得します。
このシートはsheet変数に格納され、以降の操作対象として使用されます。

STEP
カウンター変数の初期化

let i: number = 0;でカウンター変数iを0に初期化します。
この変数はwhile文での繰り返し処理の管理とセルの値設定に使用されます。

STEP
while文による繰り返し処理

while (i < 10)の条件により、iが10未満である間ループを実行します。
この条件がfalseになるとループが終了しますが、今回は途中でbreakが実行されるため、iが10に到達する前にループが終了します。

STEP
各セルへの値の入力

sheet.getRange(\A${i + 1}`).setValue(i);で、指定したセルにiの値を入力します。i + 1でセルの行位置を指定しているため、iが0の場合「A1」に0が入力され、以降、i`が1増えるごとに次のセルに値が設定されます。

STEP
break文によるループの強制終了

if (i === 5)の条件でiが5に達すると、break文が実行され、ループはその時点で強制終了します。
このため、セル「A1」から「A6」までに0から5が入力され、iが5を超えるセルには何も入力されません。

STEP
カウンターの更新

i++でカウンター変数iを1ずつ増加させます。
この更新があるため、次の反復処理でiの値が変更され、while文のループ条件がチェックされることになります。

このコードで使用している機能

  • let (変数)
    • letは変数を宣言するためのキーワードです。
  • getActiveWorksheet() (アクティブなシートの取得)
    • workbook.getActiveWorksheet()は、Excelのアクティブなシートを取得するメソッドです。
  • getRange() (セル範囲の取得)
    • sheet.getRange(\A${i + 1}`)で、指定したセル範囲を取得します。
  • setValue() (セルへの値の設定)
    • 取得したセルに数値を入力するためのメソッドです。
  • break (ループの強制終了)
    • break文は、特定の条件を満たした際にループを中断するための命令です。

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. function main(workbook: ExcelScript.Workbook)
    • Officeスクリプトのメイン関数「main」を定義しています。
      workbookパラメータが渡され、Excelのワークブック全体にアクセスできるようになります。
  2. let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
    • getActiveWorksheetメソッドを使用して、アクティブなシートを取得し、「sheet」という変数に格納しています。
      以降のコードで、このシートに対して操作を行います。
  3. let i: number = 0;
    • カウンター変数「i」を「0」に初期化します。
      「i」はループ条件の設定とセルへの値入力のために使用されます。
  4. while (i < 10)
    • 「i」が10未満の間、繰り返し処理を続けるためのwhile文を定義します。
      この条件が「false」になるとループは終了しますが、今回は「break」による終了が行われます。
  5. sheet.getRange(\A${i + 1}`).setValue(i);`
    • テンプレートリテラル「 A${i + 1} 」でセルの位置を指定し、セルに「i」の値を入力します。
      たとえば、「i」が「0」の場合は「A1」に「0」が、「i」が「1」の場合は「A2」に「1」が入力されます。
  6. if (i === 5) { break; }
    • 「i」が「5」に等しい場合、break文によりループが強制終了します。
      これにより、「i」が「5」に達した時点でwhile文から抜け出し、残りの繰り返し処理は行われません。
  7. i++
    • カウンター変数「i」を「1」増加させます。
      この更新により、ループ内で次のセルに値が設定されることになります。
  8. }
    • 関数「main」の終了を示します。

総括・ポイント

このコードでは、while文の中でbreak文を使用し、カウンター変数が特定の条件を満たした際にループを強制終了しています。

特定の条件に基づいてループを途中で中断することで、柔軟な処理が可能となり、必要以上の処理を行わずに効率的な繰り返し処理が実現できます。

Excelでのデータ自動化やセル範囲の管理がスムーズに行えるようになります。

使用例4: continueを使用して特定の条件をスキップする

この例では、while文とcontinue文を使い、特定の条件に応じて処理をスキップする方法を紹介します。

具体的には、カウンター変数iが偶数の場合は処理をスキップし、奇数の値のみをExcelシート上のセルに入力します。

コード例 | continue文による特定条件のスキップ

function main(workbook: ExcelScript.Workbook) { 
  // アクティブなシートを取得
  let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
  
  // カウンター変数を初期化
  let i: number = 0;

  // カウンターが10未満である限り、ループを実行
  while (i < 10) {
    i++; // カウンターを更新

    // iが偶数の場合はスキップ
    if (i % 2 === 0) {
      continue;
    }

    // 奇数のときのみセルに値を入力
    sheet.getRange(`A${i}`).setValue(i);
  }
}

処理結果

continueを使用して特定の条件をスキップする

コードの動作概要

STEP
シートの取得

workbook.getActiveWorksheet()を使用して、現在アクティブなシートを取得します。
シートはsheet変数に格納され、以降の操作対象となります。

STEP
カウンター変数の初期化

let i: number = 0;でカウンター変数iを0に初期化します。
この変数は繰り返し処理と条件判定で使用され、セルの位置も動的に管理します。

STEP
while文による繰り返し処理

while (i < 10)の条件で、iが10未満の間ループを実行します。
iが10以上になるとループは終了します。

STEP
カウンターの更新

i++でカウンター変数iを1増加させます。
これにより、iが偶数または奇数かを次の条件判定でチェックできるようにします。

STEP
continue文による条件スキップ

if (i % 2 === 0)の条件で、iが偶数である場合にcontinue文が実行されます。
continue文が実行されると、その時点で現在のループの処理が終了し、次の反復に進みます。
したがって、偶数のiのときには後続のセル入力処理がスキップされます。

STEP
各セルへの値の入力

sheet.getRange(\A${i}`).setValue(i);で、iが奇数の場合にのみセルにiの値を入力します。
例えば、iが1であれば「A1」に1が入力され、i`が3であれば「A3」に3が入力されます。

このコードで使用している機能

  • let (変数)
    • letは変数を宣言するためのキーワードです。
  • getActiveWorksheet() (アクティブなシートの取得)
    • workbook.getActiveWorksheet()は、Excelのアクティブなシートを取得するメソッドです。
  • continue文 (特定条件でスキップ)
    • continue文は、現在のループの残りの処理をスキップし、次の反復に進む命令です。
  • getRange() (セル範囲の取得)
    • sheet.getRange(\A${i + 1}`)で、指定したセル範囲を取得します。
  • setValue() (セルへの値の設定)
    • 取得したセルに数値を入力するためのメソッドです。

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. function main(workbook: ExcelScript.Workbook)
    • Officeスクリプトのメイン関数「main」を定義しています。
      workbookパラメータが渡され、Excelのワークブック全体にアクセスできるようになります。
  2. let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
    • getActiveWorksheet()メソッドで現在アクティブなシートを取得し、「sheet」変数に格納しています。
      このシートがwhile文の対象になります。
  3. let i: number = 0;
    • カウンター変数「i」をnumber型で初期化しています。
      「i」はループの制御やセルの位置の動的指定に使用されます。
  4. while (i < 10)
    • 「i」が「10」未満である間、繰り返し処理を行うためのwhile文を定義しています。
      この条件が「false」になると、ループは終了します。
  5. i++
    • カウンター変数「i」を「1」増加させます。
      この更新によって、「i」が偶数か奇数かの条件が交互に変わります。
  6. if (i % 2 === 0) { continue; }
    • 「i」が偶数の場合、continue文が実行され、現在のループの残りの処理がスキップされます。
      これにより、偶数のときにはセルへの入力処理が行われません。
  7. sheet.getRange(\A${i}`).setValue(i);`
    • テンプレートリテラル「 A${i} 」でセルの行位置を指定し、「i」が奇数の場合にそのセルに「i」の値を入力します。
      例えば、「i」が「3」であればセル「A3」に「3」が入力されます。
  8. }
    • 関数「main」の終了を示します。

総括・ポイント

このコードでは、while文とcontinue文を組み合わせ、カウンター変数が偶数の場合には処理をスキップし、奇数の場合のみExcelのセルに値を入力しています。

continue文を使用することで、特定の条件に基づく処理のスキップが簡単に行え、Excelでのデータ入力やセル操作の柔軟性が向上します。

while文の反復処理とcontinue文による条件付きスキップにより、Excelのセル範囲に対する効率的なデータ操作が可能です。

使用例5: 配列の要素数だけ繰り返す

この例では、配列内の各要素をExcelシート上のセルに順番に入力します。

配列の長さ(要素数)に基づいてwhile文のループ回数を制御することで、柔軟にデータをシートへ書き込むことができます。

コード例 | 配列の要素数に基づいた繰り返し処理

function main(workbook: ExcelScript.Workbook) {
  // アクティブなシートを取得
  let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
  
  // 配列を定義(配列の型はnumber[]とする)
  let values: number[] = [10, 20, 30, 40, 50]; 

  // カウンター変数を初期化
  let i: number = 0;

  // 配列の長さだけループを実行
  while (i < values.length) {
    // 配列の要素を順にセルに設定
    sheet.getRange(`A${i + 1}`).setValue(values[i]);
    // カウンターを更新
    i++;
  }
}

処理結果

配列の要素数だけ繰り返す

コードの動作概要

STEP
シートの取得

workbook.getActiveWorksheet()メソッドを使用して、Excelで現在アクティブなシートを取得します。
このシートは変数sheetに格納され、以降の操作で対象となります。

STEP
配列の定義

let values: number[] = [10, 20, 30, 40, 50];で、配列valuesを定義し、配列の各要素に数値を設定しています。
この配列の要素は、シートのセルに順番に入力されます。

STEP
カウンター変数の初期化

let i: number = 0;でカウンター変数iを「0」に初期化します。
この変数は、ループ内でセルの位置と配列の要素位置を管理します。

STEP
配列の長さに基づいた繰り返し処理

while (i < values.length)の条件で、配列の要素数(配列の長さ)までループを繰り返します。
配列の長さはvalues.lengthで取得でき、iが配列の長さを超えるとループが終了します。

STEP
各セルへの値の入力

sheet.getRange(\A${i + 1}`).setValue(values[i]);で、配列の各要素をシートのセルに設定しています。
テンプレートリテラルA${i + 1}で、セルの位置を動的に指定します。
たとえば、i`が0のとき、配列の1番目の要素が「A1」に入力されます。

STEP
カウンターの更新

i++でカウンター変数iを1増加させ、次の要素と次のセルへと処理が進みます。

このコードで使用している機能

  • let (変数)
    • letは変数を宣言するためのキーワードです。
  • getActiveWorksheet() (アクティブなシートの取得)
    • workbook.getActiveWorksheet()は、Excelのアクティブなシートを取得するメソッドです。
  • 配列.length (配列の長さ)
    • values.lengthで配列valuesの要素数を取得し、while文のループ回数を配列の長さに合わせています。
  • getRange() (セル範囲の取得)
    • sheet.getRange(\A${i + 1}`)で、指定したセル範囲を取得します。
  • setValue() (セルへの値の設定)
    • 取得したセルに数値を入力するためのメソッドです。

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. function main(workbook: ExcelScript.Workbook)
    • Officeスクリプトのメイン関数「main」を定義しています。
      workbookパラメータが渡され、Excelのワークブック全体にアクセスできるようになります。
  2. let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
    • 現在アクティブなシートを取得し、「sheet」変数に格納しています。
      「sheet」を使用して、シートに対する操作を行います。
  3. let values: number[] = [10, 20, 30, 40, 50];
    • 数値を格納した配列valuesを定義しています。
      この配列の要素が、後の繰り返し処理で順次セルに入力されます。
  4. let i: number = 0;
    • カウンター変数「i」をnumber型で初期化します。
      この変数はwhile文の中で、セルの位置と配列要素のインデックスを管理します。
  5. while (i < values.length)
    • 配列の長さ「values.length」に基づいて、「i」が配列の長さより小さい間、繰り返し処理を行います。
      配列の要素数だけループが繰り返されます。
  6. sheet.getRange(\A${i + 1}`).setValue(values[i]);`
    • テンプレートリテラル「 A${i + 1} 」でセルの行位置を指定し、配列の要素「 values[i] 」をセルに入力します。
      たとえば、最初のループで「 values[0] 」が「A1」に入力されます。
  7. i++
    • カウンター変数「i」を「1」増加させ、次の配列の要素を次のセルに設定します。
      配列のすべての要素が入力されるまで繰り返します。
  8. }
    • 関数「main」の終了を示します。

総括・ポイント

このコード例では、while文を使って配列内の要素数に基づいて繰り返し処理を行い、Excelのセルに順次データを入力しています。

配列の要素数に応じた繰り返し処理は、データの自動入力や、柔軟なセル操作が求められる場合に役立ちます。

配列の要素数が変わってもコードの変更が不要で、柔軟性が高い実装となっています。

使用例6: オブジェクトのプロパティ数だけ繰り返す

この例では、オブジェクトの各プロパティをExcelシート上に入力する方法を紹介します。

オブジェクトのキーと値をそれぞれExcelのセルに分けて入力することで、オブジェクト内のデータを視覚化できます。

コード例 | オブジェクトのプロパティ数に基づいた繰り返し処理

function main(workbook: ExcelScript.Workbook) {
  // アクティブなシートを取得
  let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
  
  // オブジェクトを定義
  let data: { [key: string]: string | number } = {
    "Name": "Alice",
    "Age": 30,
    "City": "New York",
    "Occupation": "Engineer",
    "Experience": 5
  };

  // カウンター変数を初期化
  let i: number = 0;

  // オブジェクトのキーを配列に変換
  let keys: string[] = Object.keys(data);

  // オブジェクトのプロパティ数だけループを実行
  while (i < keys.length) {
    // 現在のキーを取得
    let key: string = keys[i];
    // 現在のキーに対応する値を取得
    let value: string | number = data[key];

    // キーをA列に、値をB列に設定
    sheet.getRange(`A${i + 1}`).setValue(key);
    sheet.getRange(`B${i + 1}`).setValue(value);

    // カウンターを更新
    i++;
  }
}

処理結果

オブジェクトのプロパティ数だけ繰り返す

コードの動作概要

STEP
シートの取得

workbook.getActiveWorksheet()メソッドを使用して、Excelのアクティブなシートを取得します。
シートはsheet変数に格納され、以降の操作対象として扱われます。

STEP
オブジェクトの定義

let data: { [key: string]: string | number }でオブジェクトdataを定義します。
ここではプロパティ名(キー)とその値をペアで定義しており、各プロパティのキーはstring型、値はstringまたはnumber型としています。

STEP
カウンター変数の初期化

let i: number = 0;でカウンター変数iを0に初期化しています。
この変数は、ループ内でセルの行位置を管理します。

STEP
オブジェクトのキーを配列に変換

let keys: string[] = Object.keys(data);で、オブジェクトdataのキー(プロパティ名)を配列keysに変換します。
これにより、オブジェクトのプロパティをループで順次取得できるようになります。

STEP
オブジェクトのプロパティ数に基づいた繰り返し処理

while (i < keys.length)の条件で、iが配列keysの長さ(オブジェクトのプロパティ数)より小さい間ループを実行します。
これにより、オブジェクトのプロパティの数だけ処理が行われます。

STEP
各セルへのキーと値の入力
  • let key: string = keys[i];で、現在のインデックスiに基づいたキーを取得します。
  • let value: string | number = data[key];で、取得したキーに対応する値を取得します。
  • sheet.getRange(\A${i + 1}`).setValue(key);`で、キーを「A」列の指定セルに設定します。
  • sheet.getRange(\B${i + 1}`).setValue(value);`で、対応する値を「B」列のセルに入力します。
STEP
カウンターの更新

i++でカウンター変数iを1増加させ、次のプロパティ(キーと値)を次の行に設定します。

このコードで使用している機能

  • let (変数)
    • letは変数を宣言するためのキーワードです。
  • getActiveWorksheet() (アクティブなシートの取得)
    • workbook.getActiveWorksheet()は、Excelのアクティブなシートを取得するメソッドです。
  • Object.keys() (オブジェクトのキー取得)
    • Object.keys(data)で、オブジェクトdataのすべてのキーを配列keysとして取得しています。
  • getRange() (セル範囲の取得)
    • sheet.getRange(\A${i + 1}`)で、指定したセル範囲を取得します。
  • setValue() (セルへの値の設定)
    • 取得したセルに数値を入力するためのメソッドです。

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. function main(workbook: ExcelScript.Workbook)
    • Officeスクリプトのメイン関数「main」を定義しています。
      workbookパラメータが渡され、Excelのワークブック全体にアクセスできるようになります。
  2. let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
    • 現在アクティブなシートを取得し、「sheet」変数に格納します。
      シートが操作対象になります。
  3. let data: { [key: string]: string | number } = { … };
    • プロパティのキーを「string」、値を「string」または「number」としたオブジェクト「data」を定義しています。
      このオブジェクトの各プロパティをExcelのセルに出力します。
  4. let i: number = 0;
    • カウンター変数「i」を「0」に初期化します。
      この変数はループでセルの行位置を管理します。
  5. let keys: string[] = Object.keys(data);
    • オブジェクト「data」のキー(プロパティ名)を配列「keys」に変換します。
      これにより、ループで各プロパティにアクセスしやすくなります。
  6. while (i < keys.length)
    • 「i」が配列「keys」の長さ(プロパティ数)より小さい間、ループを続ける条件を設定します。
  7. let key: string = keys[i];
    • 「i」番目のプロパティのキーを「key」変数に格納します。
  8. let value: string | number = data[key];
    • 「key」に対応する値を「value」変数に格納します。
  9. sheet.getRange(\A${i + 1}`).setValue(key);`
    • 「A」列の指定セルにキーを入力します。
      たとえば、「A1」に”Name”が入力されます。
  10. sheet.getRange(\B${i + 1}`).setValue(value);`
    • 「B」列の指定セルにキーに対応する値を入力します。
      たとえば、「B1」に”Alice”が入力されます。
  11. i++
    • カウンター「i」を「1」増加させ、次のプロパティを処理します。
  12. }
    • 関数「main」の終了を示します。

総括・ポイント

このコード例では、オブジェクトのプロパティ数に基づいて繰り返し処理を行い、各プロパティのキーと値をExcelのセルに順次入力しています。

オブジェクトの各データをExcel上に整然と並べることで、データ管理や視覚化が容易になります。

Excelでの柔軟なデータ入力やオブジェクトデータの可視化に役立つ実装です。

この記事のまとめ

この記事では、Officeスクリプトの「while文」 を使った繰り返し処理について解説しました。

特定の条件が満たされるまで繰り返し処理を行う方法や、無限ループを防ぐポイント、効率的なループ制御の実現について学びました。

ポイントのおさらい

while文の基本を理解し、条件が満たされるまで繰り返し処理を行う方法を学びました。

さらに学ぶために

この記事で学んだwhile文をもとに、for文forEachmapなど他の繰り返し処理と組み合わせて、Excelでのデータ自動化や効率的な処理を追求してみましょう。

while文の動的な条件設定に加え、データの操作や条件分岐の方法を駆使することで、より柔軟な自動化スクリプトが実現できます。

あわせて読みたい
サイトマップ VBAOfficeスクリプトワークシート関数 VBA 基本設定 VBAとは? VBAの始め方 VBAのおすすめ設定 セル操作 RangeとCells CurrentRegion Offset Resize 最終行・最終列の取...
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次