環境構築不要のExcelだけで学べるプログラミング(後編)

前編同様、エクセル以外一切不要!

前編記事はこちら

前編記事ではVBAの起動方法の詳細と、九九表の出力となるCells関数について説明しました。
この後編記事では『変数を用いた二重ループ』によって九九表を自動生成する流れを解説します!

いはな
いはな

市販の入門書では大抵、変数とは何か、から始まり簡単な計算、分岐処理と学び、
その後にループ(繰り返し)処理がでてきます。

さて、いきなりループ(それも二重)処理を解説するわけですが・・・
大丈夫です!理解していただけるはずです。
エクセルVBAには強力なデバッグ機能がついていますから・・・!

まずは、以下のコードをVBAのウィンドウにコピペしてみてください。

Sub test()

    Dim gyou As Integer
    Dim retu As Integer
    
    For gyou = 1 To 9
    
        For retu = 1 To 9
        
            Cells(gyou, retu) = gyou * retu
        
        Next retu
    
    Next gyou

End Sub

前編記事の、
Sub tesut()
Cells(1, 1) = “アザラシ”
End Sub

に、比べて急に複雑になりますが、すべて解説しますのでご安心を!

コードをコピペできたら、まずは実行してみましょう。

前編記事のコードは一度消した上で貼付してください

実行したらエクセルのシートを確認してみましょう!

この画像は拡大していますが、同じような九九表ができているはずです!

Cells関数は1か所にしか記述していません。
にもかかわらず計81セルに値が書き込まれています。

まずは実行したプログラムについて解説します!

前編記事のおさらいですが、エクセルVBAの文法の大枠は以下の通りです。

Sub 好きなプログラム名()
処理内容(必要に応じて何行書いてもOK)
End Sub


では、今回のコードを改めて見てみましょう。

Sub test()

    Dim gyou As Integer
    Dim retu As Integer
    
    For gyou = 1 To 9
    
        For retu = 1 To 9
        
            Cells(gyou, retu) = gyou * retu
        
        Next retu
    
    Next gyou

End Sub

最初の「Sub test()」と最後の「End Sub」については良いでしょう。

Dim gyou As Integer
Dim retu As Integer


上記2行は「変数の宣言」です。
以下が文法になります。

Dim 好きな変数名 As 変数の種類

赤ハイライトの部分は絶対的な文法です。
青ハイライトの部分は任意で、unkoとかでも構いません。
黄ハイライトの部分は何種類かある変数の種類(型)から任意のものを選択します。
Integerは「整数」という種類(型)です。

初学者からすれば変数ってなんだよ?という話ですが、中学1年生で習う x とか y と一緒です。
x = 2 と書いてあれば x は2ですよね。

gyouという名前の変数とretuという名前の変数を用意しました。
これらは任意の値を入れることができ、値は上書きし放題です。

難しいと感じる方もいるかと思いますので、ちょっと脳の報酬系を刺激してみましょう!

上記の解説の内容も、この後に説明する内容も、
C言語でもJavaでもPHPでもPythonでもあらゆるプログラミング言語で共通です。

全てに通ずる内容を覚えようとしていると考えたら、
ひ〇ゆきさんじゃないですけど、学習コスパよくないっすか?

さて、変数宣言の次の行を見てみましょう。

For gyou = 1 To 9

あらゆるプログラミング言語に出てくる「for文」というループ(繰り返し)命令です。
先程 x = 2 ならエックスは2になるんだ、とお話ししました。

Forの後に gyou = 1 To 9 とあります。To 9 は置いておきましょう。
まずは gyou = 1 ということでgyouは1になります。

Forはループ命令とお話ししました。1 To 9 とあるので、
1から9までgyouは1→2→3→4→5→6→7→8→9と上書きされながらループします。

つまり9回のループ処理です。

書かれたコードのどこをループ(繰り返し)するんだ?という点ですが、
Next gyou
までをループします。

For gyouからNext gyouまでが9回繰り返されるわけですが、
その中にFor retu~Next retuが入っています。

これをネスト(入れ子)と言います。
これはループがネストしている、二重ループ処理です。

頭がパァーン!!となりそうな人のために解説はここまでにして、
ここからは実際に動きを見てみましょう。

え、もう実行したじゃないかって?

一般的にプログラムは実行したらエラーがない限り、一瞬で完了して結果だけが残ります。
実行過程を映画を一時停止するように、都度確認することができれば理解が深まりそうなものなのに困ったものです。

一時停止、できるんです!それが「デバッグ」機能です。
VBAには標準で備わっています。今からご一緒にやってみましょう!

まずはシートを全セル選択し、deleteキーを押すなどしてまっさらな状態に戻しましょう。
コードは残したままにしておいてくださいね。
「ローカル」と書かれた謎のウィンドウが出現!
同じように赤丸印がつきましたか?

