【ExcelVBA】4章：繰り返し処理（For ～ Next文）

この章ではExcelVBAで扱うことができる繰り返し処理のうち「For ～ Next文」について説明をします。
繰り返し処理が扱えることでできることは多岐にわたりますが、ここでは配列へのデータ格納と文字列を連結する処理を例に説明します。

1、前章までの方法

```
Sub set_demonS_noLoop()

    Dim pillar() As String
    Dim table_string As String

    ReDim pillar(0 To 7, 0 To 1)

    Range("A1").Value = "冨岡義勇"
    Range("A2").Value = "煉獄杏寿郎"
    Range("A3").Value = "胡蝶しのぶ"
    Range("A4").Value = "宇随天元"
    Range("A5").Value = "甘露寺蜜璃"
    Range("A6").Value = "時透無一郎"
    Range("A7").Value = "悲鳴嶼行冥"
    Range("A8").Value = "不死川実弥"

    Range("B1").Value = "トミオカギユウ"
    Range("B2").Value = "レンゴクキョウジュウロウ"
    Range("B3").Value = "コチョシノブ"
    Range("B4").Value = "ウズイテンゲン"
    Range("B5").Value = "カンロジミツリ"
    Range("B6").Value = "トキトウムイチロウ"
    Range("B7").Value = "ヒメジマギョウメイ"
    Range("B8").Value = "シナズガワサネミ"

    pillar(0, 0) = Cells(1, 1).Value
    pillar(1, 0) = Cells(2, 1).Value
    pillar(2, 0) = Cells(3, 1).Value
    pillar(3, 0) = Cells(4, 1).Value
    pillar(4, 0) = Cells(5, 1).Value
    pillar(5, 0) = Cells(6, 1).Value
    pillar(6, 0) = Cells(7, 1).Value
    pillar(7, 0) = Cells(8, 1).Value

    pillar(0, 1) = Cells(1, 2).Value
    pillar(1, 1) = Cells(2, 2).Value
    pillar(2, 1) = Cells(3, 2).Value
    pillar(3, 1) = Cells(4, 2).Value
    pillar(4, 1) = Cells(5, 2).Value
    pillar(5, 1) = Cells(6, 2).Value
    pillar(6, 1) = Cells(7, 2).Value
    pillar(7, 1) = Cells(8, 2).Value

    table_string = table_string & pillar(0, 0) & "," & pillar(0, 1) & vbCrLf
    table_string = table_string & pillar(1, 0) & "," & pillar(1, 1) & vbCrLf
    table_string = table_string & pillar(2, 0) & "," & pillar(2, 1) & vbCrLf
    table_string = table_string & pillar(3, 0) & "," & pillar(3, 1) & vbCrLf
    table_string = table_string & pillar(4, 0) & "," & pillar(4, 1) & vbCrLf
    table_string = table_string & pillar(5, 0) & "," & pillar(5, 1) & vbCrLf
    table_string = table_string & pillar(6, 0) & "," & pillar(6, 1) & vbCrLf
    table_string = table_string & pillar(7, 0) & "," & pillar(7, 1) & vbCrLf

    MsgBox table_string

    '出力結果：冨岡義勇,トミオカギユウ
    '         煉獄杏寿郎,レンゴクキョウジュウロウ
    '         胡蝶しのぶ,コチョシノブ
    '         宇随天元,ウズイテンゲン
    '         甘露寺蜜璃,カンロジミツリ
    '         時透無一郎,トキトウムイチロウ
    '         悲鳴嶼行冥,ヒメジマギョウメイ
    '         不死川実弥,シナズガワサネミ

End Sub
```

2、配列へのデータ格納を繰り返し処理を用いて行う

