[VBA解説]For文でループ処理を書こう![#6]

記事
IT・テクノロジー
前回はこちら
今回の記事で、プログラミングのメイン(と僕が思っている)内容の基礎は終了です。
「ここまでの内容も少し怪しい…」という人も、一旦ここまで通して読みつつコードも書いてみて、何となくで良いのでイメージを掴んでいって下さい。

For文の書き方

早速ですが、For文を使ったマクロのサンプルが以下の通りです。

Sub For文を試す()
    Dim colLong As Long
    For colLong = 1 To 10
        Cells(10, colLong).Value = colLong
    Next
End Sub

colLongは変数です。
For colLong = 1 To 10

Next
の部分が今回のメインですね。
日本語で説明すると、
For colLong = 1 To 10
「colLongは1から始まって、10まで以下の処理を行う」
という意味です。
そしてNextが「次へ」ですね。

どういうことかと言うと、最初はcolLongが1の状態で、
Cells(10, colLong).Value = colLong
の処理が行われます。
そしてNextに進むと、「colLongが2の状態で」
Cells(10, colLong).Value = colLong
の処理が行われます。
それをcolLongが10になるまで繰り返し、11になるとNextより下の処理に進みます。(今回の場合、End Subで終了です)

つまり、ForとNextの間の処理を何度も通るんですね。
その繰り返す範囲を、
For 変数=最初の値 To 最後の値
という書き方で表現します。

上記の例のように、Cells()の行や列の変数をFor文で1ずつ増やすような使い方はよく使います。
繰り返し実行したい場合に使うものはFor文以外にもありますが、ひとまずFor文を理解して活用出来るようになっておけば大丈夫です。

というわけで、今回のメインは終了です!
次からメインとは離れますが、「読みやすいコードを書くためのコツ」などを紹介します。

インデントを入れる

次の2つのコードを見てみて下さい。
Sub インデントあり()
    Dim rowLong As Long
    For rowLong = 1   To 100
        Cells(rowLong,1).Value = 1
    Next
End Sub

Sub インデントなし()
Dim rowLong As Long
For rowLong = 1 To 100
Cells(rowLong,1).Value = 1
Next
End Sub

「インデントあり」のコードは、行頭にスペースが入っています。
「インデントなし」のコードは、行頭にスペースが全く入っていません。

実際に動かすと分かりますが、どちらも処理自体は何も変わりません。ただ見た目が違うだけです。
「ならどっちでも良いのでは」と思われるかもしれませんが、VBAに慣れてくると、コードの長さは100行を超えることもよくあります。

また、今回解説したFor文や前回のIf文のように、「特定の回数繰り返し通る部分」や「場合によって通る部分」などが存在する場合、その範囲がどこからどこまでなのかを読んで分かりやすくしておくことは、ミス無くコードを書くためにとても大切なことです。

このように行頭にスペースを入れて読みやすくすることを「インデントする」と言います。また、コードの読みやすさのことを「可読性」と言います。
VBEでインデントする場合、Tabキーを押せば半角スペースが4つ分自動で入力されるので、Tabキーを使って読みやすくインデントしておきましょう。

インデントの入れ方ですが、基本的にFor文やIf文のような際、

ここまではインデントしない
For rowLong = 1 To 100
    繰り返し実行される範囲
Next
ここからはインデントしない

ここまではインデントしない
If rowLong > 50 Then
    条件を満たした時に実行する範囲
End If
ここからはインデントしない


上記のようにインデントを入れたり、不要な部分はインデントを戻したりします。


インテリセンス(入力候補の表示)機能を活用する

VBEでコードを書いていく際、RangeやCellsは短いのでまだ良いですが、中にはスペルの長い単語もあり、一つひとつすべて手入力しているとスペルミスが起きますし、何より面倒です。長い単語をいちいち覚えるのも大変ですよね。

そのような時に、最初の数文字を入力しておき、インテリセンス機能を使うことで、以下のような表示を出すことが出来ます。
インテリセンス.png
この画面は、「ce」と入力したタイミングで、Ctrlキーとスペースキーを押した時の状態です。
ceから始まる単語がずらっと表示されていますね。この一覧の単語を方向キーの上と下で選択し、Tabキーで決定します。
すると、選択した単語がVBEに入力されます。
インテリセンス2.png
ちなみにこのインテリセンス機能の良いところは、変数として宣言した変数名も表示してくれるところです。

例えば画像のように、colLastLongやcolStartLongを宣言している場合に「col」と入力してインテリセンス機能を使うと、以下のようになります。
いんてりせんす3.png
1番目にcolLastLongが、5番目にcolStartLongがありますね。
変数名を付ける際、その変数名が何を意味するのか分かりやすいように付ける必要がありますが、どうしても長くなる場合が出てきます。

そのような時にもこの機能が役立つので、ぜひ活用しましょう。

コメントを書く

コードを書くのに慣れるまでは特に、どのような流れでコードを書くかイメージがわきづらく、最初からコードを書き始めるのは難しいです。

その場合に「コメント」を書くと分かりやすくなります。
コメントとは、コードとして実行されない文字列で、単なるメモ書きのようなものです。
コメントを書くには、コメントとして書きたい部分の前に「'」(アポストロフィ)を入力すればOKです。
コメント.png
設定で文字の色を変えているので画像と色は違うと思いますが、普通の文字を入力した際と色が変わるのが分かると思います。

自分自身がコードを書く際に分かりやすくするために書くのはもちろん、後々修正が必要になった場合など、どこで何をしているかコメントを書いて分かりやすくしておくと、修正が楽になります。

コメントを書く量は人それぞれですが、あまり書き過ぎても逆に読みにくくなるので要注意です。


次回予告

さて、今回でFor文と、VBAを書く上でのコツを解説しました。
ここまでの内容を活用しつつ、細かい部分を補填すれば、大体のマクロは作ることが出来ると思います。

次回からは実際に、一つのマクロを作成しつつ、どのように考えていくかを解説していきます。

ここからが本番ですので、ぜひ真似しながら実用的なマクロ作成の第一歩としていただきたいです。

今回の内容で理解出来ない部分などありましたら、以下の有料サポートサービスをご利用下さい。出来るだけ迅速、丁寧に対応致します。
次回の記事はこちら

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す