ここまで来たら、実行してみましょう!
「▶」を押せば実行です。

・・・すると、黄ハイライトがついた状態になるはずです。
これが確認のための「一時停止」状態なんです!

同じ画面になっていますか?

事前に出しておいたローカルウィンドウには gyou と retu の現在の値が表示されます。
Forまで到達すれば gyou = 1 と書いているので値が1になるはずですが、そこに到達する前に一時停止していますので初期値である0となっています。

そしてこのデバッグ機能は一時停止だけではなく、1行ずつコマ送りのように進めながら処理の流れを見ることができます!

黄ハイライトが For gyou まで進みました!

gyou = 1 とあるのに、ローカルウィンドウのgyouは0のままですが、
この黄ハイライトはこれから実行する行を意味します。

もう一度ステップオーバーしてみましょう。
先程はメニューから選択しましたが、shiftキーとF8キーを同時押しすることでも可能です。

黄ハイライトが次の行に進みました!

ローカルウィンドウのgyouが0から1に変わっているのに気づきましたか?
先程までハイライトがあたっていた1行前の、
For gyou = 1 To 9
は実行済みなので gyou = 1 の部分が処理されgyouが1になったわけです。

さて、shift + F8でもう一度ステップオーバーしましょう。

retuも0から1になりました。

retuも0から1に変わりましたね!
さて、黄ハイライトは前編記事で解説したCells関数まで来ています。

前編記事では、
Cells(1, 1) = “アザラシ”
と、することで1行1列セルにアザラシという文字列を出力できることを解説しました。
文字列以外にも、
Cells(1, 1) = 114514
と、すればセルに114514のような任意の数値を出力することもできます。

Cells(gyou, retu)ですが、察しの良い方はお気づきかもしれません。
変数は中身の値が実態としてプログラムから利用されます。

ローカルウィンドウを見るに現状は、
gyouは1、retuも1、です。

つまりCells(gyou, retu)はCells(1, 1)と同義です。

Cells(gyou, retu) = gyou * retu
上記のイコールの右辺についても解説します。

*(アスタリスク)はほとんどのプログラミング言語で乗算(かけ算)記号です。
つまり、gyou かける retuという意味になります。

繰り返しになりますが現状、gyouは1、retuも1、です。
つまり、1 かける 1という計算が行われます。

1 かける 1 は 1ですね(笑)

よって、Cells(gyou, retu) = gyou * retuは、
Cells(1, 1) = 1と解釈されます。

Shift + F8でステップオーバーしてみましょう。

Next retuまで進むはずです。

黄ハイライトが次の行、Next retuに進みました。
エクセルのシートを確認してみましょう。

1行1列に1が!!!

ここまで来たら後はもう、Shift + F8のステップオーバーの繰り返しです。
Cellsの次の行にハイライトが当たったタイミングになる都度、エクセルのシートの状態とVBA側のローカルウィンドウの変数の現在値を照らし合わせて、処理の流れを追ってみてください。

Forループの中にもう1つのForループが入れ子になった二重ループの動きについてもじっくり見ることができます。変数が10になった途端、一度ループから抜けてしまうはずです。

For 変数名 = 1 To 9 の To 9 の部分ですね。9回ループというより、正確には変数の値を1ずつ増加させながら変数の値が9までの間はループせよという命令です。

これによって変数retuは10になった途端ループを抜け、九九のかける9の列までで止まってくれるわけです。

ただし、gyouも To 9 となっていますから、それが更に9回繰り返されます。

よって、9回 × 9回のループとなり、計81セルに対してその時の変数の値の乗算結果が入ることで九九表が出来上がるわけです。

最後まで処理を終えると、この状態になるはずです。

後編のボリュームが偏りすぎました・・・申し訳ないです。

しかし、ここまでの内容は2980円ぐらいするプログラミング入門書で何十ページもかけてやっと到達するお話しです。そして、この多重ループという処理は色々な所で使われます。デバッグ機能を活用しながら、是非とも流れを覚えてみてください!

また、For文のTo 9の部分をTo 19とすればインドの方が覚えるような19の段までの九九表ができます!

フリーズする恐れがありますが、To 10000なども可能です(笑)

エクセルVBAの素晴らしいところは、

・エディタ(補完などがあり楽にコードを書ける)
・実行(書いたコードがそのまま実行できる)
・デバッガ(今回活用したデバッグ機能)

プログラマも実務で使う「統合開発環境」と呼ばれるソフトの三大機能と同等な機能が備わっている点です。そんなソフトが環境構築も何も、Office入りのPCを購入したのであれば最初から入っているわけです。是非ともプログラミングの勉強に使ってみてください!

以上、環境構築不要のExcelだけで学べるプログラミング、後編記事でした!

コメント

タイトルとURLをコピーしました