```
Sub set_demonS_inFor()
    
    Dim pillar() As String
    Dim table_string As String
    
    Dim i As Long

    ReDim pillar(0 To 7, 0 To 1)
    
    Range("A1").Value = "冨岡義勇"
    Range("A2").Value = "煉獄杏寿郎"
    Range("A3").Value = "胡蝶しのぶ"
    Range("A4").Value = "宇随天元"
    Range("A5").Value = "甘露寺蜜璃"
    Range("A6").Value = "時透無一郎"
    Range("A7").Value = "悲鳴嶼行冥"
    Range("A8").Value = "不死川実弥"

    Range("B1").Value = "トミオカギユウ"
    Range("B2").Value = "レンゴクキョウジュウロウ"
    Range("B3").Value = "コチョシノブ"
    Range("B4").Value = "ウズイテンゲン"
    Range("B5").Value = "カンロジミツリ"
    Range("B6").Value = "トキトウムイチロウ"
    Range("B7").Value = "ヒメジマギョウメイ"
    Range("B8").Value = "シナズガワサネミ"
    
    For i = 0 To 7 Step 1
    
        pillar(i, 0) = Cells(i + 1, 1).Value
        pillar(i, 1) = Cells(i + 1, 2).Value
        
    Next
        
    table_string = table_string & pillar(0, 0) & "," & pillar(0, 1) & vbCrLf
    table_string = table_string & pillar(1, 0) & "," & pillar(1, 1) & vbCrLf
    table_string = table_string & pillar(2, 0) & "," & pillar(2, 1) & vbCrLf
    table_string = table_string & pillar(3, 0) & "," & pillar(3, 1) & vbCrLf
    table_string = table_string & pillar(4, 0) & "," & pillar(4, 1) & vbCrLf
    table_string = table_string & pillar(5, 0) & "," & pillar(5, 1) & vbCrLf
    table_string = table_string & pillar(6, 0) & "," & pillar(6, 1) & vbCrLf
    table_string = table_string & pillar(7, 0) & "," & pillar(7, 1) & vbCrLf
    
    MsgBox table_string
    
    '出力結果：冨岡義勇,トミオカギユウ
    '         煉獄杏寿郎,レンゴクキョウジュウロウ
    '         胡蝶しのぶ,コチョシノブ
    '         宇随天元,ウズイテンゲン
    '         甘露寺蜜璃,カンロジミツリ
    '         時透無一郎,トキトウムイチロウ
    '         悲鳴嶼行冥,ヒメジマギョウメイ
    '         不死川実弥,シナズガワサネミ
    
End Sub
```

i）「For」・「Next」
定型文言です。

ii）「i = 0 To 7」
変数 i に 0 を代入し i に格納された値が 7 を超えるまでの間、「For」～「Next」の中の処理を繰り返す。
変数名は i である必要はありませんが、繰り返し処理の際に使う変数は他のプログラミング言語にも共通して i が主流です。
最初に変数に代入する値は 0 である必要はありません。

iii）「Step 1」
処理が「Next」に到達したとき、i に 1 を足す。
足す数値は 1 でなくてもよい、-1 等も指定可能です。
「Step ～」は省略可能です。省略した場合は 1 が指定されたことになります。

3、文字列の連結も繰り返しで行う

```
Sub set_demonS_inFor2()

    Dim pillar() As String
    Dim table_string As String

    Dim i As Long

    ReDim pillar(0 To 7, 0 To 1)

    Range("A1").Value = "冨岡義勇"
    Range("A2").Value = "煉獄杏寿郎"
    Range("A3").Value = "胡蝶しのぶ"
    Range("A4").Value = "宇随天元"
    Range("A5").Value = "甘露寺蜜璃"
    Range("A6").Value = "時透無一郎"
    Range("A7").Value = "悲鳴嶼行冥"
    Range("A8").Value = "不死川実弥"

    Range("B1").Value = "トミオカギユウ"
    Range("B2").Value = "レンゴクキョウジュウロウ"
    Range("B3").Value = "コチョシノブ"
    Range("B4").Value = "ウズイテンゲン"
    Range("B5").Value = "カンロジミツリ"
    Range("B6").Value = "トキトウムイチロウ"
    Range("B7").Value = "ヒメジマギョウメイ"
    Range("B8").Value = "シナズガワサネミ"

    For i = 0 To 7 Step 1

        pillar(i, 0) = Cells(i + 1, 1).Value
        pillar(i, 1) = Cells(i + 1, 2).Value

    Next
    
    For i = LBound(pillar, 1) To UBound(pillar, 1) Step 1

        table_string = table_string & pillar(i, 0) & "," & pillar(i, 1) & vbCrLf
        
    Next

    MsgBox table_string

    '出力結果：冨岡義勇,トミオカギユウ
    '         煉獄杏寿郎,レンゴクキョウジュウロウ
    '         胡蝶しのぶ,コチョシノブ
    '         宇随天元,ウズイテンゲン
    '         甘露寺蜜璃,カンロジミツリ
    '         時透無一郎,トキトウムイチロウ
    '         悲鳴嶼行冥,ヒメジマギョウメイ
    '         不死川実弥,シナズガワサネミ
    
    MsgBox LBound(pillar, 1) & " To " & UBound(pillar, 1)
    MsgBox LBound(pillar, 1) & " To " & UBound(pillar, 2)
    
    '出力結果：0 To 7
    '出力結果：0 To 1

End Sub
```

i）LBound(pillar, 1)
Uboundは配列の最小添え字を返すExcelVBAに用意された関数です。
Ubound(配列名, 配列の次元)を指定します。

ii）UBound(pillar, 1)
Uboundは配列の最大添え字を返すExcelVBAに用意された関数です。
Ubound(配列名, 配列の次元)を指定します。

この2つはFor~Next文を使って配列を処理するときにとても便利です。

序章：まえがきと目次
https://qiita.com/daichi05w/items/002f311490dabaaf14d0