VBAの繰り返し処理について解説。

システムトレード

この記事ではプログラミング初心者向けに、VBAの基本を分かりやすく解説しています。

主に繰り返し処理(ループ処理)の基本事項を解説しています。

 

※当サイトではVBAの基本を解説しています。

もし、VBAの基本が分からなければ、下記リンクより基礎を学習できます。

VBAの開発環境の構築方法を解説

VBAのモジュールを作成する方法を解説

VBAのデータ入力方法を解説

VBAの変数について解説

⑤VBAの繰り返し処理について解説(本記事)

VBAの条件分岐処理について解説

Excelでバックテストする方法。【VBAによるツール開発】

 

 
マンモス
マンモス
はじめまして、マンモスです。
プログラミング知識ゼロからシステムトレードを自作できるようになった経験を活かし、この記事を書いてます。

 

 

VBAの繰り返し処理とは?

繰り返し処理とはループ処理とも呼ばれ、特定の処理を条件を満たすまで繰り返す処理になります。

例えば、移動平均の作成プログラムは以下の図のようになります。

※移動平均とは特定期間の終値の平均です。(今回は5日で計算)

 

 

Sub 移動平均算出()

Range(“C6”) = (Range(“B2”) + Range(“B3”) + Range(“B4”) + Range(“B5”) + Range(“B6”)) / 5

Range(“C7”) = (Range(“B3”) + Range(“B4”) + Range(“B5”) + Range(“B6”) + Range(“B7”)) / 5

End sub

 

今回のプログラムで求めた移動平均は2つです。

これが100個分必要になる場合はどうプログラミングするべきでしょうか?

 

くまさん
くまさん
同じように100個分作る!

 

マンモス
マンモス
そのような脳筋の方法でも間違いではありませんが、
非効率的でスマートではありません。

ここで役に立つのが繰り返し処理になります。  

 

VBAの繰り返し処理構文

基本的な繰り返し処理のFor文を紹介します。

For文は指定した回数分、処理を繰り返します。

 

For分

構文は以下のとおりです。

For 変数 =  初期値 To  終了値

‘ここに処理を記載

Next  変数   
‘(変数は省略可能)  

 

黒太字はこのまま入力し、赤字は任意の値をいれます。

ForとNextの横の変数は同じものを入力します。

初期値、終了値 は数字もしくは数字として認識される変数(Integer、Long)などを入力します。  

 

For分の説明

初期値から終了値までFor~Next間に記載された処理が繰り返されます。

初期値が「1」で終了値が「100」であれば100回の処理を繰り返すことになります。

また、変数には繰り返しの間に1~100までの値が代入されます。

For分ではこの変数をうまく使うことがキーになります。

変数はカウンタ変数と呼ばれ、慣例的に小文字の「i」,「j」,「l」などが使われます。

あくまで慣例のため、任意の名前でもOKです。  

 

例 100日分の移動平均を作成するプログラム

まずはNG例です。

Option Explicit ‘変数宣言を強制するコード

Sub 移動平均算出()
Dim i As Integer ‘For文のカウンタ変数を宣言

For i = 1 To 100 ‘100回繰り返す

  Range(“C6”) = (Range(“B2”) + Range(“B3”) + Range(“B4”) + Range(“B5”) + Range(“B6”)) / 5

Next

End sub

 

上記のコードは、同じセル範囲の移動平均を100回算出するため、100回計算させる意味がありません。

 

次に正しい例です。

Option Explicit ‘変数宣言を強制するコード

Sub 移動平均算出()
Dim i As Integer ‘For分のカウンタ変数を宣言

For i = 6 To 106 ‘初期値は1である必要なし

  Cells(i, 3) = (Cells(i – 4, 2) + Cells(i – 3, 2) + Cells(i – 2, 2) + Cells(i – 1, 2) + Cells(i, 2)) / 5

Next

End sub

 

コードの説明

Cells(1, 3)

上記のコードは、セルに対して処理するためのコードです。

Range(“A1”)との違いは、数値でセルの座標を指定できることです。

Cells(1,3)の最初の「1」は行を表し、次の「3」は列を表します。

つまり、Cells(1,3)はC3セルを表します。  

 

Cells(i, 3) = (Cells(i – 4, 2) + Cells(i – 3, 2) + Cells(i – 2, 2) + Cells(i – 1, 2) + Cells(i, 2)) / 5

このコードの左辺Cells(i, 3)は、移動平均の算出先を表します。

右辺は移動平均の計算元データです。

 

また、For構文でのカウンタ変数「i」の値が繰り上がる特性を活かし、i-nとすることで行を指定しています。

移動平均で使用するデータ数は5個のため、i、i-4、i-3、i-2、i-1の5行分のデータの合計を算出し、5で割ることで移動平均を算出します。

もし、i=6であれば

i-4が2行目

i-3が3行目

i-2が4行目

i-1が5行目

iが6行目 となります。

 

For文では、上記で解説した移動平均の算出を100回分繰り返しています。

初期値、終了値 をそれぞれ6、106とした理由は、移動平均を計算するために5つ分のデータを使用するため、一番最初に移動平均が算出されるセルは「C6」セルとなるからです。  

 

このように、For分を使用することで大量のデータ処理が可能になります。

また、For分の中にFor分を作ることで、入れ子(ネスト)構造にすることもできます。

最初のループを1~100とし、その中のループを1~10とした場合、1~10のループを100回ループさせ、合計1000回の処理を可能にします。

このようにダブルループもよく使う処理のため、覚えておきましょう。        

Option Explicit ‘変数宣言を強制するコード

Sub 移動平均算出()
Dim i As Integer ‘1つ目のループのカウンタ変数を宣言
Dim j As Integer ‘2つ目のループのカウンタ変数を宣言

For i = 1 To 100

  For j = 1 to 10

    ’ここに処理を記載

  Next j

Next i

End sub

 

補足事項 インデントについて

インデントとはプログラミングする際、行の先頭に空白を入力し、字下げを行うことです。

インデントはキーボードの「TABキー」を押すことで可能です。

インデントはしてもしなくても、プログラムの結果に影響はありませんが、プログラムを書くときやデバックする際に視覚的に分かりやすくなります。

※デバックとはプログラムのバグを修正することです。

 

以下の例で説明します。

 

インデントしていないコード

Sub 移動平均算出()

Dim i As Integer
Dim j As Integer
Dim l as Integer

For i = 1 To 100

For j = 1 to 10

For l = 1 to 10

‘ここに処理を記載

Next

Next

Next
End sub

インデントしているコード

Sub 移動平均算出()

Dim i As Integer
Dim j As Integer
Dim l as Integer

For i = 1 To 100

  For j = 1 to 10

    For l = 1 to 10

      ’ここに処理を記載

    Next

  Next

Next

End sub

 

どちらも同じ3重ループのFor文です。

インデントしているコードのほうが、For構文の入れ子構造が分かりやすくなっています。

 

くまさん
くまさん

インデントしたほうがわかりやすい!

マンモス
マンモス

VBAでのインデントは任意ですが、
わかりやすいプログラムを書くために、
インデントするくせをつけましょう。

タイトルとURLをコピーしました