t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VBA For文の略記法 ~ ネストしたFor文のNextはひとつにまとめることができる。

Next文の変数は省略できるが、そもそも何のためにあるのか疑問だった。

しかし先日ネストされたFor文内が60ステップ超もあるコードを見て、なるほど制御変数が無いと、どのForに対するNextなのかこんがらがると思った。
いろんな人がメンテしているから、3タブだったり4タブだったりバラバラである。
しかしインデントをそろえたところで、コードが長くて一画面に収まっていないと目で見てインデントを追うのも大変。

Nextに目印となる変数があればコードを読む手がかりになる。
逆にいえば、一画面に収まっているなら、省略してしまった方がスッキリする。
ただし、ネストしている場合は書いたほうがバグを作りにくいのでそうしている。

さて、Nextの制御変数はもう一つ使い方がある。
これもあまり知られていないと思う。

Sub 九九()
    For i = 1 To 9
        For j = 1 To 9
            Cells(i, j) = i * j
    Next j, i
End Sub

良いかどうかは別として、そういう書き方も出来るということ。
そしてなぜかVBA Expert Access Standardの本試験の問題中にこの表記が登場したので、試験を受けられる方は覚えておくべし。

Nextでそう書けるなら、Forの方も何か短い記法が無いかと思ったが、以下のように普通にコロンで区切るくらいしかなさそう。これはこれで読みづらい気がする。

Sub 九九()
    For i = 1 To 9: For j = 1 To 9
        Cells(i, j) = i * j
    Next j, i
End Sub

中身のインデントをひとつ減らせるので、Forの中身が一画面に収まらないほど長い場合は有効かもしれない。

For i = 1 to 9, j = 1 to 9 みたいなのを期待したが、出来なかった。残念。

以上

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。