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

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

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

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

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

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

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

パイさん

「前回『ループ処理で多数行のセルに値を書きこむ』は、

 行数がどんなに増えたとしても、

 Forをつかえば一つの順次処理にまとめられるという話でした。

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

ソンくん

列数がどんなに増えたとしても、

 Forをつかえば一つの順次処理にまとめられるのではないかな。」

パイさん

「その通りです。

 Excel VBA/マクロのループ(繰り返し)処理をつかえば、

 多数列に係る順次処理を一つの順次処理にまとめることができます。

 例え1万列の順次処理でも一つの順次処理にまとめることができます。


 ループ処理の構文として、Forを再び紹介します。」

Img3_4_1

パイさん

「このように、Forは、『For』の次にセットされた変数を、開始値から終了値になるまで、

 1ずつカウントアップさせながら、ForNextに、はさまれた順次処理をくり返し実行します。」


1. 1行・1~3列

パイさん

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

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

ソンくん

「今度の問題は、『行番号と列番号を変数と定数で指定して書きこむ』の 3.1行・1~3列と同じ問題ですね。」

パイさん

「そのときにつくったマクロ『行番号と列番号を変数と定数で指定3』を記載します。」

Sub 行番号と列番号を変数と定数で指定3()

 Const = 1

 Dim As Integer

  = 1

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

  = 2

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

  = 3

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

End Sub

ソンくん

に係る順次処理3回も書いています。ここは、ループ処理の出番ですね。」

パイさん

 』の定数宣言と『』の変数宣言はそのままのこして

 Forをつかって、3回の順次処理を一つにまとめてみましょう。

 

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

 セルに値を書きこむ順次処理をくり返し実行するForは、次のようになります。」

Img3_4_2

パイさん

「この列番号のループ処理を実行するための構文をつかって、

 マクロ『行番号と列番号を変数と定数で指定3』をまとめると、次のようになります。」

Sub 列番号をカウントアップするループ処理1()

 Const = 1

 Dim As Integer

 For = 1 To 3

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

 Next

End Sub

ソンくん

3に係る順次処理が、Forをつかうことで一つの順次処理にまとまりました。

パイさん

「今回のコードを解説します。

 『For = 1 To 3』から『Next』までが、ループ処理のブロックとなっていて、

 『Cells(, ).Value = "1行" & & "列"』がくり返し実行される処理となっています。

 

 『&』は、左の文字列右の文字列結合する演算子です。

 『"1行" & & "列"』は、『1行』1ずつカウントアップされていく変数『『列』を

 演算子『&』で結合するという意味です。

 

 『For = 1 To 3』は、変数『開始列『1から終了列『3まで1ずつカウントアップ

 していくということです。

 

 つまり、

 For = 1 To 3

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

 Next

 とは、

 変数『開始列『1から終了列『3まで1ずつカウントアップしながら、

 定数『変数『のセルに対して、『1行』変数『『列』を文字連結した値を設定する

 という意味です。

 

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

Img3_4_3

ソンくん

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

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

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


2. 1行・1~10列

パイさん

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

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

ソンくん

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

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

 今度の問題は、『列を1列目から10列目まで1列ずつカウントアップ』するということで、

 カウントアップの終了値が変わるだけですね。

 Forでは、『To』の次に、終了値を記述することになっているから、

 さきほどのマクロの『For 列 = 1 To 3』を、『For 列 = 1 To 10』に書きかえるだけですね。」

Sub 列番号をカウントアップするループ処理2()

 Const = 1

 Dim As Integer

 For = 1 To 10

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

 Next

End Sub

パイさん

10に係る順次処理が、Forをつかうことで一つの順次処理にまとまりました。

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

Img3_4_5

ソンくん

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

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

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

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

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

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

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

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

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

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


3. 1行・1~100列

パイさん

ループ処理の終了値を100まで増やします。

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

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

ソンくん

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

 Forでは、『To』の次に、終了値を記述することになっているから、

 さきほどのマクロの『For 列 = 1 To 10』を、『For 列 = 1 To 100』に、書きかえるだけですね。」

