【Excel VBA】ループでセルの値を取得する方法10選!

【Excel VBA】ループでセルの値を取得する方法10選!

VBAでループでセルの値を取得したいときはないでしょうか。

けど、そんな中で悩むことは、

・VBAでループでセルの値を取得したいが方法がよくわからない
・VBAでループでセルの値を取得したが思うように取得できず困っている

ですよね。

今回はそんなお悩みを解決する

・VBAでループでセルの値を取得する方法10選とサンプル表を使った適用例

についてまとめます!

もくじ

VBAでループでセルの値を取得するイメージ

VBAでループでセルの値を取得するイメージについて説明をします。

Excel側に表を作成します。

VBAを実行すると、表の行数分ループしてセルの値を取得することができます。

それをループ処理別に5パターンに直接セルを参照する方式と配列に格納して処理する形式それぞれ2つに分けて説明をしていきます。

それでは早速試してみましょう。

VBAでループでセルの値を取得する方法①:For…Next ステートメントを使用する

VBAでループでセルの値を取得する方法①:For…Next ステートメントを使用する方法について説明をします。

ループでセルの値を取得する表を準備する

Excel側に”Sheet1″シートを作成し、セルの値を取得する対象となる表を作成します。
ループでセルの最終行を取得する対象の列はA列となります。

For…Next ステートメントの構文

For…Next ステートメントの構文は以下の通りです。

For counter = start To end step [ statements ] [ Exit For ] Next counter

For…Next ステートメントの構文の指定項目は以下の通りです。

パーツ 説明
counter 必須。 ループ カウンターとして使用する数値変数を指定します。 この変数には、ブール値または配列要素を指定できません。
start 必須です。counterの初期値を指定します。
end 必須。counterの最終値を指定します。
step オプション。 ループを繰り返すたびに、counterの数が変更されます。 省略されると、stepは既定値の 0 になります。
statements 省略可能。 指定した回数実行されるForとNextの間の 1 つ以上のステートメント。
Exit For For ループを抜けます。

参考:https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/fornext-statement

タカヒロ
タカヒロ
For…Next ステートメントの使い方についてより詳細に知りたい方はこちらをご参照ください。
【Excel VBA】For Next文の使い方!抜ける方法や別シート転記も!
【Excel VBA】奇数/偶数を判定し抽出する方法!Mod演算子使用!

For…Next ステートメント+セルを直接参照するパターン①a

VBAコード

For…Next ステートメント+セルを直接参照するパターンとなります。

サンプルのVBAコードは以下の通りです。

Sub ループでセルの値を取得①a()
    Dim intLastRowNum As Integer
    Dim i As Integer
    
    '"Sheet1"シートを対象にします。
    With Sheets("Sheet1")
        '最終行数を取得します。
        intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row

        For i = 2 To intLastRowNum
            Debug.Print .Cells(i, 1).Value & "|" & .Cells(i, 2).Value & "|" & .Cells(i, 3).Value
        Next i
        
    End With

End Sub

VBAの実装

VBAの実装方法については
VBAの実装手順
をご参照ください。

VBAを実行する

VBAを実行してみましょう。

イミディエイトウィンドウにセルの値が表示されましたね!

1|A|100
2|B|110
3|C|120
4|D|130
5|E|140
6|F|150
7|G|160

VBAの説明

VBAについて説明をします。

“Sheet1″シートを対象にします。

With Sheets("Sheet1")

対象の表のA列最終行数を取得します。

intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row

For…Next ステートメントで2行目から最終行目まで繰り返し処理をおこないます。

For i = 2 To intLastRowNum

CellsオブジェクトのValueプロパティでセルの値を取得し、 “|”区切りで文字結合をして出力します。

Debug.Print .Cells(i, 1).Value & "|" & .Cells(i, 2).Value & "|" & .Cells(i, 3).Value

For…Next ステートメント+値を代入した配列で処理するパターン①b

VBAコード

For…Next ステートメント+値を代入した配列で処理するパターンとなります。

サンプルのVBAコードは以下の通りです。

Sub ループでセルの値を取得①b()
    Dim intLastRowNum As Integer
    Dim arrTemp As Variant
    Dim i As Integer
    Dim j As Integer
    
    '"Sheet1"シートを対象にします。
    With Sheets("Sheet1")
        '最終行数を取得します。
        intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row
        
        'セル範囲を二次元配列として配列に代入します。
        arrTemp = .Range(.Cells(2, 1), .Cells(intLastRowNum, 3))

        For i = LBound(arrTemp, 1) To UBound(arrTemp, 1)
        
            For j = LBound(arrTemp, 2) To UBound(arrTemp, 2)
            
                Debug.Print arrTemp(i, j)
        
            Next j
        Next i

    End With

