読者です 読者をやめる 読者になる 読者になる

アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

ExcelVBA入門 #4:エンドレスエイトに学ぶ繰り返し処理

Excel VBA ExcelVBA入門シリーズ 繰り返し処理

練習問題:これが分かる・できる人は以降読まなくても大丈夫

  • Forを使った繰り返し処理が書ける
  • 繰り返し回数に応じてセル位置や内容を変えた処理が書ける

はじめに

今回も変数と同じくプログラミングに必須の要素である、
「繰り返し処理」についてのお話です。

もし、「夏休み」という文字列を
セルA1に15498回表示したいと思ったら、どうすればよいでしょうか?

これまでの知識だとこうなりますね。

Public Sub August()
    Range("A1").Value = "夏休み"
    Range("A1").Value = "夏休み"
    Range("A1").Value = "夏休み"
    Range("A1").Value = "夏休み"
    '…(略)…
    Range("A1").Value = "夏休み"
End Sub

と、15498回繰り返して書けばその通り表示してくれます。

同じことを何度も書かない!

でもまあ、どこぞの宇宙人さんじゃあるまいし、そんなことやってられませんね。
ここで「For」文の登場です。
以下のように書くだけで、15498回も同じことを書かずに済みます。すっきり!

Public Sub August()
    Dim i As Long       '整数型変数「i」を宣言
    For i = 0 To 15497  '「0から15497」の「15498」回
        Range("A1").Value = "夏休み"
    Next
End Sub

これで、15498回、セルA1に文字列が書かれます。

プログラムの中で何をしているかはコメント部分に記載しましたが、

For 変数 = 開始値 To 終了値
'(繰り返したい処理)
Next

という書き方になります。

今回の例では開始値を0、終了値を15497としていますが、
1と15498だろうが、10と15507だろうが、同じ結果になります。
慣習として0から始めることが多いためここでもそうしていますが、
可読性という観点では「1~15498」が分かりやすいかもしれませんね。

繰り返すだけではなく、処理の内容も変える

ここで、ループするごとに、変数には1ずつ足されていきます。
(1回目は開始値、2回目は開始値+1…)

さて…さっきのコードを実行してみると、A1セルに「夏休み」と表示されると思います。
まあそうなるように作っているので当然そうなるのですが、
これだと本当に15498回繰り返されているのかよく分かりませんし、
同じセルに同じ文字列を書き続けても意味がないので、少し書き換えてみましょう。

Public Sub August()
    Dim i As Long
    For i = 0 To 15497
        Range("A" & i + 1).Value = "夏休み:" & i + 1 & "回目"
    Next
End Sub

変更したのは、For文に囲まれた「Range~」の部分のみです。
「"A1"」が「"A" & i + 1」に、
「"夏休みループ"」が「"夏休みループ:" & i + 1 & "回目"」に
それぞれ変更されています。
尚、両方とも途中に「&」が入っていますが、これは文字同士をくっつける役割です。

<ある程度プログラミングわかってる人向け>
VBAでは数値型の変数や値に対してこういう処理をしたときも、勝手に文字列として解釈してくれます。
気になる方は明示的に変換してもよいでしょう。


さて、このコードがどういう処理になるかおわかりでしょうか?

例えばiが0のとき(=1回目のループ)、
「"A" & i + 1」→「"A" & 0 + 1」→「"A" & 1」
…つまり「"A1"」と解釈されます。
「"夏休みループ:" & i + 1 & "回目"」の方も同様ですね。
要するに、1回目は
「Range("A1").Value = "夏休み:1回目"」
2回目は
「Range("A2").Value = "夏休み:2回目"」
となるわけです。

ということで、これを実行してみると…
A1からA15498まで、ずらりと「夏休み:○回目」と表示されます。
f:id:honey8823:20150828121606p:plain

次回予告

ExcelVBA入門 #5:もし高校野球の女子マネージャーがドラッカーの『マネ - アナログCPU:5108843109
プログラミング三種の神器「変数」「繰り返し処理」に続き、最後は「分岐処理」です。
これさえできれば簡単なプログラムはそれなりに書けるはず。