【簡単エクセル/Excel VBA マクロ】For…Each ループ|繰り返し処理 #004

アフィリエイト広告を利用しています。
Information
運営者・ポテ

いつもありがとうございます!

皆さん、こんにちは。ご覧いただきありがとうございます。

“日々の業務にちょうどいい自動化を”──

業務改善アプリケーションの作成を行っている「ソフトデザイン工房」 です。

VBAで行いたい処理の代表格に「繰り返し処理」があります。

本稿では、「繰り返し処理」の方法のひとつである「For...Each ループ」を、とても簡単な例を用いて解説します。

「For Each ループ」は、コレクションや配列の各要素に対して繰り返し処理を実行するステートメントです。

「For Each ループ」は、「For...Next ループ」、「Do...While ループ」、「Do...Until ループ」と違い、コレクション配列の各要素に対して繰り返し処理を行うという点においてユニークなステートメントです。

Information
  • ステートメント
    VBAの中で何らかの固有の働きをするものを定義したものの呼称です。VBAには、Ifステートメント、For...Next ステートメント、Withステートメント、Sub ステートメントなど、様々なステートメントがあります。例えば、Subステートメントは、コードの始まりを定義するステートメントです。
  • コレクション
    オブジェクトの集合のことです。

なお、本稿も含めた繰り返し処理の姉妹記事を以下の通り準備しておりますので、もしよろしければ合わせてご覧ください。

この記事が、あなたのVBAマクロの価値をさらに高める一助となれば幸いです。

VBAを活用して、自分自身や身近なコミュニティに合ったアプリケーションを作成し、仕事量は半分に、成果は2倍に──そんな未来を目指すあなたを応援しています。

VBAにおける繰り返し処理の全体像

VBAにおける「繰り返し処理」には、大きく分けて4つの方法があります。「繰り返し処理の」の全体像は以下の記事で解説します。

この記事では「繰り返し処理の」一部である「For...Each ループ」を解説します。

VBAで「For...Each ループ」を行う方法

For...Each ループの基本構文を以下に示します。

For Each 要素 in コレクション(または配列)

    'ここに繰り返す処理を書く

Loop

この構文では、コレクション(または配列)の各要素に対して、繰り返し処理を実行します。

例として、ワークブック内にあるすべてのシートの名称を "Sheet1"に書き込むコードを以下に示します。

ワークブック内には、下図のように3つのシートがあることにします。

Sub sample()

' 変数の宣言
Dim wb As Workbook
Dim ws As Worksheet
Dim ws1 As Worksheet
Dim row_idx As Long    ' 行番号変数


' ワークブックを"Sheet1"をオブジェクト変数として取得
Set wb = ThisWorkbook
Set ws1 = wb.Worksheets(1)


' 行番号変数に初期値を設定
row_idx = 1


' ワークブック内のすべてのシート名を取得して"Sheet1"に書き込む
For Each ws In wb.Worksheets

    ' "Sheet1"にシート名を書き込む
    ws1.Cells(row_idx, 1) = ws.Name
    
    ' row_idx (行番号変数)にプラス1
    row_idx = row_idx + 1

Next ws

End Sub

解説します。

変数の宣言

Sub sample()

' 変数の宣言
Dim wb As Workbook
Dim ws As Worksheet
Dim ws1 As Worksheet
Dim row_idx As Long    ' 行番号変数

冒頭の部分は変数を宣言しています。

Dim 変数 As データ型 の構文で宣言します。これによって各変数は As 以降で指定したデータ型のデータを格納することができるようになります。

尚、"Workbook"はワークブック、"Worksheet"はワークシート、"Long"は整数を格納するためのデータ型を意味しています。


ことばの意味

  • 変数
    「値」や「オブジェクト」を入れておく箱のようなものです。変数はその名の通りコード内での指示によって値やオブジェクトを変えることができます。
  • オブジェクト
    VBAで操作する対象のことです。
  • Long
    -2,147,483,648から2,147,483,647までの範囲の整数値を格納することができる。尚、整数を扱うデータ型には Integer もあるが、これは-32,768から32,767までと、Long よりも扱える数が小さい。

ワークブックとワークシートをオブジェクト変数として取得

' ワークブックを"Sheet1"をオブジェクト変数として取得
Set wb = ThisWorkbook
Set ws1 = wb.Worksheets(1)

次に、ワークブックとワークシートを、オブジェクト変数として格納しています。

wb.Worksheets(1)のカッコ内の数値1は、ワークブック内の1番目のワークシート、つまり左端のワークシートを意味しています。

