【ループ処理でセルからセルへ値を代入する】
1 セルからセルへ値を代入
2 行のループ処理でセルからセルへ値を代入
3 列のループ処理でセルからセルへ値を代入
4 行×列のダブルループ処理でセルからセルへ値を代入
セルからセルへ値を代入
パイさん
「あるセルの値を別のセルへ代入してみましょう。『代入』とは、特定の値を設定することです。
Excel VBA/マクロで、セルの位置を示す行番号と列番号を変数で指定して、セルからセルに値を代入する
構文を紹介します。」
パイさん
「今回は、一つのセルから他の一つのセルへ値を代入するようにします。
予め、5行目・5列目のセルに『E5』という値を入れておきましょう。」
特定のセルへ
パイさん
「5行目・5列目のセルの値を、その3行下の8行目・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
パイさん
「それでは、そのマクロを実行してみましょう。」
ソンくん
「5行目・5列目のセルの値を、その3行下の8行目・5列目のセルに代入することができました。」
パイさん
「それでは、いったん8行目・5列目のセルの値をクリアしてください。」
1. 3行下のセルへ
パイさん
「それでは、次は、8行目という数字を自分で計算せずに、パソコンに計算させてみましょう。
まず、『書込行』を『読取行』に、『書込列』を『読取列』に一致させるところから始めましょう。」
ソンくん
「『書込行』を『読取行』に一致させるということは、書込行 = 読取行
『書込列』を『読取列』に一致させるということは、書込列 = 読取列ということかな。」
パイさん
「その通りです。それでは、『書込行』を『読取行』の3行下にしましょう。どうしたらいいと思いますか。」
ソンくん
「『読取行』の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
パイさん
「それでは、そのマクロを実行してみましょう。」
ソンくん
「5行目・5列目のセルの値を、その3行下の8行目・5列目のセルに代入することができました。」
2. 3行上のセルへ
パイさん
「5行目・5列目のセルの値を、その3行上のセルに代入してみましょう。」
ソンくん
「変数宣言は、先ほどと同じにします。
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
パイさん
「それでは、そのマクロを実行してみましょう。」
ソンくん
「5行目・5列目のセルの値を、その3行上の2行目・5列目のセルに代入することができました。」
3. 3列右のセルへ
パイさん
「5行目・5列目のセルの値を、その3列右のセルに代入してみましょう。」
ソンくん
「変数宣言は、先ほどと同じにします。
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
パイさん
「それでは、そのマクロを実行してみましょう。」
ソンくん
「5行目・5列目のセルの値を、その3列右の5行目・8列目のセルに代入することができました。」
4. 3列左のセルへ
パイさん
「5行目・5列目のセルの値を、その3列左のセルに代入してみましょう。」
ソンくん
「変数宣言は、先ほどと同じにします。
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
パイさん
「それでは、そのマクロを実行してみましょう。」
ソンくん
「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つのセルへ値を代入するプログラムを紹介しました。
それでは、多数のセルから多数のセルへ値を代入するには、どうしたらよいのでしょうか。」
ソンくん
「二つ目の基本構造であるループ処理の出番ですね。
ループ処理をつかえば、多数のセルから多数のセルへ値を代入することができると思います。」
パイさん
「その通りです。行のループ処理をつかった多数のセルから多数のセルへの値の代入については、
次回『行のループ処理でセルからセルへ値を代入』で紹介します。」