Excel VBA で For Each ループを使用する方法

Excel VBA で For Each ループを使用する方法
あなたのような読者は、MUO のサポートを支援します。当サイトのリンクを使用して購入すると、アフィリエイト手数料が発生する場合があります。 続きを読む。

ループと VBA は一緒に使用できますが、それには十分な理由があります。ワークブック、ワークシート、範囲などの Microsoft Office オブジェクトを扱う場合、ループを使用すると、それぞれを比較的簡単に切り替えることができます。





多かれ少なかれすべての VBA ループがオブジェクトでうまく機能しますが、'for each' ループは、オブジェクト コレクションを操作するための最良のオプションの 1 つです。 Excel VBA を初めて使用し、for each ループをマスターしようとしている場合は、これらの例のいくつかからすぐに学ぶことができます。この典型的なループについて知っておくべきことはすべてここにあります。





今日のメイク動画 スクロールしてコンテンツを続ける

For Each ループの構文

for each ループの構文は、Excel VBA の通常の for ループとよく似ています。構文は次のとおりです。





アンドロイドのための最高の無料カレンダーアプリ
 For each variable_name in object_collection 

[statement]

[statement]

[statement]

Next variable_name

ループは「for each」キーワードで始まります。任意の変数名を使用でき、その後にオブジェクト コレクションが続きます。 for each ループ内のオブジェクトは、セル、範囲、シート、さらにはワークブックにすることができます。これがこのループの美しさです。さまざまな Excel コレクションを柔軟に操作できます。

ループは各コレクション値を循環し、定義された変数名に参照を格納します。実行後、VBA は格納されたステートメントをループ内で実行し、コレクション内の次のオブジェクトに移動します ( ここではキーワードが役立ちます)。基本的な例でコード構造を理解しましょう。



Excel VBA で For Each ループを使用する方法

セル A1 から A10 に数値を出力するとします。最良の方法は、範囲関数で for each ループを使用し、必要なことをコードに任せることです。この単純なタスクを実行する方法は次のとおりです。

  1. を押してVBAコードエディタを開きます すべての + F11 .
  2. をクリックしてモジュールを挿入します。 モジュール 内のオプション 入れる タブ。   列出力のある Excel シート's code editor
  3. コード エディター モジュール ウィンドウで sub() コマンドを使用してサブルーチンを作成します。サブルーチンには意味のある名前を割り当ててください。この例では、次の名前を使用できます。 for_each_loop .

基本的なことは終わったので、コードを書き始めましょう。サブルーチン内で、次のコマンドを入力します。





 Dim cell as range 

For each cell in Sheets("Sheet1").Range("A1:A10")

cell.value = 10

Next cell

コードが実行されると、 c 変数は A1 の値を格納します。次に、ループ内のステートメントに進むと、コマンドが評価され、定義されたセル、つまりセル A1 に値 10 が入力されます。

最後に、次のキーワードに移動すると、次の値、つまりセル A2 に移動します。ループは、セル A10 に到達するまで実行されます。これが最終出力です。





  エディター内の VBA コード スニペットと Excel 出力

オブジェクトでのループの使用: セル、シート、およびワークブック

Excel には、定期的に使用する 3 つの主要なオブジェクト タイプがあります。これらは、セル、シート、およびワークブックです。 3 つのオブジェクト タイプすべてでループを使用する方法を次に示します。

セルとループを一緒に操作する

Sheet1 のセル範囲に値といくつかの書式設定条件を追加するとします。最初のステップとして、ループ内の条件を定義し、続いて書式設定コマンドを定義する必要があります。

サブルーチン内に次のコードを入力します。

 Sub for_each_loop() 



Dim c As Range



For Each c In Sheets("Sheet1").Range("A1:A10")



With c

.Value = 10

.Font.Color = vbRed

.Font.Bold = True

.Font.Strikethrough = True



End With



Next c



End Sub
  コーディング エディター内の VBA コード スニペット

function は、1 つの特定のオブジェクトで複数の機能を実行する場合に役立ちます。 c 変数を使用して一連のタスクを実行したいので、 with..end with 関数を使用してすべてを組み合わせることができます。

Spotifyプレイリストをコピーする方法

ループは、c の値を各セルの値と同一視し、値を 10 として入力します。さらに、セルの色を赤に変更し、値を太字にし、取り消し線を付けます。すべてのステップが完了すると、範囲内の次の定義された値に移動します。

ループを使用してシートを制御する

上記の例と同様に、for each ループを使用してシートを制御できます。 VBAでSheet1の名前をSheet3に変えてみたらどうですか?

次のコードを使用して、VBA を使用して Excel の既存のワークシートの名前を変更できます。

 Sub for_each_loop_sheets() 



For Each sht In ThisWorkbook.Sheets



If sht.Name = "Sheet1" Then



sht.Name = "Sheet3"



End If



Next sht



End Sub
  エディター内の VBA コード スニペット

コードはワークブック内の各シートをループし、各シートの名前をチェックします。 Sheet1 という名前が見つかった場合は、Sheet3 に変更します。ワークブック内に残りのシートがある場合は、そのシートに進みます。コードの実行が最後のシートに到達すると、ループとサブルーチンを終了します。

他のいくつかの一般的な用途の中で、次のことができます VBA を使用して複数のワークシートを結合する ループを使用して単一のシートのコンテンツを更新します。

ループを使用してワークブックを切り替える

最後に、for each ループを使用して、さまざまなワークブックを切り替えて特定のタスクを実行できます。この機能を例で示しましょう。

VBA コマンドを使用して、3 つの新しいブックを追加し、開いているすべてのブックをまとめて閉じることができます。方法は次のとおりです。

 Sub loop_wrkbook() 



Dim wrkbook as workbook



Workbooks.Add

Workbooks.Add

Workbooks.Add



For Each wrkbook In Workbooks



wrkbook.



Next wrkbook



End Sub