End Sub

VBAを実行する

VBAを実行してみましょう。

イミディエイトウィンドウにセルの値が表示されましたね!

1
A
100
2
B
110
3
C
120
4
D
130
5
E
140
6
F
150
7
G
160

VBAの説明

VBAについて説明をします。

“Sheet1″シートを対象にします。

With Sheets("Sheet1")

対象の表のA列最終行数を取得します。

intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row

セル範囲を二次元配列として配列に代入します。

arrTemp = .Range(.Cells(2, 1), .Cells(intLastRowNum, 3))

For…Next ステートメントで配列のはじめのインデックスから最終インデックスまで繰り返し処理をおこないます。
Lbound関数はインデックスの最小値、Ubound関数は配列のインデックスの最大値を返します。

二次元配列となっているので、Lbound関数、Ubound関数に1次元、2次元を引数に指定し、それぞれの配列インデックス数分処理を繰り返しています。

For i = LBound(arrTemp, 1) To UBound(arrTemp, 1)

For j = LBound(arrTemp, 2) To UBound(arrTemp, 2)

二次元配列の値を出力していきます。

Debug.Print arrTemp(i, j)

VBAでループでセルの値を取得する方法②:For Each…Next ステートメントを使用する

VBAでループでセルの値を取得する方法②:For Each…Next ステートメントを使用する方法について説明をします。

For Each…Next ステートメントの構文

For Each…Next ステートメントの構文は以下の通りです。

For Each element In group
[statements] [Exit For] [statements] Next [element]

For Each…Next ステートメントの構文の指定項目は以下の通りです。

パーツ 説明
element 必須。 コレクションまたは配列の要素を反復処理するために使用される変数です。 コレクションの場合、要素にはVariant変数、汎用オブジェクト変数、または特定のオブジェクト変数のみを指定できます。 配列の場合は、elementに使用できるのはVariant変数だけです。
group 必須。 オブジェクトのコレクションまたは配列の名前です (ユーザー定義型の配列を除きます)。
statements 省略可能。groupの各アイテムに対して実行される 1 つ以上のステートメントです。
Exit For For ループを抜けます。

参考:https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/for-eachnext-statement

タカヒロ
タカヒロ
For Each…Nextステートメントの使い方の詳細を知りたい方はこちらをご参照ください。
【Excel VBA】For Each Next文の使い方!配列操作や抜ける方法も!

For Each…Next ステートメント+セルを直接参照するパターン②a

VBAコード

For Each…Next ステートメント+セルを直接参照するパターンとなります。

サンプルのVBAコードは以下の通りです。

Sub ループでセルの値を取得②a()
    Dim intLastRowNum As Integer
    Dim rngTemp As Range
    
    '"Sheet1"シートを対象にします。
    With Sheets("Sheet1")
        '最終行数を取得します。
        intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row
        
        For Each rngTemp In .Range(.Cells(2, 1), .Cells(intLastRowNum, 3))
            Debug.Print rngTemp.Cells(1, 1).Value
        Next
    End With

End Sub

VBAを実行する

VBAを実行してみましょう。

イミディエイトウィンドウにセルの値が表示されましたね!

1
A
100
2
B
110
3
C
120
4
D
130
5
E
140
6
F
150
7
G
160

VBAの説明

VBAについて説明をします。

“Sheet1″シートを対象にします。

With Sheets("Sheet1")

対象の表のA列最終行数を取得します。

intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row

For Each…Next ステートメントでセル範囲分処理を繰り返します。同時に変数rngTempへセル範囲の一部を代入していきます。

For Each rngTemp In .Range(.Cells(2, 1), .Cells(intLastRowNum, 3))

rngTempの左上セル(1,1)の値を出力します。

Debug.Print rngTemp.Cells(1, 1).Value

タカヒロ
タカヒロ
Variant型として機能しているのでセル範囲オブジェクト以外に配列やString型の変数としても扱えます。つまり「rngTemp(0)」や「rngTemp」の指定でも値を取得することができます。

For Each…Next ステートメント+値を代入した配列で処理するパターン②b

VBAコード

For Each…Next ステートメント+値を代入した配列で処理するパターンとなります。

サンプルのVBAコードは以下の通りです。

