第3講 For文(繰り返し処理)
第1話 繰り返し処理のための課題
006
を実現するコード例
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
の部分の動きを追ってみましょう。
動きを追うことをトレースするといいます。
この言葉を是非覚えてください。
s1
以下
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回繰り返されます。
  037
つまり、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型として下さい。

では、次のソフトを開発してください。
001
B4に整数を入力してから実行ボタンを押すと、
002
消去ボタンを押すと、
001
ただし、今回は「1から」「までの和を求めます。」
などの文言はVBAから入れるのではなく、
あらかじめシート側のセルに入力しておくものとします。
その際に形を整えるために、
セルの幅を変更すると、
011
のようになってしまう場合があります。
このようなときはAlt+F11でVBAに行って、
012
赤いボタンを押してデザインモードに切り替えてから、
Alt+F11をしてエクセルに戻ってから消去など選択すると
013
となって移動できます。
適切な位置014に調整したら再び
Alt+F11でVBAに戻り、
021
再び赤い囲いをクリックするとデザインモードが終了して、
ボタンを動かなくさせることができます。




第2講第10話で消去は、基本的に
Private Sub CommandButton2_Click()
  Rows("4:2000").Select
  Selection.ClearContents
  Range("A1").Select
End Sub
とすると述べましたが、今回は変更が必要です。
第2講第10話の飛び飛びのセルを選択する方法を参考に消去のコードも変えてください。

第2講第10話へ 第2話へ

トップへ