ことばの意味
  • オブジェクト変数
    「オブジェクト」を入れておく箱のようなものです。通常の変数が数値や文字列などを格納するのに対して、オブジェクト変数はオブジェクトを格納します。

For...Each ループを用いた繰り返し処理

' 行番号変数に初期値を設定
row_idx = 1


' ワークブック内のすべてのシート名を取得して"Sheet1"に書き込む
For Each ws In wb.Worksheets

    ' "Sheet1"にシート名を書き込む
    ws1.Cells(row_idx, 1) = ws.Name
    
    ' row_idx (行番号変数)にプラス1
    row_idx = row_idx + 1

Next ws

次に、繰り返し処理を実行しています。

まず、row_idx = 1 で、行番号変数 row_idx に初期値を設定します。

次に、ループを開始するコード For Each ws In wb.Worksheets を記述します。これは、Worksheets コレクションのすべてのワークシートについて同じ処理を繰り返しなさい、という命令です。

これで、For... と Next ws の間にある行の処理が繰り返し実行されます。この例では、"Sheet1"にシート名を書き込み、その後、行番号変数 row_idx にプラス1をしています。

この row_idx = row_idx + 1 がないと書き込む行が次の行に進まず、繰り返し処理の間中ずっと同じセルに値が上書きされてしまいます。注意してください。

以上が、For...Eachループの基本的な使い方です。

運営者・ポテ

ご覧いただきありがとうございました!

VBAスキルアップの参考情報

近年は、ChatGPTをはじめとするAIの登場によって、学習のスタイルが大きく変わりました。

分からないことがあれば、AIに尋ねれば答えがすぐに見つかる時代です。

とはいえ、AIを使いこなすには、自分自身の基本的な知識や理解力が欠かせません。

全体像をつかむためには、やはり書籍などで体系的に学んでおくことが今でも有効です。

そのうえでAIを活用すれば、自分の理解度に合わせた的確な解説や、応用のヒントを得ることができます。

「学んで基礎を築く → AIで補い発展させる」──このサイクルを重ねることで、VBAスキルは着実に高まっていくでしょう。

VBAのスキルアップ

VBAを学び始めるなら

入門書は、どれを選んでも大きな差はないように感じます。

どれを選ぶかに悩むことに時間をかけるよりも、まずは手頃な一冊を手に取って進めてみるのがおすすめです。

もし迷ったときには、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。

基礎を超えて力をつけたいなら

私は上級者を目指していましたので、入門書にとどまらず、このような内容の濃い一冊を選んで学んでいました。

今は誰でもAIを活用できる時代になりましたが、上級者を目指す方にとっては、AIをより上手に活用するという意味でも、こうした本は今なお価値があります。

このレベルの本を一冊持っておくことに、損はないでしょう。


資格で能力を証明したいなら

VBAのプログラミング能力を客観的に示したい場合には「VBAエキスパート試験」があります。

特に「スタンダード」の方は上級者向けです。

あなたが社内業務の改善を行う立場であっても、VBAで作成したシステムをお客様に納める立場であっても、この資格は信頼や安心につながるでしょう。

以下の公式テキストが販売されています。



プログラミングの一般教養

「独学プログラマー」というプログラミングの魅力を解説した書籍があります。

これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。

今はAIにコードを尋ねれば、答えが返ってくる時代です。

しかし、この本からは「コード」以上に、プログラミングに向き合う姿勢や考え方を学ぶことができるでしょう。


こちらの記事でも紹介しています。もしよろしければご覧ください。

【初心者歓迎】無料相談受付中 

運営者・ポテ

いつもありがとうございます!

限られた時間をより良く使い、日本の生産性を高めたい──

みんなの実用学を運営するソフトデザイン工房では、業務整理や業務改善アプリケーション作成のご相談を承っております。

お気軽にご相談ください。


こちらの記事でも紹介しております。

おわりに

運営者・ポテ

ご覧いただきありがとうございました!

今回の記事では、「繰り返し処理」の中の「For…Each ループ」を解説しました。

お問い合わせやご要望がございましたら、「お問い合わせ/ご要望」フォームまたはコメント欄よりお知らせください。

この記事が皆様のお役に立てれば幸いです。

なお、当サイトでは様々な情報を発信しております。よろしければトップページもあわせてご覧ください。

この記事を書いた人

運営者・ポテソフトデザイン工房|日々の業務にちょうどいい自動化を
■人生を追求する凡人 ■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢 ■ソフトデザイン工房運営(個人事業者) - 業務改善アプリケーションをご提供 ■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成を追求。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です