Sub ループでセルの値を取得②b()
    Dim intLastRowNum As Integer
    Dim arrTemps As Variant
    Dim arrTemp As Variant
    
    '"Sheet1"シートを対象にします。
    With Sheets("Sheet1")
        '最終行数を取得します。
        intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row
        
        'セル範囲を二次元配列として配列に代入します。
        arrTemps = .Range(.Cells(2, 1), .Cells(intLastRowNum, 3))
        
        For Each arrTemp In arrTemps
            Debug.Print arrTemp
        Next
    End With

End Sub

VBAを実行する

VBAを実行してみましょう。

イミディエイトウィンドウにセルの値が表示されましたね!

1
2
3
4
5
6
7
A
B
C
D
E
F
G
100
110
120
130
140
150
160

VBAの説明

VBAについて説明をします。

“Sheet1″シートを対象にします。

With Sheets("Sheet1")

対象の表のA列最終行数を取得します。

intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row

セル範囲を二次元配列として配列に代入します。

arrTemp = .Range(.Cells(2, 1), .Cells(intLastRowNum, 3))

For Eachステートメントで配列を1件づつ取り出し配列件数分処理を繰り返します。

For Each arrTemp In arrTemps

変数の値を出力していきます。

Debug.Print arrTemp

VBAでループでセルの値を取得する方法③:While…Wend ステートメントを使用する

VBAでループでセルの値を取得する方法③:While…Wend ステートメントを使用する方法について説明をします。

While…Wendステートメントの構文

While…Wendステートメントの構文は以下の通りです。

While condition
[statements] Wend

While…Wendステートメントの構文の指定項目は以下の通りです。

パーツ 説明
condition 必須。TrueまたはFalseに評価される数値式または文字列式です。conditionがNullの場合は、conditionがFalseとして処理されます。
statements 省略可能。 条件がTrueの間に実行される 1 つ以上のステートメントです。

参考:https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/whilewend-statement

While…Wendステートメント+セルを直接参照するパターン③a

VBAコード

While…Wendステートメント+セルを直接参照するパターンとなります。

サンプルのVBAコードは以下の通りです。

Sub ループでセルの値を取得③a()
    Dim intLastRowNum As Integer
    Dim i As Integer
    
    '"Sheet1"シートを対象にします。
    With Sheets("Sheet1")
        '最終行数を取得します。
        intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row
        
        i = 2
        
        While i <= intLastRowNum
            Debug.Print .Cells(i, 1).Value & "|" & .Cells(i, 2).Value & "|" & .Cells(i, 3).Value
            i = i + 1
        Wend
    End With

End Sub

VBAを実行する

VBAを実行してみましょう。

イミディエイトウィンドウにセルの値が表示されましたね!

1|A|100
2|B|110
3|C|120
4|D|130
5|E|140
6|F|150
7|G|160

VBAの説明

VBAについて説明をします。

“Sheet1″シートを対象にします。

With Sheets("Sheet1")

対象の表のA列最終行数を取得します。

intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row

開始する行数を指定します。

i = 2

While…Wendステートメントで最終行数分処理を繰り返します。条件達成のための動的要素も必要となるため変数iをインクリメントします。

While i <= intLastRowNum
i = i + 1

CellsオブジェクトのValueプロパティでセルの値を取得し、 “|”区切りで文字結合をして出力します。

Debug.Print .Cells(i, 1).Value & "|" & .Cells(i, 2).Value & "|" & .Cells(i, 3).Value

While…Wendステートメント+値を代入した配列で処理するパターン③b

VBAコード

While…Wendステートメント+値を代入した配列で処理するパターンとなります。

サンプルのVBAコードは以下の通りです。

Sub ループでセルの値を取得③b()
    Dim intLastRowNum As Integer
    Dim arrTemp As Variant
    
    '"Sheet1"シートを対象にします。
    With Sheets("Sheet1")
        '最終行数を取得します。
        intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row
        
        'セル範囲を二次元配列として配列に代入します。
        arrTemp = .Range(.Cells(2, 1), .Cells(intLastRowNum, 3))
        
        i = LBound(arrTemp, 1)
        
        While i <= UBound(arrTemp, 1)
            Debug.Print arrTemp(i, 1) & "|" & arrTemp(i, 2) & "|" & arrTemp(i, 3)
            i = i + 1
        Wend
    End With

End Sub

VBAを実行する

VBAを実行してみましょう。

イミディエイトウィンドウにセルの値が表示されましたね!

1|A|100
2|B|110
3|C|120
4|D|130
5|E|140
6|F|150
7|G|160

VBAの説明

VBAについて説明をします。

“Sheet1″シートを対象にします。

