検索

キーワード


Excel VBA 同じ処理を繰り返し行う

  • 公開日:2020-04-24 09:19:32
  • 最終更新日:2021-01-17 20:46:17

はじめに

エンジニアのIMMRです。

今まで、セルやフォントの設定などの方法を紹介してきましたが、それは1列のみのデータです。

Sub samp1()
    Cells(1, 1).Font.Color = RGB(0, 255, 255)
End Sub


図1 ブック(上記、コードによって、文字の色が変更されたもの)

1つのセルのみを処理する例


もし、下記のように複数列のデータを同様の処理で行うとすると下記のような記述になってしまいます。

図2 ブック(複数の文字が記載されているもの)

複数のセルに同じ処理をする例

Sub samp2()

    Cells(1, 1).Font.Color = RGB(0, 255, 255)
    Cells(2, 1).Font.Color = RGB(0, 255, 255)
    Cells(3, 1).Font.Color = RGB(0, 255, 255)
    Cells(4, 1).Font.Color = RGB(0, 255, 255)
    Cells(5, 1).Font.Color = RGB(0, 255, 255)

End Sub



ほぼ、同じプログラムを何度も記載することになります。

今回の場合、データ数が5件なので、5行で済みましたが

データ数が、1000件 2000件あると1000行 2000行の記載が必要になります。

似たような処理文を記載するのは非効率です。

ここで、便利なものが繰り返しを行う命令文で、

1回分の処理文を記載するだけで必要な回数を繰り返すことが出来ます。


同じ処理を繰り返し行う方法は、複数ありますが、一番よく使われる(For Next)を説明します。

1.同じ処理を繰り返し行う方法について

同じ処理を繰り返し行う方法の1つはFor Nextです。

For Nextの処理は、指定した回数だけ、処理を行うことができます。

メッセージボックスを5回表示したい場合、

For Nextを使用すれば1回の記述で指定した回数(ここでは5回)だけ表示することが出来ます。


図3 そのまま記述したものとFor Nextを使用した時の比較

For Next文のイメージ


上記図では、繰り返しが出来るというイメージ図を記載しましたが、実際は、繰り返し自体の回数の値は記載しません。

では、どの値で繰り返しを実施しているのかというとFor Nextで持っているカウンターの値です。

カウンターのStartの値とEndの値を設定して、Start値からEnd値になるまで繰り返しが行われています。

このカウンターがとても便利で、繰り返し以外の使い道があるのです。


例えば、カウンター(i)のStart値を1、End値を5とします。 

カウンター(i)が1の状態で処理が行われると、繰り返しが行われるスタート地点に戻ります。

そうしたら、カウンター に+1 つまり、カウンター(i)が2になり先ほどと同じ処理が行われます。

結果、カウンター(i)が1→2→3→4→5 という感じで、5回行われます。 ※カウンター(i)が6になると繰り返しから抜けます。


図 4 For Nextの流れ


For Next文におけるカウンターの説明


カウンターのiが増えるとどのようなことが出来るのかというと、指定セルをずらすことが出来ます。

指定したいセルを Cell(i, 1)で指定すると

1回目は、iが1で Cell(1,1)

2回目は、iが2で Cell(2,1)

3回目は、iが3で Cell(3,1) ・・・

という感じでです。


図5 For Nextを使用しての処理のイメージ

For Next文を使ったマクロのイメージ


そうなると、下記のように記載してあるものを置き換えることが出来ます。 

    Cells(1, 1).Font.Color = RGB(0, 255, 255)
    Cells(2, 1).Font.Color = RGB(0, 255, 255)
    Cells(3, 1).Font.Color = RGB(0, 255, 255)
    Cells(4, 1).Font.Color = RGB(0, 255, 255)
    Cells(5, 1).Font.Color = RGB(0, 255, 255)

    Cells(i, 1).Font.Color = RGB(0, 255, 255)

後は、For Nextを使用して、start値を1、End値を5と設定

 1 iが1の時はCells(i, 1)のiは1となるため、Cells(1,1)つまり、Cells(1,1).Font.Color = RGB(0, 255, 255)が行われます。

 2 iが2の時はCells(i, 1)のiは2となるため、Cells(2,1)つまり、Cells(2,1).Font.Color = RGB(0, 255, 255)が行われます。

同様に、iが3, 4, 5で行われます。

このような方法を使用することにより、記載した処理は、一回でも複数のセルに対して行うことが出来ます。


2.サンプルコード(同じ処理を繰り返し行う)

下記のように記載します。

For counter = start To end Step step数
  処理文
Next i

 〇counterは、カウンターに使う変数です。 

  ※一般的には、i, j, k等の英字一文字が使われます。

 〇startは、カウンタの初期値です。

 〇endは、カウンタの最終値です。

 〇stepは、カウンターの増減値です。

  ※1→3→5のように2つずつ増加したい場合は、Step2 と記載します。1つずつなら記載不要です。              

 また、counterに使うi等の変数は宣言が必要です。   例 Dim i As Long


3.サンプルコードで同じ処理を繰り返し行う

上記サンプルコードで同じ処理が行われるか、実行して試してみます。 

図6 ブック(処理前)

For Next文を使ったマクロを実行する前の画面


サンプルコード

Sub Test4()

Dim i As Long

    For i = 1 To 5
        Cells(i, 1).Font.Color = RGB(0, 255, 255)
    Next i

End Sub


図7 ブック(上記、コード実行後)

For Next文を使ったマクロの実行結果

カラー変更の実行文は、1行のみですが、

それぞれの行のセルに対して、フォントのカラー変更が行われました。



【著者】

Imamura

今まではExcel VBAの開発をしてきました。
開発を主にしたものや他の業務の効率化を目指して行ったものさまざまです。
現在は、他のプログラミング言語に挑戦して、スキルアップを目指しています。

よく読まれている記事