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

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

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

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

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

セルからセルへ値を代入

パイさん

あるセルの値を別のセルへ代入してみましょう。『代入』とは、特定の値を設定することです。

 

 Excel VBA/マクロで、セルの位置を示す行番号列番号を変数で指定して、セルからセルに値を代入する

 構文を紹介します。」

Img5_1_1

パイさん

「今回は、一つのセルから他の一つのセルへ値を代入するようにします。

 予め、5行目・5列目のセルに『E5』という値を入れておきましょう。」

Img5_1_2

特定のセルへ

Img5_1_3

パイさん

5行目・5列目のセルの値を、その38行目5列目のセルに代入してみましょう。

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

ソンくん

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

 Dim 読取行 As Integer

 Dim 書込行 As Integer

 Dim 読取列 As Integer

 Dim 書込列 As Integer

 5行目・5列目のセルの値を、読みとるのだから、

 読取行 = 5

 読取列 = 5

 8行目・5列目のセルの値に、書きこむのだから、

 書込行 = 8

 書込列 = 5

 最後に、セルからセルに値を代入する構文をつかって、

 Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value

 と記述します。」

Sub セルからセルへ値をうつす1()

 Dim 読取行 As Integer

 Dim 書込行 As Integer

 Dim 読取列 As Integer

 Dim 書込列 As Integer

 読取行 = 5

 読取列 = 5

 書込行 = 8

 書込列 = 5

 Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value

End Sub

パイさん

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

Img5_1_5

ソンくん

5行目・5列目のセルの値を、その38行目5列目のセルに代入することができました。」


パイさん

「それでは、いったん8行目5列目のセルの値をクリアしてください。」

Img5_1_2

1. 3行下のセルへ

パイさん

「それでは、次は、8行目という数字を自分で計算せずに、パソコンに計算させてみましょう。

 まず、『書込行』を『読取行』に、『書込列』を『読取列』に一致させるところから始めましょう。」

ソンくん

「『書込行』を『読取行』に一致させるということは、書込行 = 読取行

 『書込列』を『読取列』に一致させるということは、書込列 = 読取列ということかな。」

パイさん

「その通りです。それでは、『書込行』を『読取行』の3行下にしましょう。どうしたらいいと思いますか。」

Img5_1_6

ソンくん

「『読取行』の3行下のセルに、書きこむということは、『書込行』が『読取行』より3行多くなるということだから

 書込行 = 読取行 + 3ということではないでしょうか。」

Sub セルからセルへ値をうつす2()

 Dim 読取行 As Integer

 Dim 書込行 As Integer

 Dim 読取列 As Integer

 Dim 書込列 As Integer

 読取行 = 5

 読取列 = 5

 書込行 = 読取行 + 3

 書込列 = 読取列

 Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value

End Sub

パイさん

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

Img5_1_8

ソンくん

5行目・5列目のセルの値を、その3行下8行目5列目のセルに代入することができました。」


2. 3行上のセルへ

パイさん

5行目・5列目のセルの値を、その3行上のセルに代入してみましょう。」

Img5_1_9

ソンくん

「変数宣言は、先ほどと同じにします。

 5行目・5列目のセルの値を、読みとるのだから、

 読取行 = 5

 読取列 = 5

 『読取行』の3行上のセルに、書きこむということは、『書込行』が『読取行』より3行少なくなるということだから

 書込行 = 読取行 - 3ということですね。

 『書込列』は『読取列』と同じままなので、

 書込列 = 読取列

 最後に、読取セルから書込セルに値を代入します。」

Sub セルからセルへ値をうつす3()

 Dim 読取行 As Integer

 Dim 書込行 As Integer

 Dim 読取列 As Integer

 Dim 書込列 As Integer

 読取行 = 5

 読取列 = 5

 書込行 = 読取行 - 3

 書込列 = 読取列

 Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value

End Sub

パイさん

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

Img5_1_11

ソンくん

5行目・5列目のセルの値を、その3行上2行目5列目のセルに代入することができました。」


3. 3列右のセルへ

パイさん

5行目・5列目のセルの値を、その3列右のセルに代入してみましょう。」

Img5_1_12

ソンくん

「変数宣言は、先ほどと同じにします。

 5行目・5列目のセルの値を、読みとるのだから、

 読取行 = 5

 読取列 = 5

 『読取列』の3列右のセルに、書きこむということは、『書込列』が『読取列』より3多くなるということだから

 書込列 = 読取列 + 3ということですね。

 『書込行』は『読取行』と同じままなので、

 書込行 = 読取行

 最後に、読取セルから書込セルに値を代入します。」

