第3講 For文(繰り返し処理)
第1話 繰り返し処理のための課題
を実現するコード例
Private Sub CommandButton1_Click()
Dim w As Integer '和を累積していく整数型変数
w = 0 'wを0に初期化する
w = w + 1 '以下和を算出
w = w + 2
w = w + 3
w = w + 4
w = w + 5
w = w + 6
w = w + 7
w = w + 8
w = w + 9
w = w + 10
Cells(4, 2) = "1+2+3+4+5+6+7+8+9+10 =" '""内がそのまま表示される
Cells(4, 5) = w '和の表示
End Sub
Private Sub CommandButton2_Click()
Rows("4:2000").Select
Selection.ClearContents
Range("A1").Select
End Sub
参考ダウンロード添付ファイル
解説
w = 0
w = w + 1
w = w + 2
w = w + 3
w = w + 4
w = w + 5
w = w + 6
w = w + 7
w = w + 8
w = w + 9
w = w + 10
の部分の動きを追ってみましょう。
動きを追うことをトレースするといいます。
この言葉を是非覚えてください。
以下
w←w+4から6+4でwは10
w←w+5から10+5でwは15
w←w+6から15+6でwは21
w←w+7から21+7でwは28
w←w+8から28+8でwは36
w←w+9から32+9でwは45
w←w+10から45+10でwは55
で確かに1+2+34+5+6+7+8+9+10=55の計算が出来ています。
ですが、今回のコードはまったく褒められたものではありません。
2つ欠陥があります。
1は、汎用性がないことです。
汎用性がないとは、幅広い用途がないと言うことです。
もうひとつは同じことを人間が繰り返していることです。
もし、課題が
1+2+3+・・・+10000
なら今回の方法ではどうにもなりません。
まさか、1万行もコードを書くわけにはいかないですよね。
汎用性があるようにするとは、
1+2+3+・・・+n
のnがなんであっても計算できるようにさせることです。
2つの問題点はFor文を使えばあっさり解決します。
For文とは次のように使います。
For i = 1 To 10
・・・
・・・
・・・
Next
iのことを制御変数と呼びます。
For文を制御=コントロールする変数であるからです。
これで、
・・・
・・・
・・・
の部分が10回繰り返されます。
つまり、10回転します。
このように同じようなことを繰り返すことを「繰り返し処理」といいます。
繰り返し処理をFor・・・Nextを使ってさせることをFor文といいます。
回転のイメージがありますので繰り返し処理をループ文とも呼びます。
これはiを1から始めて、ひとつずつ大きくしながら10まで繰り返すように指示するものであるからです。
For i = 1 To n
・・・
・・・
・・・
Next
として、nの値をシートのセルから取得すれば、
毎回プログラムコードを変えずに
1+2+3+・・・+10
1+2+3+・・・+10000
などの計算をさせることが出来て汎用性が広がります。
この際には和を累積している変数wは、Long型に変更しておいてください。
1+2+3+・・・+100000
などではInteger型の範囲を超えてしまうからです。
Integer型の範囲は-32,768~32,767であるのに対して、
Long型の範囲は-2,147,486,648~2,147,483,647です。
iとnはInteger型として下さい。
では、次のソフトを開発してください。
B4に整数を入力してから実行ボタンを押すと、
消去ボタンを押すと、
ただし、今回は「1から」「までの和を求めます。」
などの文言はVBAから入れるのではなく、
あらかじめシート側のセルに入力しておくものとします。
その際に形を整えるために、
セルの幅を変更すると、
のようになってしまう場合があります。
このようなときはAlt+F11でVBAに行って、
赤いボタンを押してデザインモードに切り替えてから、
Alt+F11をしてエクセルに戻ってから消去など選択すると
となって移動できます。
適切な位置に調整したら再び
Alt+F11でVBAに戻り、
再び赤い囲いをクリックするとデザインモードが終了して、
ボタンを動かなくさせることができます。
第2講第10話で消去は、基本的に
Private Sub CommandButton2_Click()
Rows("4:2000").Select
Selection.ClearContents
Range("A1").Select
End Sub
とすると述べましたが、今回は変更が必要です。
第2講第10話の飛び飛びのセルを選択する方法を参考に消去のコードも変えてください。
第2講第10話へ 第2話へ