With Sheets("Sheet1")

対象の表のA列最終行数を取得します。

intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row

セル範囲を二次元配列として配列に代入します。

arrTemp = .Range(.Cells(2, 1), .Cells(intLastRowNum, 3))

配列の最小インデックスを取得し、変数に代入します。

i = LBound(arrTemp, 1)

While…Wendステートメントで最終行数分処理を繰り返します。条件達成のための動的要素も必要となるため変数iをインクリメントします。

While i <= intLastRowNum
i = i + 1

配列のインデックスごとの値を取得し、 “|”区切りで文字結合をして出力します。

Debug.Print arrTemp(i, 1) & "|" & arrTemp(i, 2) & "|" & arrTemp(i, 3)

VBAでループでセルの値を取得する方法④:Do While…Loop ステートメントを使用する

VBAでループでセルの値を取得する方法④:Do While…Loop ステートメントを使用する方法について説明をします。

Do While…Loop ステートメントの構文

Do While…Loop ステートメントの構文は以下の通りです。

Do while condition
[statements] Loop

Do While…Loop ステートメントの構文の指定項目は以下の通りです。

パーツ 説明
condition 省略可能。TrueまたはFalseに評価される数式または文字列式です。conditionがNullの場合、conditionはFalseとして扱われます。
statements conditionがTrueの間または True になるまで繰り返し実行する 1 つ以上のステートメントです。

参考:https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/doloop-statement

Do While…Loop ステートメント+セルを直接参照するパターン④a

VBAコード

Do While…Loop ステートメント+セルを直接参照するパターンとなります。

サンプルのVBAコードは以下の通りです。

Sub ループでセルの値を取得④a()
    Dim intLastRowNum As Integer
    
    '"Sheet1"シートを対象にします。
    With Sheets("Sheet1")
        '最終行数を取得します。
        intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row
        
        i = 2
        
        Do While i <= intLastRowNum
            Debug.Print .Cells(i, 1).Value & "|" & .Cells(i, 2).Value & "|" & .Cells(i, 3).Value
            i = i + 1
        Loop
    End With

End Sub

VBAを実行する

VBAを実行してみましょう。

イミディエイトウィンドウにセルの値が表示されましたね!

1|A|100
2|B|110
3|C|120
4|D|130
5|E|140
6|F|150
7|G|160

VBAの説明

VBAについて説明をします。

“Sheet1″シートを対象にします。

With Sheets("Sheet1")

対象の表のA列最終行数を取得します。

intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row

開始する行数を指定します。

i = 2

Do While…Loop ステートメントで最終行数分処理を繰り返します。条件達成のための動的要素も必要となるため変数iをインクリメントします。

Do While i <= intLastRowNum
i = i + 1

CellsオブジェクトのValueプロパティでセルの値を取得し、 “|”区切りで文字結合をして出力します。

Debug.Print .Cells(i, 1).Value & "|" & .Cells(i, 2).Value & "|" & .Cells(i, 3).Value

Do While…Loop ステートメント+値を代入した配列で処理するパターン④b

VBAコード

Do While…Loop ステートメント+値を代入した配列で処理するパターンとなります。

サンプルのVBAコードは以下の通りです。

Sub ループでセルの値を取得④b()
    Dim intLastRowNum As Integer
    Dim arrTemp As Variant
    
    '"Sheet1"シートを対象にします。
    With Sheets("Sheet1")
        '最終行数を取得します。
        intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row
        
        'セル範囲を二次元配列として配列に代入します。
        arrTemp = .Range(.Cells(2, 1), .Cells(intLastRowNum, 3))
        
        i = LBound(arrTemp, 1)
        
        Do While i <= intLastRowNum
            Debug.Print arrTemp(i, 1) & "|" & arrTemp(i, 2) & "|" & arrTemp(i, 3)
            i = i + 1
        Loop
    End With

End Sub

VBAを実行する

VBAを実行してみましょう。

イミディエイトウィンドウにセルの値が表示されましたね!

1|A|100
2|B|110
3|C|120
4|D|130
5|E|140
6|F|150
7|G|160

VBAの説明

VBAについて説明をします。

“Sheet1″シートを対象にします。

With Sheets("Sheet1")

対象の表のA列最終行数を取得します。

intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row

セル範囲を二次元配列として配列に代入します。

arrTemp = .Range(.Cells(2, 1), .Cells(intLastRowNum, 3))

配列の最小インデックスを取得し、変数に代入します。

i = LBound(arrTemp, 1)