Sub セルからセルへ値をうつす4()

 Dim 読取行 As Integer

 Dim 書込行 As Integer

 Dim 読取列 As Integer

 Dim 書込列 As Integer

 読取行 = 5

 読取列 = 5

 書込行 = 読取行

 書込列 = 読取列 + 3

 Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value

End Sub

パイさん

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

Img5_1_14

ソンくん

5行目・5列目のセルの値を、その3列右5行目・8列目のセルに代入することができました。」


4. 3列左のセルへ

パイさん

5行目・5列目のセルの値を、その3列左のセルに代入してみましょう。」

Img5_1_15

ソンくん

「変数宣言は、先ほどと同じにします。

 5行目・5列目のセルの値を、読みとるのだから、

 読取行 = 5

 読取列 = 5

 『読取列』の3列左のセルに、書きこむということは、『書込列』が『読取列』より3少なくなるということだから

 書込列 = 読取列 - 3

 ということですね。

 『書込行』は『読取行』と同じままなので、

 書込行 = 読取行

 最後に、読取セルから書込セルに値を代入します。」

Sub セルからセルへ値をうつす5()

 Dim 読取行 As Integer

 Dim 書込行 As Integer

 Dim 読取列 As Integer

 Dim 書込列 As Integer

 読取行 = 5

 読取列 = 5

 書込行 = 読取行

 書込列 = 読取列 - 3

 Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value

End Sub

パイさん

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

Img5_1_17

ソンくん

5行目・5列目のセルの値を、その3列左5行目・2列目のセルに代入することができました。」


パイさん

「このように、

 Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value

 の構文をつかえば、セルからセルへ値を代入することができます。


 セルから下・上・右・左のセルへ値を代入するときは、それぞれ、次の構文になります。

 X行下のセルに代入するときは、

  書込行 = 読取行 + X

 X行上のセルに代入するときは、

  書込行 = 読取行 - X

 Y列右のセルに代入するときは、

  書込列 = 読取列 + Y

 Y列左のセルに代入するときは、

  書込列 = 読取列 - Y

 Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value


 試しに、マクロ『セルからセルへ値をうつす』のプログラムコードを変更して、

 5行目・5列目のセルの値を、

 (1) その1行下・2列右のセルに、

 (2) その2行上・3列左のセルに、

 (3) その3行下・4列左のセルに、代入してみましょう。

演習(1):マクロ『セルからセルへ値をうつす』

5行目・5列目のセルの値を、その1行下・2列右のセルに代入

Sub セルからセルへ値をうつす()

 Dim 読取行 As Integer

 Dim 書込行 As Integer

 Dim 読取列 As Integer

 Dim 書込列 As Integer

 読取行 = 5

 読取列 = 5

 書込行 = 読取行 + 1

 書込列 = 読取列 + 2

 Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value

End Sub

 

演習(2):マクロ『セルからセルへ値をうつす』

5行目・5列目のセルの値を、その2行上・3列左のセルに代入

Sub セルからセルへ値をうつす()

 Dim 読取行 As Integer

 Dim 書込行 As Integer

 Dim 読取列 As Integer

 Dim 書込列 As Integer

 読取行 = 5

 読取列 = 5

 書込行 = 読取行 - 2

 書込列 = 読取列 - 3

 Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value

End Sub

 

演習(3):マクロ『セルからセルへ値をうつす』

5行目・5列目のセルの値を、その3行下・4列左のセルに代入

Sub セルからセルへ値をうつす()

 Dim 読取行 As Integer

 Dim 書込行 As Integer

 Dim 読取列 As Integer

 Dim 書込列 As Integer

 読取行 = 5

 読取列 = 5

 書込行 = 読取行 + 3

 書込列 = 読取列 - 4

 Cells(書込行, 書込列).Value = Cells(読取行, 読取列).Value

End Sub

 

 今回は、1つのセルから1つのセルへ値を代入するプログラムを紹介しました。

 それでは、多数のセルから多数のセルへ値を代入するには、どうしたらよいのでしょうか。」

ソンくん

二つ目の基本構造であるループ処理の出番ですね。

 ループ処理をつかえば、多数のセルから多数のセルへ値を代入することができると思います。」

パイさん

「その通りです。行のループ処理をつかった多数のセルから多数のセルへの値の代入については、

 次回『行のループ処理でセルからセルへ値を代入』で紹介します。」