「Officeスクリプトで条件を満たすまでループするにはどうしたらいいの?」
そんなこと思ったことありませんか?
・繰り返し処理は、forEachやfor文以外にも方法があるの?
・条件を満たすまでループを続けたい場合にはどうすればいいの?
その場合は、Officeスクリプトの「while文」を
使用すると解決します!
この記事では、Officeスクリプトのwhile文を詳しく解説します。
Officeスクリプトのwhile文を使うと、特定の条件が満たされるまで繰り返し処理を行いながら動的にループを制御する方法と、無限ループを防ぐための適切な終了条件の設定について解説します。
この記事では、while文の基本的な使い方を解説し、実際にどのように利用するかを具体的な例を通じて学んでいきます。
繰り返し処理の考え方を深め、Excelスクリプトの自動化をさらに強化しましょう。
【 この記事の概要 】
よく使う度 | |
難しさ | |
覚えておくと安心度 |
この記事を読むと「できるようになる」こと
この記事を読むことで、次のことができるようになります。
- while文を使った繰り返し処理の方法を理解する
- while文を処理中にループを抜ける方法を習得する
- while文を処理する際の注意ポイントを把握する
- while文の実際の使用例を確認する
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文の構成
- i <= 数値 (必須)
- while文の丸括弧内には、ループが継続するための条件が記述されます。
この条件式がtrueである限り、ループは繰り返されます。
条件式がfalseになると、ループは終了します。
※ループのカウンターは、「i」でなくても問題ありません。
- while文の丸括弧内には、ループが継続するための条件が記述されます。
例: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ずつ増やす
}
}
- カウンター変数の初期化
まず、ループを管理するためのカウンター変数i
を初期化します。
カウンター変数は任意の名前を使えますが、i
がよく使われます。 - 条件式を設定
while (i <= 10)
のように、ループの継続条件を設定します。
条件がtrue
の間はループが繰り返され、false
になるとループは終了します。 - カウンターの更新
ループごとに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++;
}
}
処理をスキップする「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の値が出力される
}
}
while文の中断方法まとめ
制御文 | 説明 | 使用例 |
---|---|---|
break | ループ全体を強制終了する | 特定の値に達したら終了 |
continue | 現在のループのみをスキップする | 偶数のとき処理をスキップ |
while文でbreak
とcontinue
の使い方を理解することで、ループ処理を柔軟に制御できるようになります。
これにより、Officeスクリプトでのデータ処理やExcel自動化がより効果的に行えるようになります。
必要に応じてこれらの制御文を使いこなし、効率的なスクリプトを作成しましょう。
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++; // カウンターを更新
}
}
無限ループに入ってしまった場合の強制停止方法
万が一、無限ループに入ってスクリプトが停止しなくなった場合、Excel OnlineやOfficeスクリプトの実行を強制的に停止する必要があります。
以下は無限ループを強制停止する方法です。
- Excel OnlineやWebブラウザの場合
- ブラウザのタブを閉じるか、
F5
キーでページをリロードすることでスクリプトが停止します。
- ブラウザのタブを閉じるか、
- Excelデスクトップ版を使用している場合
Ctrl
+Alt
+Delete
キーを押してタスクマネージャーを開き、Excelを選択して「タスクの終了」を選びます。
これによりExcelのすべての動作が停止するため、保存されていないデータが失われる可能性がある点には注意してください。
注意ポイント2 : while文での処理順序に注意
while文は特定の条件がtrue
である限り実行されるため、処理の順序が重要になります。
必要な操作が意図した順番で実行されていないと、次の処理が期待通りに進まなかったり、エラーが発生する可能性があります。
特に、順番がずれることで処理結果が変わる場合や、依存関係がある処理がうまく実行されない場合に注意が必要です。
- 順序が依存する処理はwhile文の冒頭で行う
- 特定の初期設定や前提条件が必要な処理は、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文内の処理が意図通りの順序で実行されます。
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++;
}
}
処理結果
コードの動作概要
workbook.getActiveWorksheet()
メソッドを使い、Excelで現在アクティブなシートを取得します。
このシートがsheet
変数に格納され、以降の操作対象として扱われます。sheet
変数の型はExcelScript.Worksheet
型に指定しています。
let i = 0;
でカウンター変数i
を初期化します。i
は繰り返し処理で使用するカウンターで、最初の値を0に設定しています。
この変数はループの中で更新され、各セルへの入力値の管理に使用されます。
while (i < 10)
という条件で、i
が10未満の間、ループを続けます。
ここでのwhile
文は、特定の条件が満たされるまで繰り返し処理を行うため、柔軟な繰り返し処理が可能です。
sheet.getRange(\A${i + 1}`).setValue(i);
で、指定したセルにi
の値を設定します。i + 1
でセルの行位置を指定しているため、例えばi
が0の場合は「A1」に0が入力されます。
ループが進むごとに次のセルにi
`の値が入力され、最終的に「A1」から「A10」まで順番に数値が設定されます。
i++
でカウンター変数i
を1ずつ増加させます。
これにより、次のセルに進みながら値が入力され、i
が10以上になるとループが終了します。
このコードで使用している機能
- let (変数)
let
は変数を宣言するためのキーワードです。
- getActiveWorksheet() (アクティブなシートの取得)
workbook.getActiveWorksheet()
は、Excelのアクティブなシートを取得するメソッドです。
- getRange() (セル範囲の取得)
sheet.getRange(\A${i + 1}`)
で、指定したセル範囲を取得します。
- setValue() (セルへの値の設定)
- 取得したセルに数値を入力するためのメソッドです。
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- function main(workbook: ExcelScript.Workbook)
- Officeスクリプトのメイン関数「main」を定義しています。
workbookパラメータが渡され、Excelのワークブック全体にアクセスできるようになります。
- Officeスクリプトのメイン関数「main」を定義しています。
- let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
- この行で現在アクティブなシートを取得し、「sheet」という変数に格納しています。
「sheet」変数を使用して、シートに対する操作が可能になります。
- この行で現在アクティブなシートを取得し、「sheet」という変数に格納しています。
- let i: number = 0;
- カウンター変数iをnumber型で初期化しています。iはループでセルの位置指定や値の管理に使用されます。
- while (i < 10)
- 変数「i」が10未満の間、繰り返し処理を続けるためのwhile文を定義しています。
この条件が「false」になるとループは終了します。
- 変数「i」が10未満の間、繰り返し処理を続けるためのwhile文を定義しています。
- sheet.getRange(\A${i + 1}`).setValue(i);`
- テンプレートリテラル「 A${i + 1} 」を使って、セルの位置を動的に指定しています。
例えば、「i」が0の場合、「A1」セルが指定され、そこに「i」の値(0)が入力されます。
- テンプレートリテラル「 A${i + 1} 」を使って、セルの位置を動的に指定しています。
- i++
- カウンター変数「i」を「1」増加させます。
この更新により、次のセルに進むことができ、ループが管理されます。
- カウンター変数「i」を「1」増加させます。
- }
- 関数「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++;
}
}
処理結果
コードの動作概要
workbook.getActiveWorksheet()
を使用して、Excelの現在アクティブなシートを取得します。
このシートがsheet
変数に格納され、以降の操作対象となります。sheet
変数にはExcelScript.Worksheet
型を指定し、シート操作が安全に行えるようにしています。
let i = 0;
でカウンター変数i
を0に初期化します。
この変数はセルの位置や条件分岐のために使用され、ループの条件も管理しています。
while (i < 10)
の条件で、i
が10未満の間ループを実行します。
これにより、カウンター変数i
が10以上になるとループが終了します。
if (i % 2 === 0)
の条件で、i
が偶数であるかを確認します。i % 2 === 0
は、i
が偶数であることを示し、偶数の場合にのみ以下のセル値設定処理が実行されます。
sheet.getRange(\A${i + 1}`).setValue(i);
で、カウンターi
が偶数のときにのみ対応するセルに値を設定します。
例えば、i
が0の場合は「A1」に0が、i
`が2の場合は「A3」に2が入力されます。
i++
でカウンター変数i
を1ずつ増加させ、ループが次の反復に進むようにします。i
が10に達すると、ループが終了します。
このコードで使用している機能
- let (変数)
let
は変数を宣言するためのキーワードです。
- getActiveWorksheet() (アクティブなシートの取得)
workbook.getActiveWorksheet()
は、Excelのアクティブなシートを取得するメソッドです。
- getRange() (セル範囲の取得)
sheet.getRange(\A${i + 1}`)
で、指定したセル範囲を取得します。
- if文 (条件分岐)
- 特定の処理を実行するよう条件分岐を指定しています。
- setValue() (セルへの値の設定)
- 取得したセルに数値を入力するためのメソッドです。
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- function main(workbook: ExcelScript.Workbook)
- Officeスクリプトのメイン関数「main」を定義しています。
workbookパラメータが渡され、Excelのワークブック全体にアクセスできるようになります。
- Officeスクリプトのメイン関数「main」を定義しています。
- let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
- getActiveWorksheetメソッドで現在アクティブなシートを取得し、「sheet」変数に格納しています。
この変数を使ってシート操作を行います。
- getActiveWorksheetメソッドで現在アクティブなシートを取得し、「sheet」変数に格納しています。
- let i: number = 0;
- カウンター変数「i」をnumber型で初期化します。
繰り返し処理におけるセルの位置指定や条件分岐で使用されます。
- カウンター変数「i」をnumber型で初期化します。
- while (i < 10)
- 「i」が10未満の間、繰り返し処理を行うwhile文を定義します。
ループの条件が「false」になると、繰り返し処理は終了します。
- 「i」が10未満の間、繰り返し処理を行うwhile文を定義します。
- if (i % 2 === 0)
- カウンター「i」が偶数の場合にのみ、次のセル入力処理を実行する条件分岐です。
この条件が「true」の場合のみ、「if文」内の処理が実行されます。
- カウンター「i」が偶数の場合にのみ、次のセル入力処理を実行する条件分岐です。
- sheet.getRange(\A${i + 1}`).setValue(i);`
- テンプレートリテラル「 A${i + 1} 」でセルの行位置を動的に指定し、セルに「i」の値を入力します。
たとえば、「i」が「2」の場合、「A3」に「2」が設定されます。
- テンプレートリテラル「 A${i + 1} 」でセルの行位置を動的に指定し、セルに「i」の値を入力します。
- i++
- カウンター変数「i」を「1」増加させます。
これにより、次の反復処理での「i」の値が更新され、ループ条件に影響を与えます。
- カウンター変数「i」を「1」増加させます。
- }
- 関数「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++;
}
}
処理結果
コードの動作概要
workbook.getActiveWorksheet()
を使用して、現在アクティブなシートを取得します。
このシートはsheet
変数に格納され、以降の操作対象として使用されます。
let i: number = 0;
でカウンター変数i
を0に初期化します。
この変数はwhile文での繰り返し処理の管理とセルの値設定に使用されます。
while (i < 10)
の条件により、i
が10未満である間ループを実行します。
この条件がfalse
になるとループが終了しますが、今回は途中でbreak
が実行されるため、i
が10に到達する前にループが終了します。
sheet.getRange(\A${i + 1}`).setValue(i);
で、指定したセルにi
の値を入力します。i + 1
でセルの行位置を指定しているため、i
が0の場合「A1」に0が入力され、以降、i
`が1増えるごとに次のセルに値が設定されます。
if (i === 5)
の条件でi
が5に達すると、break
文が実行され、ループはその時点で強制終了します。
このため、セル「A1」から「A6」までに0から5が入力され、i
が5を超えるセルには何も入力されません。
i++
でカウンター変数i
を1ずつ増加させます。
この更新があるため、次の反復処理でi
の値が変更され、while文のループ条件がチェックされることになります。
このコードで使用している機能
- let (変数)
let
は変数を宣言するためのキーワードです。
- getActiveWorksheet() (アクティブなシートの取得)
workbook.getActiveWorksheet()
は、Excelのアクティブなシートを取得するメソッドです。
- getRange() (セル範囲の取得)
sheet.getRange(\A${i + 1}`)
で、指定したセル範囲を取得します。
- setValue() (セルへの値の設定)
- 取得したセルに数値を入力するためのメソッドです。
- break (ループの強制終了)
break
文は、特定の条件を満たした際にループを中断するための命令です。
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- function main(workbook: ExcelScript.Workbook)
- Officeスクリプトのメイン関数「main」を定義しています。
workbookパラメータが渡され、Excelのワークブック全体にアクセスできるようになります。
- Officeスクリプトのメイン関数「main」を定義しています。
- let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
- getActiveWorksheetメソッドを使用して、アクティブなシートを取得し、「sheet」という変数に格納しています。
以降のコードで、このシートに対して操作を行います。
- getActiveWorksheetメソッドを使用して、アクティブなシートを取得し、「sheet」という変数に格納しています。
- let i: number = 0;
- カウンター変数「i」を「0」に初期化します。
「i」はループ条件の設定とセルへの値入力のために使用されます。
- カウンター変数「i」を「0」に初期化します。
- while (i < 10)
- 「i」が10未満の間、繰り返し処理を続けるためのwhile文を定義します。
この条件が「false」になるとループは終了しますが、今回は「break」による終了が行われます。
- 「i」が10未満の間、繰り返し処理を続けるためのwhile文を定義します。
- sheet.getRange(\A${i + 1}`).setValue(i);`
- テンプレートリテラル「 A${i + 1} 」でセルの位置を指定し、セルに「i」の値を入力します。
たとえば、「i」が「0」の場合は「A1」に「0」が、「i」が「1」の場合は「A2」に「1」が入力されます。
- テンプレートリテラル「 A${i + 1} 」でセルの位置を指定し、セルに「i」の値を入力します。
- if (i === 5) { break; }
- 「i」が「5」に等しい場合、break文によりループが強制終了します。
これにより、「i」が「5」に達した時点でwhile文から抜け出し、残りの繰り返し処理は行われません。
- 「i」が「5」に等しい場合、break文によりループが強制終了します。
- i++
- カウンター変数「i」を「1」増加させます。
この更新により、ループ内で次のセルに値が設定されることになります。
- カウンター変数「i」を「1」増加させます。
- }
- 関数「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);
}
}
処理結果
コードの動作概要
workbook.getActiveWorksheet()
を使用して、現在アクティブなシートを取得します。
シートはsheet
変数に格納され、以降の操作対象となります。
let i: number = 0;
でカウンター変数i
を0に初期化します。
この変数は繰り返し処理と条件判定で使用され、セルの位置も動的に管理します。
while (i < 10)
の条件で、i
が10未満の間ループを実行します。i
が10以上になるとループは終了します。
i++
でカウンター変数i
を1増加させます。
これにより、i
が偶数または奇数かを次の条件判定でチェックできるようにします。
if (i % 2 === 0)
の条件で、i
が偶数である場合にcontinue
文が実行されます。continue
文が実行されると、その時点で現在のループの処理が終了し、次の反復に進みます。
したがって、偶数のi
のときには後続のセル入力処理がスキップされます。
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行ずつコードを解説
「クリック」してコードの詳細解説を見る
- function main(workbook: ExcelScript.Workbook)
- Officeスクリプトのメイン関数「main」を定義しています。
workbookパラメータが渡され、Excelのワークブック全体にアクセスできるようになります。
- Officeスクリプトのメイン関数「main」を定義しています。
- let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
- getActiveWorksheet()メソッドで現在アクティブなシートを取得し、「sheet」変数に格納しています。
このシートがwhile文の対象になります。
- getActiveWorksheet()メソッドで現在アクティブなシートを取得し、「sheet」変数に格納しています。
- let i: number = 0;
- カウンター変数「i」をnumber型で初期化しています。
「i」はループの制御やセルの位置の動的指定に使用されます。
- カウンター変数「i」をnumber型で初期化しています。
- while (i < 10)
- 「i」が「10」未満である間、繰り返し処理を行うためのwhile文を定義しています。
この条件が「false」になると、ループは終了します。
- 「i」が「10」未満である間、繰り返し処理を行うためのwhile文を定義しています。
- i++
- カウンター変数「i」を「1」増加させます。
この更新によって、「i」が偶数か奇数かの条件が交互に変わります。
- カウンター変数「i」を「1」増加させます。
- if (i % 2 === 0) { continue; }
- 「i」が偶数の場合、continue文が実行され、現在のループの残りの処理がスキップされます。
これにより、偶数のときにはセルへの入力処理が行われません。
- 「i」が偶数の場合、continue文が実行され、現在のループの残りの処理がスキップされます。
- sheet.getRange(\A${i}`).setValue(i);`
- テンプレートリテラル「 A${i} 」でセルの行位置を指定し、「i」が奇数の場合にそのセルに「i」の値を入力します。
例えば、「i」が「3」であればセル「A3」に「3」が入力されます。
- テンプレートリテラル「 A${i} 」でセルの行位置を指定し、「i」が奇数の場合にそのセルに「i」の値を入力します。
- }
- 関数「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++;
}
}
処理結果
コードの動作概要
workbook.getActiveWorksheet()
メソッドを使用して、Excelで現在アクティブなシートを取得します。
このシートは変数sheet
に格納され、以降の操作で対象となります。
let values: number[] = [10, 20, 30, 40, 50];
で、配列values
を定義し、配列の各要素に数値を設定しています。
この配列の要素は、シートのセルに順番に入力されます。
let i: number = 0;
でカウンター変数i
を「0」に初期化します。
この変数は、ループ内でセルの位置と配列の要素位置を管理します。
while (i < values.length)
の条件で、配列の要素数(配列の長さ)までループを繰り返します。
配列の長さはvalues.length
で取得でき、i
が配列の長さを超えるとループが終了します。
sheet.getRange(\A${i + 1}`).setValue(values[i]);
で、配列の各要素をシートのセルに設定しています。
テンプレートリテラルA${i + 1}
で、セルの位置を動的に指定します。
たとえば、i
`が0のとき、配列の1番目の要素が「A1」に入力されます。
i++
でカウンター変数i
を1増加させ、次の要素と次のセルへと処理が進みます。
このコードで使用している機能
- let (変数)
let
は変数を宣言するためのキーワードです。
- getActiveWorksheet() (アクティブなシートの取得)
workbook.getActiveWorksheet()
は、Excelのアクティブなシートを取得するメソッドです。
- 配列.length (配列の長さ)
values.length
で配列values
の要素数を取得し、while文のループ回数を配列の長さに合わせています。
- getRange() (セル範囲の取得)
sheet.getRange(\A${i + 1}`)
で、指定したセル範囲を取得します。
- setValue() (セルへの値の設定)
- 取得したセルに数値を入力するためのメソッドです。
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- function main(workbook: ExcelScript.Workbook)
- Officeスクリプトのメイン関数「main」を定義しています。
workbookパラメータが渡され、Excelのワークブック全体にアクセスできるようになります。
- Officeスクリプトのメイン関数「main」を定義しています。
- let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
- 現在アクティブなシートを取得し、「sheet」変数に格納しています。
「sheet」を使用して、シートに対する操作を行います。
- 現在アクティブなシートを取得し、「sheet」変数に格納しています。
- let values: number[] = [10, 20, 30, 40, 50];
- 数値を格納した配列valuesを定義しています。
この配列の要素が、後の繰り返し処理で順次セルに入力されます。
- 数値を格納した配列valuesを定義しています。
- let i: number = 0;
- カウンター変数「i」をnumber型で初期化します。
この変数はwhile文の中で、セルの位置と配列要素のインデックスを管理します。
- カウンター変数「i」をnumber型で初期化します。
- while (i < values.length)
- 配列の長さ「values.length」に基づいて、「i」が配列の長さより小さい間、繰り返し処理を行います。
配列の要素数だけループが繰り返されます。
- 配列の長さ「values.length」に基づいて、「i」が配列の長さより小さい間、繰り返し処理を行います。
- sheet.getRange(\A${i + 1}`).setValue(values[i]);`
- テンプレートリテラル「 A${i + 1} 」でセルの行位置を指定し、配列の要素「 values[i] 」をセルに入力します。
たとえば、最初のループで「 values[0] 」が「A1」に入力されます。
- テンプレートリテラル「 A${i + 1} 」でセルの行位置を指定し、配列の要素「 values[i] 」をセルに入力します。
- i++
- カウンター変数「i」を「1」増加させ、次の配列の要素を次のセルに設定します。
配列のすべての要素が入力されるまで繰り返します。
- カウンター変数「i」を「1」増加させ、次の配列の要素を次のセルに設定します。
- }
- 関数「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++;
}
}
処理結果
コードの動作概要
workbook.getActiveWorksheet()
メソッドを使用して、Excelのアクティブなシートを取得します。
シートはsheet
変数に格納され、以降の操作対象として扱われます。
let data: { [key: string]: string | number }
でオブジェクトdata
を定義します。
ここではプロパティ名(キー)とその値をペアで定義しており、各プロパティのキーはstring
型、値はstring
またはnumber
型としています。
let i: number = 0;
でカウンター変数i
を0に初期化しています。
この変数は、ループ内でセルの行位置を管理します。
let keys: string[] = Object.keys(data);
で、オブジェクトdata
のキー(プロパティ名)を配列keys
に変換します。
これにより、オブジェクトのプロパティをループで順次取得できるようになります。
while (i < keys.length)
の条件で、i
が配列keys
の長さ(オブジェクトのプロパティ数)より小さい間ループを実行します。
これにより、オブジェクトのプロパティの数だけ処理が行われます。
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」列のセルに入力します。
i++
でカウンター変数i
を1増加させ、次のプロパティ(キーと値)を次の行に設定します。
このコードで使用している機能
- let (変数)
let
は変数を宣言するためのキーワードです。
- getActiveWorksheet() (アクティブなシートの取得)
workbook.getActiveWorksheet()
は、Excelのアクティブなシートを取得するメソッドです。
- Object.keys() (オブジェクトのキー取得)
Object.keys(data)
で、オブジェクトdata
のすべてのキーを配列keys
として取得しています。
- getRange() (セル範囲の取得)
sheet.getRange(\A${i + 1}`)
で、指定したセル範囲を取得します。
- setValue() (セルへの値の設定)
- 取得したセルに数値を入力するためのメソッドです。
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- function main(workbook: ExcelScript.Workbook)
- Officeスクリプトのメイン関数「main」を定義しています。
workbookパラメータが渡され、Excelのワークブック全体にアクセスできるようになります。
- Officeスクリプトのメイン関数「main」を定義しています。
- let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
- 現在アクティブなシートを取得し、「sheet」変数に格納します。
シートが操作対象になります。
- 現在アクティブなシートを取得し、「sheet」変数に格納します。
- let data: { [key: string]: string | number } = { … };
- プロパティのキーを「string」、値を「string」または「number」としたオブジェクト「data」を定義しています。
このオブジェクトの各プロパティをExcelのセルに出力します。
- プロパティのキーを「string」、値を「string」または「number」としたオブジェクト「data」を定義しています。
- let i: number = 0;
- カウンター変数「i」を「0」に初期化します。
この変数はループでセルの行位置を管理します。
- カウンター変数「i」を「0」に初期化します。
- let keys: string[] = Object.keys(data);
- オブジェクト「data」のキー(プロパティ名)を配列「keys」に変換します。
これにより、ループで各プロパティにアクセスしやすくなります。
- オブジェクト「data」のキー(プロパティ名)を配列「keys」に変換します。
- while (i < keys.length)
- 「i」が配列「keys」の長さ(プロパティ数)より小さい間、ループを続ける条件を設定します。
- let key: string = keys[i];
- 「i」番目のプロパティのキーを「key」変数に格納します。
- let value: string | number = data[key];
- 「key」に対応する値を「value」変数に格納します。
- sheet.getRange(\A${i + 1}`).setValue(key);`
- 「A」列の指定セルにキーを入力します。
たとえば、「A1」に”Name”が入力されます。
- 「A」列の指定セルにキーを入力します。
- sheet.getRange(\B${i + 1}`).setValue(value);`
- 「B」列の指定セルにキーに対応する値を入力します。
たとえば、「B1」に”Alice”が入力されます。
- 「B」列の指定セルにキーに対応する値を入力します。
- i++
- カウンター「i」を「1」増加させ、次のプロパティを処理します。
- }
- 関数「main」の終了を示します。
総括・ポイント
このコード例では、オブジェクトのプロパティ数に基づいて繰り返し処理を行い、各プロパティのキーと値をExcelのセルに順次入力しています。
オブジェクトの各データをExcel上に整然と並べることで、データ管理や視覚化が容易になります。
Excelでの柔軟なデータ入力やオブジェクトデータの可視化に役立つ実装です。
この記事のまとめ
この記事では、Officeスクリプトの「while文」 を使った繰り返し処理について解説しました。
特定の条件が満たされるまで繰り返し処理を行う方法や、無限ループを防ぐポイント、効率的なループ制御の実現について学びました。
ポイントのおさらい
while文の基本を理解し、条件が満たされるまで繰り返し処理を行う方法を学びました。
- while文の基礎を理解する
- while文を使って、条件が満たされるまで繰り返し処理を行う方法を解説しました。
⇒ 「Officeスクリプトの「while文」の構成・使い方について」をもう一度見る
- while文を使って、条件が満たされるまで繰り返し処理を行う方法を解説しました。
- 無限ループを防ぐための設定を確認
- 終了条件の設定やカウンター変数の更新に注意して、無限ループを防ぐポイントを学びました。
⇒ 「注意ポイント1 : 無限ループに注意」をもう一度見る
- 終了条件の設定やカウンター変数の更新に注意して、無限ループを防ぐポイントを学びました。
- breakとcontinueの使い分け
- ループを途中で終了させる
break
や、特定の条件でスキップするcontinue
の使い方を確認しました。
⇒ 「Officeスクリプトのwhile文でループを中断する方法:breakとcontinueの使い方」をもう一度見る
- ループを途中で終了させる
- 使用例を活用してwhile文を実践
- カウンター変数を使った単純な繰り返しや、条件分岐を取り入れたwhile文の使用例をいくつか紹介しました。
⇒ 「Officeスクリプト「while文」の使用例をご紹介」をもう一度見る
- カウンター変数を使った単純な繰り返しや、条件分岐を取り入れたwhile文の使用例をいくつか紹介しました。
さらに学ぶために
この記事で学んだwhile文
をもとに、for文
やforEach
、map
など他の繰り返し処理と組み合わせて、Excelでのデータ自動化や効率的な処理を追求してみましょう。
while文の動的な条件設定に加え、データの操作や条件分岐の方法を駆使することで、より柔軟な自動化スクリプトが実現できます。