この章では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