Do While…Loop ステートメントで最終行数分処理を繰り返します。条件達成のための動的要素も必要となるため変数iをインクリメントします。

Do While i <= intLastRowNum
i = i + 1

配列のインデックスごとの値を取得し、 “|”区切りで文字結合をして出力します。

Debug.Print arrTemp(i, 1) & "|" & arrTemp(i, 2) & "|" & arrTemp(i, 3)

VBAでループでセルの値を取得する方法⑤:Do…Loop While ステートメントを使用する

VBAでループでセルの値を取得する方法⑤:Do…Loop While ステートメントを使用する方法について説明をします。

Do…Loop While ステートメントの構文

Do…Loop While ステートメントの構文は以下の通りです。

Do
[statements] Loop while condition

Do…Loop While ステートメントの構文の指定項目は以下の通りです。

パーツ 説明
condition 省略可能。TrueまたはFalseに評価される数式または文字列式です。conditionがNullの場合、conditionはFalseとして扱われます。
statements conditionがTrueの間または True になるまで繰り返し実行する 1 つ以上のステートメントです。

参考:https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/doloop-statement

Do…Loop While ステートメント+セルを直接参照するパターン⑤a

VBAコード

Do…Loop While ステートメント+セルを直接参照するパターンとなります。

サンプルのVBAコードは以下の通りです。

Sub ループでセルの値を取得⑤a()
    Dim intLastRowNum As Integer
    
    '"Sheet1"シートを対象にします。
    With Sheets("Sheet1")
        '最終行数を取得します。
        intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row
        
        i = 2
        
        Do
            Debug.Print .Cells(i, 1).Value & "|" & .Cells(i, 2).Value & "|" & .Cells(i, 3).Value
            i = i + 1
        Loop While i <= intLastRowNum
        
    End With

End Sub

VBAを実行する

VBAを実行してみましょう。

イミディエイトウィンドウにセルの値が表示されましたね!

1|A|100
2|B|110
3|C|120
4|D|130
5|E|140
6|F|150
7|G|160

VBAの説明

VBAについて説明をします。

“Sheet1″シートを対象にします。

With Sheets("Sheet1")

対象の表のA列最終行数を取得します。

intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row

開始する行数を指定します。

i = 2

Do…Loop While ステートメントで最終行数分処理を繰り返します。条件達成のための動的要素も必要となるため変数iをインクリメントします。

Do
i = i + 1
Loop While i <= intLastRowNum

CellsオブジェクトのValueプロパティでセルの値を取得し、 “|”区切りで文字結合をして出力します。

Debug.Print .Cells(i, 1).Value & "|" & .Cells(i, 2).Value & "|" & .Cells(i, 3).Value

Do…Loop While ステートメント+値を代入した配列で処理するパターン⑤b

VBAコード

Do…Loop While ステートメント+値を代入した配列で処理するパターンとなります。

サンプルのVBAコードは以下の通りです。

Sub ループでセルの値を取得⑤b()
    Dim intLastRowNum As Integer
    Dim arrTemp As Variant
    
    '"Sheet1"シートを対象にします。
    With Sheets("Sheet1")
        '最終行数を取得します。
        intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row
        
        'セル範囲を二次元配列として配列に代入します。
        arrTemp = .Range(.Cells(2, 1), .Cells(intLastRowNum, 3))
        
        i = LBound(arrTemp, 1)
        
        Do
            Debug.Print arrTemp(i, 1) & "|" & arrTemp(i, 2) & "|" & arrTemp(i, 3)
            i = i + 1
        Loop While i < intLastRowNum
    End With

End Sub

VBAを実行する

VBAを実行してみましょう。

イミディエイトウィンドウにセルの値が表示されましたね!

1|A|100
2|B|110
3|C|120
4|D|130
5|E|140
6|F|150
7|G|160

VBAの説明

VBAについて説明をします。

“Sheet1″シートを対象にします。

With Sheets("Sheet1")

対象の表のA列最終行数を取得します。

intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row

セル範囲を二次元配列として配列に代入します。

arrTemp = .Range(.Cells(2, 1), .Cells(intLastRowNum, 3))

配列の最小インデックスを取得し、変数に代入します。

i = LBound(arrTemp, 1)

Do…Loop While ステートメントで最終行数分処理を繰り返します。条件達成のための動的要素も必要となるため変数iをインクリメントします。

Do
i = i + 1
Loop While i < intLastRowNum

配列のインデックスごとの値を取得し、 “|”区切りで文字結合をして出力します。

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、

・VBAでループでセルの値を取得する方法10選とサンプル表を使った適用例

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

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