Sub 列番号をカウントアップするループ処理3()

 Const = 1

 Dim As Integer

 For = 1 To 100

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

 Next

End Sub

パイさん

100に係る順次処理が、Forをつかうことで一つの順次処理にまとまりました。

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

Img3_4_7

ソンくん

「1列目から100列目で、1行目のセルに、『1行Y列』が書きこまれました。」


4. 1行・1~1000列

パイさん

ループ処理の終了値をいっきに1000まで増やします。

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

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

ソンくん

「今度の問題も、ループ処理を利用します。

 Forでは、『To』の次に、終了値を記述することになっているから、

 さきほどのマクロの『For 列 = 1 To 100』を、『For 列 = 1 To 1000』に、書きかえます。」

Sub 列番号をカウントアップするループ処理4()

 Const = 1

 Dim As Integer

 For = 1 To 1000

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

 Next

End Sub

パイさん

1000に係る順次処理が、Forをつかうことで一つの順次処理にまとまりました。

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

 

 ちょっとその前に、ここで全てのセルの値をクリアする技を伝授します。

 列記号の最も左、行番号の最も上の空白のマス(赤枠)をクリックします。」

Img3_4_9

ソンくん

「全てのセルの色が暗くなりました。」

パイさん

「これは、全てのセルが選択されている状態です。この状態で、Deleteキーを打ってください。」

Img3_4_10

ソンくん

「全てのセルの値がクリアされました。」

パイさん

「次に、選択されているセルを『A1』に変更します。CtrlキーとHomeキーを同時に打ってください。」

Img3_4_11

ソンくん

「セル『A1』が選択されました。」

パイさん

「このように、全てのセルを選択している状態で、Deleteキーを打てば、全てのセルの値がクリアされます。

 また、CtrlキーとAキーを同時に打ったときも全てのセルを選択している状態になります。

 こちらも、ためしてみてください。それでは、そのマクロを実行してみましょう。」

Img3_4_12

ソンくん

「1列目から1000列目で、1行目のセルに、『1行Y列』が書きこまれました。」


パイさん

「このように、例え1000、、100016384列数がどんなに増えたとしても、

 Forをつかえば、多数列に係る順次処理が、一つの順次処理にまとめられます。

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

 マクロを実行して、多数列のセルに値が書きこまれることを確かめてみましょう。

 (1) 2列目から200列目まで、2行目のセルに、『2行Y列』を、

 (2) 30列目から3000列目まで、3行目のセルに、『3行Y列』を、

 (3) 160列目から16000列目まで、40行目のセルに、『40行Y列』を、代入してみましょう。

演習(1):マクロ『列番号をカウントアップするループ処理』

2列目から200列目まで、2行目のセルに、『2行Y列』を代入

Sub 列番号をカウントアップするループ処理()

 Const 行 = 2

 Dim 列 As Integer

 For 列 = 2 To 200

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

 Next

End Sub

 

演習(2):マクロ『列番号をカウントアップするループ処理』

30列目から3000列目まで、3行目のセルに、『3行Y列』を代入

Sub 列番号をカウントアップするループ処理()

 Const 行 = 3

 Dim 列 As Integer

 For 列 = 30 To 3000

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

 Next

End Sub

 

演習(3):マクロ『列番号をカウントアップするループ処理』

160列目から16000列目まで、40行目のセルに、『40行Y列』を代入

Sub 列番号をカウントアップするループ処理()

 Const 行 = 40

 Dim 列 As Integer

 For 列 = 160 To 16000

   Cells(行, 列).Value = "40行" & 列 & "列"

 Next

End Sub

 

 今回は、列数がどんなに増えたとしても、

 Forをつかえば、多数列に係る順次処理が、一つの順次処理にまとめられて、

 多数列のセルに値を書きこむことができるという話でした。

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

 これについては、

 次回『ループ処理で多数行×多数列のセルに値を書きこむ』で紹介します。」