【ループ処理でセルからセルへ値を代入する】
1 セルからセルへ値を代入
2 行のループ処理でセルからセルへ値を代入
3 列のループ処理でセルからセルへ値を代入
4 行×列のダブルループ処理でセルからセルへ値を代入
行のループ処理でセルからセルへ値を代入
パイさん
「ループ処理をつかって、行番号をカウントアップしながらセルからセルへ値を代入してみましょう。
Excel VBA/マクロのループ処理をつかえば、
一つの順次処理で多数行のセルの値を読みとり別のセルにその値を書きこむことができます。
変数『行番号』を、開始行から終了行になるまで1ずつカウントアップさせながら、
セルの値を読みとり別のセルにその値を書きこむ順次処理をくり返し実行する
For文は、次のようになります。
今回も、多数のセルの値を読みとることになるので、『ループ処理で多数行×多数列のセルに書きこむ』
のときにつくったマクロ『行番号と列番号をカウントアップするループ処理2』をつかって、
あらかじめ10行×10列のセルに値を書きこんでおきましょう。」
1. 1~3行・1列のセルから10行下のセルへ
パイさん
「列を1列目に固定して、行を1行目から3行目まで1行ずつカウントアップしていきながら、
そのつどセルの値を読みとり、その10行下のセルに書きこんでみましょう。
このとき行番号を変数『読取行』と変数『書込行』、列番号を変数『読取列』と変数『書込列』としましょう。」
ソンくん
「『読取行』『書込行』『読取列』『書込列』を整数型として変数宣言
まず、列を1列目に固定ということなので、
読取列 = 1
書込列 = 読取列
次に、行を1行目から3行目まで1行ずつカウントアップしていきながら、
そのつどセルの値を読みとり、その10行下のセルに書きこむということを考えてみます。
『読取行』を開始行『1』から終了行『3』まで1ずつカウントアップしていくループコード
For 読取行 = 1 To 3
Next
『書込行』を『読取行』より10行増やす処理コード
書込行 = 読取行 + 10
書込セルに読取セルの値を代入する処理コード
Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value
そして、これら二つの処理コードを、『読取行』をカウントアップしていくループコードに組み合わせます。」
Sub 行のループ処理でセルからセルへ値をうつす1()
Dim 読取行 As Integer
Dim 書込行 As Integer
Dim 読取列 As Integer
Dim 書込列 As Integer
読取列 = 1
書込列 = 読取列
For 読取行 = 1 To 3
書込行 = 読取行 + 10
Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value
Next
End Sub
パイさん
「1~3行に係るセルからセルへ値をうつす順次処理が、For文をつかうことで一つの順次処理にまとまりました。
それでは、そのマクロを実行してみましょう。」
ソンくん
「1~3行目・1列目のセルの値が読みとられて、その10行下の11~13行目・1列目のセルに書きこまれました。」
2. 4~6行・2列のセルから10行下のセルへ
パイさん
「列を2列目に固定して、行を4行目から6行目まで1行ずつカウントアップしていきながら、
そのつどセルの値を読みとり、その10行下のセルに書きこんでみましょう。」
ソンくん
「変数宣言は、先ほどと同じにします。
まず、列を2列目に固定ということなので、
読取列 = 2
書込列 = 読取列
次に、行を4行目から6行目まで1行ずつカウントアップしていきながら、そのつどセルの値を読みとり、
その10行下のセルに書きこむということを考えてみます。
『読取行』を開始行『4』から終了行『6』まで1ずつカウントアップしていくループコード
For 読取行 = 4 To 6
Next
『書込行』を『読取行』より10行増やす処理コード
書込行 = 読取行 + 10
書込セルに読取セルの値を代入する処理コード
Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value
そして、これら二つの処理コードを、『読取行』をカウントアップしていくループコードに組み合わせます。」
Sub 行のループ処理でセルからセルへ値をうつす2()
Dim 読取行 As Integer
Dim 書込行 As Integer
Dim 読取列 As Integer
Dim 書込列 As Integer
読取列 = 2
書込列 = 読取列
For 読取行 = 4 To 6
書込行 = 読取行 + 10
Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value
Next
End Sub
パイさん
「4~6行に係るセルからセルへ値をうつす順次処理が、For文をつかうことで一つの順次処理にまとまりました。
それでは、そのマクロを実行してみましょう。」
ソンくん
「4~6行目・2列目のセルの値が読みとられて、その10行下の14~16行目・2列目のセルに書きこまれました。」
3. 7~10行・3列のセルから10行下のセルへ
パイさん
「列を3列目に固定して、行を7行目から10行目まで1行ずつカウントアップしていきながら、
そのつどセルの値を読みとり、その10行下のセルに書きこんでみましょう。」
ソンくん
「変数宣言は、先ほどと同じにします。
まず、列を3列目に固定ということなので、
読取列 = 3
書込列 = 読取列
次に、行を7行目から10行目まで1行ずつカウントアップしていきながら、そのつどセルの値を読みとり、
その10行下のセルに書きこむということを考えてみます。
『読取行』を開始行『7』から終了行『10』まで1ずつカウントアップしていくループコード
For 読取行 = 7 To 10
Next
『書込行』を『読取行』より10行増やす処理コード
書込行 = 読取行 + 10
書込セルに読取セルの値を代入する処理コード
Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value
そして、これら二つの処理コードを、『読取行』をカウントアップしていくループコードに組み合わせます。」
Sub 行のループ処理でセルからセルへ値をうつす3()
Dim 読取行 As Integer
Dim 書込行 As Integer
Dim 読取列 As Integer
Dim 書込列 As Integer
読取列 = 3
書込列 = 読取列
For 読取行 = 7 To 10
書込行 = 読取行 + 10
Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value
Next
End Sub
パイさん
「7~10行に係るセルからセルへ値をうつす順次処理が、For文をつかうことで一つの順次処理に
まとまりました。それでは、そのマクロを実行してみましょう。」
ソンくん
「7~10行目・3列目のセルの値が読みとられて、その10行下の17~20行目・3列目のセルに書きこまれました。」
パイさん
「このように、For文をつかってループ処理を行えば、多数行のセルから多数行のセルへ一瞬で値を代入する
ことができます。
試しに、For文の開始行・終了行と列番号の定数に設定する値を適当な数字に書きかえて、マクロを実行して、
多数行のセルから多数行のセルへ値を代入できることを確かめてみましょう。
(1) 1~10行目、4列目のセルの値を読みとり、その10行下のセルに
(2) 2~8行目、7列目のセルの値を読みとり、その20行下のセルに
(3) 3~7行目、10列目のセルの値を読みとり、その30行下のセルに値を書きこんでみましょう。
-
演習(1):マクロ『行のループ処理でセルからセルへ値をうつす』
1~10行目、4列目のセルの値を読みとり、その10行下のセルに値を書きこむ
-
Sub 行のループ処理でセルからセルへ値をうつす()
Dim 読取行 As Integer
Dim 書込行 As Integer
Dim 読取列 As Integer
Dim 書込列 As Integer
読取列 = 4
書込列 = 読取列
For 読取行 = 1 To 10
書込行 = 読取行 + 10
Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value
Next
End Sub
-
演習(2):マクロ『行のループ処理でセルからセルへ値をうつす』
2~8行目、7列目のセルの値を読みとり、その20行下のセルに値を書きこむ
-
Sub 行のループ処理でセルからセルへ値をうつす()
Dim 読取行 As Integer
Dim 書込行 As Integer
Dim 読取列 As Integer
Dim 書込列 As Integer
読取列 = 7
書込列 = 読取列
For 読取行 = 2 To 8
書込行 = 読取行 + 20
Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value
Next
End Sub
-
演習(3):マクロ『行のループ処理でセルからセルへ値をうつす』
3~7行目、10列目のセルの値を読みとり、その30行下のセルに値を書きこむ
-
Sub 行のループ処理でセルからセルへ値をうつす()
Dim 読取行 As Integer
Dim 書込行 As Integer
Dim 読取列 As Integer
Dim 書込列 As Integer
読取列 = 10
書込列 = 読取列
For 読取行 = 3 To 7
書込行 = 読取行 + 30
Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value
Next
End Sub
今回は、行のFor文をつかえば、多数行のセルから多数行のセルへ値を代入できるという話でした。
では、列数が増えたときは、どうすればよいのでしょうか。
これについては、次回『列のループ処理でセルからセルへ値を代入』で紹介します。」