Excel VBA

How to write continuously from 1 to 10 with Excel VBA.

Excel VBAで 1から 10まで連続で書き込む方法

 For文の利用例としてシートに 1 から 10 までの値を書き込むプログラムを作ってみます。

VBA

Sub TestFor()
	' 変数 i を宣言する
	Dim i As Integer
	' 1から10まで繰り返す
	For i = 1 To 10
		' シートに書き込む
		Sheet1.Cells(i, 1) = i
	Next
End Sub

 これを実行してみます。

 すると、シートの1行目から10行目までに値が書き込まれます。

 プログラムを見てみると、コメントを入れてもわずか数行です。プログラム中の 10 の部分を 100 に変えれば 100 回繰り返し実行しますし、1000 に変えれば 1000 回繰り返して実行します。

 もし誰か別の人に「1 から 1000 まで繰り返し数値を書き込むように」とお願いするとします。どんなに性格の良い人であっても嫌な顔をするに違いありません。でも Excel なら嫌な顔をすることはありません。つまり、プログラミングができる人というのは性格がものすごく良い秘書を何人も雇っているのと同じことなんです。

 改めてプログラムを確認してみます。For文は以下のように記述します。

VBA

For i = 開始値 To 終了値
	' ここに繰り返し実行する作業
Next

 For文の中で、変数 i を使いますので、最初の行で変数の宣言をしています。

VBA

' 変数 i を宣言する
Dim i As Integer

 For文を使う場合、セル名でセル位置を指定するのは面倒です。そこで、Sheet.Cells(行, 列) を使って値を設定すると便利です。この Cells は以下のように使います。

VBA

' Sheet1の(行, 列)に値を書き込む
Sheet1.Cells(行, 列) = 値

 値を設定するだけでなく参照もできます。

VBA

' Sheet1の(行, 列)の値を読む
Value = Sheet1.Cells(行, 列)

For文で整数の和を計算

 For文を使ったプログラムの応用例として、「 1 から 10 までの整数の和 s を計算するプログラム」を作ってみます。

 この問題は、実は数学の公式 s=n(n+1)/2 が分かっているので、わざわざ For文を使わなくても計算できます。例えば、1 から 10 までの和は 10x11/2 = 55 となります。

 しかし、プログラムの練習問題としては結果が分かっている方が動作が正しいのかどうかを確認できるので、この「 1 から 10 までの和の計算」というプログラムを作ってみます。

VBA

s = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10

 と 10個の整数の和を直接書けば答えが計算されることは容易にわかると思います。

 しかし、これが「 1 から 100 までの和」、「 1 から 1000 までの和」などの場合はこの記述法ではとても対応しきれなくなってしまいます。

 この問題をもう少しプログラム的に考えてみます。プログラムは、基本的には1命令ずつ実行されるものであるから、「似た命令の繰り返しで問題をとらえ直す」のが都合良さそうです。

 その一例が以下の方法になります。

VBA

s = 0
s = s + 1
s = s + 2
s = s + 3
s = s + 4
s = s + 5
s = s + 6
s = s + 7
s = s + 8
s = s + 9
s = s + 10

 始めに「 s = 0 」によって s の値を 0 に初期化する。

 その後は、「 s = s + 〇 」という同じ形の命令を 〇 が 1 から 10 の範囲で実行していることが確認できると思います。

 そこで、〇 のところに上記の For文で使った i を入れることで、〇 のところに 1 から 10 を順番に指定することができ、これにより「 s = s + i 」を For文の中で繰り返すと 1 から 10 の和が s に格納されることになります。

 ただし、「 s = s + i 」という式の表現は、プログラム特有で数学では用いられないので違和感がある方が多いかも知れません。

 上記の例では、始めに「 s = 0 」によって s の値を 0 に初期化しましたので最初の s の値は 0 です。

 次の「 s = s + 1 」では、まず「 s + 1 」を計算し、s が今は 0 なので、「 0 + 1 」となり、計算結果の 1 を s に代入するため s の値は 1 に変更されます。

 さらに次の「 s = s + 2 」では、「 1 + 2 」となり、s の値は 3 に変更されます。

 これを「 s = s + 10 」まで繰り返し、最後に s の値は 55 に変更されます。

 この「繰り返し」の作業を得意とするのが For文となります。

VBA

For i = 1 To 10
	s = s + i
Next

 初めに s の値を 0 に初期化するので、「 s = 0 」を追記します。

VBA

s = 0
For i = 1 To 10
	s = s + i
Next

 ここで注意するのは、「 s = 0 」を For文の前に追記するという点です。もし、「 s = 0 」をFor文の中に書いてしまうと、「 s = 0 」も毎回繰り返すことになりますので、毎回「 0 + i 」の計算となり最後が「 0 + 10 」となって s の値が 10 になってしまいます。

 また、For文の中で、s と i という変数を使いますので、やはり最初の行で、それぞれの宣言をします。

VBA

Dim i As Integer
Dim s As Long
s = 0
For i = 1 To 10
	s = s + i
Next

 なお、和 s は大きな値になることがあり得るので、-32768~32767 までしか表現できない Integer ではなく、-2147483648~2147483647 の整数を表現できる Long型としました。

 このままでは動かないので、プロシージャ(Sub...End Sub)の中に入れます。

VBA

Sub TestFor()
	Dim i As Integer
	Dim s As Long
	s = 0
	For i = 1 To 10
		s = s + i
	Next
End Sub

 これで一応動くようになりましたが、見た目には何も表示されず、何も変更されないので動いているかどうかわかりません。そこで、メッセージボックスに計算結果を表示させてみます。

VBA

Sub TestFor()
	Dim i As Integer
	Dim s As Long
	s = 0
	For i = 1 To 10
		s = s + i
	Next
	MsgBox "sの値は " & s & " です"
End Sub

 これを実行すると「sの値は 55 です」というメッセージボックスが表示されたと思いますがいかがでしょうか?

 和を「 1 から 10 まで」ではなく、「 1 から 100 まで(和は 5050 )」などに変更してみたり、For文の条件は必ずしも 1 から始まる必要はないので、「 -10 から 10 まで(和は 0 )」や「 10 から 20 まで(和は 165 )」などに変更して、正しく計算されることを確認してみてください。