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

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

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

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

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

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

パイさん

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

 

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

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

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

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

Img5_3_1

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

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

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

Img5_2_3

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

Img5_3_2

パイさん

行を1行目に固定して、列を1列目から3列目まで1列ずつカウントアップしていきながら、

 そのつどセルの値を読みとり、その10のセルに書きこんでみましょう。

 このとき行番号を変数『読取行』と変数『書込行』、列番号を変数『読取列』と変数『書込列』としましょう。」

ソンくん

「今度の問題は、前回とよく似ていますね。」

パイさん

「そうです。を置きかえただけです。」

ソンくん

を置きかえただけということは、番号をカウントアップするためのFor文を、

 番号をカウントアップするためのFor文に書きかえればいいということですね。」

パイさん

「その通りです。」

ソンくん

「『読取行』『書込行』『読取列』『書込列』を整数型として変数宣言

 まず、行を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_3_4

ソンくん

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


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

Img5_3_5

パイさん

行を2行目に固定して、列を4列目から6列目まで1列ずつカウントアップしていきながら、

 そのつどセルの値を読みとり、その10のセルに書きこんでみましょう。」

ソンくん

「今度の問題も、のループ処理を利用できそうですね。」

パイさん

「その通りです。実は一つ前につくったマクロをか所書きかえるだけでいいのです。」

ソンくん

「一つ前の問題は、『1行目に固定して、1列目から3列目まで1列ずつカウントアップ』するのに対して、

 今度の問題は、『2行目に固定して、4列目から6列目まで1列ずつカウントアップ』するということで、

 固定と、カウントアップの開始終了が変わるだけですね。

 さきほどのマクロの、読取 = 1読取 = 2に、For 読取 = 1 To 3For 読取 = 4 To 6

 書きかえます。」

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_3_7

ソンくん

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


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

Img5_3_8

パイさん

行を3行目に固定して、列を7列目から10列目まで1列ずつカウントアップしていきながら、

 そのつどセルの値を読みとり、その10のセルに書きこんでみましょう。」

ソンくん

「今度の問題も、一つ前につくったマクロをか所だけ書きかえます。

 一つ前の問題は、『2行目に固定して、4列目から6列目まで1列ずつカウントアップ』するのに対して、

 今度の問題は、『3行目に固定して、7列目から10列目まで1列ずつカウントアップ』するということで、

 固定と、カウントアップの開始終了が変わるだけですね。

 さきほどのマクロの、読取 = 2読取 = 3に、For 読取 = 4 To 6For 読取 = 7 To 10

 書きかえます。」

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_3_10

ソンくん

3行目・7~10列目のセルの値が読みとられて、その103行目・17~20列目のセルに書きこまれました。」


パイさん

「このように、Forをつかってループ処理を行えば、多数列のセルから多数列のセルへ一瞬で値を代入する

 ことができます。

 試しに、Forの開始列・終了列と行番号の定数に設定する値を適当な数字に書きかえて、マクロを実行して、

 多数列のセルから多数列のセルへ値を代入できることを確かめてみましょう。

 (1) 4行目、1~10列目のセルの値を読みとり、その10列右のセルに

 (2) 7行目、2~8列目のセルの値を読みとり、その20列右のセルに

 (3) 10行目、3~7列目のセルの値を読みとり、その30列右のセルに値を書きこんでみましょう。

演習(1):マクロ『列のループ処理でセルからセルへ値をうつす』

4行目、1~10列目のセルの値を読みとり、その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):マクロ『列のループ処理でセルからセルへ値をうつす』

7行目、2~8列目のセルの値を読みとり、その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):マクロ『列のループ処理でセルからセルへ値をうつす』

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

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

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