【ループ処理でセルからセルへ値を代入する】

 1 セルからセルへ値を代入

 2 行のループ処理でセルからセルへ値を代入

 3 列のループ処理でセルからセルへ値を代入

 4 行×列のダブルループ処理でセルからセルへ値を代入

行のループ処理でセルからセルへ値を代入

パイさん

ループ処理をつかって、行番号をカウントアップしながらセルからセルへ値を代入してみましょう。

 

 Excel VBA/マクロのループ処理をつかえば、
 一つの順次処理で多数行のセルの値を読みとり別のセルにその値を書きこむことができます

 変数『行番号を、開始行から終了行になるまで1ずつカウントアップさせながら、

 セルの値を読みとり別のセルにその値を書きこむ順次処理をくり返し実行する

 Forは、次のようになります。

Img5_2_1

 今回も、多数のセルの値を読みとることになるので、『ループ処理で多数行×多数列のセルに書きこむ』

 のときにつくったマクロ『行番号と列番号をカウントアップするループ処理2』をつかって、

 あらかじめ10行×10のセルに値を書きこんでおきましょう。」

Img5_2_3

1. 1~3行・1列のセルから10行下のセルへ

Img5_2_4

パイさん

列を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をつかうことで一つの順次処理にまとまりました。

 それでは、そのマクロを実行してみましょう。」

Img5_2_6

ソンくん

1~3行目1列目のセルの値が読みとられて、その1011~13行目1列目のセルに書きこまれました。」


2. 4~6行・2列のセルから10行下のセルへ

Img5_2_7

パイさん

列を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をつかうことで一つの順次処理にまとまりました。

 それでは、そのマクロを実行してみましょう。」

Img5_2_9

ソンくん

4~6行目2列目のセルの値が読みとられて、その1014~16行目2列目のセルに書きこまれました。」


3. 7~10行・3列のセルから10行下のセルへ

Img5_2_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をつかうことで一つの順次処理

 まとまりました。それでは、そのマクロを実行してみましょう。」

Img5_2_12

ソンくん

7~10行目3列目のセルの値が読みとられて、その1017~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をつかえば、多数行のセルから多数行のセルへ値を代入できるという話でした。

 では、列数が増えたときは、どうすればよいのでしょうか。

 これについては、次回『列のループ処理でセルからセルへ値を代入』で紹介します。」