【ループ処理でセルに値を書きこむ】

 1 多数のセルの行番号と列番号を直接指定して値を書きこむ

 2 多数のセルの行番号と列番号を変数と定数で指定して値を書きこむ

 3 ループ処理で多数行のセルに値を書きこむ

 4 ループ処理で多数列のセルに値を書きこむ

 5 ダブルループ処理で多数行×多数列のセルに値を書きこむ

多数のセルの行番号と列番号を直接指定して値を書きこむ

パイさん

Excel VBA/マクロのCells行番号列番号については三つの指定方法がありますが、

 今回は、Cellsオブジェクトの引数となる行番号列番号直接指定する方法により、

 多数のセルに値を書きこんでみます。


 ここで、既に『Cellsの行番号と列番号を直接指定』で紹介したCellsオブジェクトを再び紹介します。」

Img3_1_1


1. 1行・1列

パイさん

「まずは、1行目・1列目のセルの値に『1行1列』という文字列を代入してみましょう。」

ソンくん

 Cellsオブジェクトの引数となる行番号を1・列番号を1とし、

 そのセルの値に『1行1列』を代入するのだから、

Sub 行番号と列番号指定1()

 Cells(1, 1).Value = "1行1列"

End Sub

 にしました。」

パイさん

「プログラムには3つの基本構造があります。

 一つ目の基本構造順次処理です。

 順次処理とは順に処理を実行するということです。

 

 今回のマクロでは、

 Cells(1, 1).Value = "1行1列"という順次処理1記述されました。

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

Img3_1_2

ソンくん

「1行目・1列目のセルに、『1行1列』が、書きこまれました。」


2. 1~3行・1列

パイさん

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

 3つのセルに対して、『X行1列』を設定しましょう。」

ソンくん

「列を1列目に固定して、行を1行目から3行目まで1行ずつカウントアップしていくということは、

 1行目・1列目のセルに『1行1列』

 2行目・1列目のセルに『2行1列』

 3行目・1列目のセルに『3行1列』を設定するということだから、

Sub 行番号と列番号指定2()

 Cells(1, 1).Value = "1行1列"

 Cells(2, 1).Value = "2行1列"

 Cells(3, 1).Value = "3行1列"

End Sub

 と記述しました。」

パイさん

「今回のマクロでは、

 Cells(1, 1).Value = "1行1列"

 Cells(2, 1).Value = "2行1列"

 Cells(3, 1).Value = "3行1列"という順次処理3記述されました。

 

 それでは、いったん全てのセルの値をクリアしてから、そのマクロを実行してみましょう。」

Img3_1_4

ソンくん

「1行目・1列目のセルに『1行1列』、

 2行目・1列目のセルに『2行1列』、

 3行目・1列目のセルに『3行1列』、が書きこまれました。」


3. 1行・1~3列

パイさん

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

 3つのセルに対して、『1行Y列』を設定しましょう。」

ソンくん

「行を1行目に固定して、列を1列目から3列目まで1列ずつカウントアップしていくということは、

 1行目・1列目のセルに『1行1列』

 1行目・2列目のセルに『1行2列』

 1行目・3列目のセルに『1行3列』を設定するということだから、

Sub 行番号と列番号指定3()

 Cells(1, 1).Value = "1行1列"

 Cells(1, 2).Value = "1行2列"

 Cells(1, 3).Value = "1行3列"

End Sub

 と記述しました。」

パイさん

「今回のマクロでは、

 Cells(1, 1).Value = "1行1列"

 Cells(1, 2).Value = "1行2列"

 Cells(1, 3).Value = "1行3列"という順次処理3記述されました。

 

 それでは、いったん全てのセルの値をクリアしてから、そのマクロを実行してみましょう。」

Img3_1_6

ソンくん

「1行目・1列目のセルに『1行1列』、

 1行目・2列目のセルに『1行2列』、

 1行目・3列目のセルに『1行3列』、が書きこまれました。」


4. 1~3行・1~3列

パイさん

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

 列も1列目から3列目まで1列ずつカウントアップしていき、

 9つのセルに対して、『X行Y列』を設定しましょう。」

ソンくん

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

 列も1列目から3列目まで1列ずつカウントアップしていくということは、

 1行目・1列目のセルに『1行1列』

 1行目・2列目のセルに『1行2列』

 1行目・3列目のセルに『1行3列』

 2行目・1列目のセルに『2行1列』

 2行目・2列目のセルに『2行2列』

 2行目・3列目のセルに『2行3列』

 3行目・1列目のセルに『3行1列』

 3行目・2列目のセル『3行2列』

 3行目・3列目のセルに『3行3列』を設定するということだから、

Sub 行番号と列番号指定4()

 Cells(1, 1).Value = "1行1列"

 Cells(1, 2).Value = "1行2列"

 Cells(1, 3).Value = "1行3列"

 Cells(2, 1).Value = "2行1列"

 Cells(2, 2).Value = "2行2列"

 Cells(2, 3).Value = "2行3列"

 Cells(3, 1).Value = "3行1列"

 Cells(3, 2).Value = "3行2列"

 Cells(3, 3).Value = "3行3列"

End Sub

 と記述しました。」

パイさん

「今回のマクロでは、

 Cells(1, 1).Value = "1行1列"

 Cells(1, 2).Value = "1行2列"

 Cells(1, 3).Value = "1行3列"

 Cells(2, 1).Value = "2行1列"

 Cells(2, 2).Value = "2行2列"

 Cells(2, 3).Value = "2行3列"

 Cells(3, 1).Value = "3行1列"

 Cells(3, 2).Value = "3行2列"

 Cells(3, 3).Value = "3行3列"という順次処理9記述されました。

 

 それでは、いったん全てのセルの値をクリアしてから、そのマクロを実行してみましょう。」

Img3_1_8

ソンくん

「1行目・1列目のセルに『1行1列』、

 1行目・2列目のセルに『1行2列』、

 1行目・3列目のセルに『1行3列』、

 2行目・1列目のセルに『2行1列』、

 2行目・2列目のセルに『2行2列』、

 2行目・3列目のセルに『2行3列』、

 3行目・1列目のセルに『3行1列』、

 3行目・2列目のセルに『3行2列』、

 3行目・3列目のセルに『3行3列』、が書きこまれました。」


パイさん

「今回は、Cellsオブジェクトの引数となる行番号列番号直接指定する方法により、

 多数のセルに値を書きこむ順次処理を紹介しました。

 1. 1行・1では1回のセルに値を書きこむ順次処理

 2. 1~3行・1では3回のセルに値を書きこむ順次処理

 3. 1行・1~3では3回のセルに値を書きこむ順次処理

 4. 1~3行・1~3では9回のセルに値を書きこむ順次処理、を記述しました。

 

 でも、セルの行番号と列番号を指定するとき、

 Cellsオブジェクトの引数:行番号と列番号を直接記述するという手法は、

 マジックナンバーと呼ばれるやり方で、プログラムのメンテナンス上あまりお勧めできません。

 

 では、Cellsオブジェクトの引数となる行番号列番号間接的に指定する方法により、

 多数のセルに値を書きこむにはどうしたらよいのでしょうか。

 これについては、次回『多数のセルの行番号と列番号を変数と定数で指定して値を書きこむ』で紹介します。