なずブログ

インフラSE、Java開発、リモートワークエンジニアな人のメモ帳

スクレイピングまでがんばるVBA講座~3.プログラムの基礎機能②

f:id:nazuna_0124:20170510210426p:plain

パソコン作業のだいたいのもんはVBAでなんとかなる(断言


よくわからないけど急に強気になってみたり。

すっかり秋風で気持ちいいいですね。



おつかれさまです。なずなです。



講座3回目っと。ざっくり書いてべた張りなので、

正直あんまり見返してません←


何かあったらツイッターで!



3.プログラムの基礎機能②

前回のクリップボードへコピーはよく使います。
これだけでもちょっとした改善が可能なくらいです。

ここから別のブックのセルをコピーするには?なんて試してみるといいです。

今回ももうちょっと基礎機能です。

・自作関数
・デバッグ


この2つになります。

自作関数

あらかじめ用意された関数があるなら自分で作ることもできるということ。

Sub myFuncTest()

    Debug.Print TimeDisp()

End Sub


Function TimeDisp()
    Dim str

    str = "今のは時間は" & Format(Now(), "hh:mm:ss") & "です。"


    TimeDisp = str


End Function


書き方の説明だけなので使いどころがまだまだ地味ですが仕方ないです。

SubではなくFunctionに変わっています。
そして最後に TimeDisp = str と自分の関数名に変数を代入してます。

これが返り値になります。

もちろん自作関数に引数を渡します。

ほかの言語ではReturnでいけるのですが、VBAはちょっと面倒ですね。

デバッグ

デバッグ機能の使い方です。
行数が長くなると、1行ずつゆっくり実行して
変数の中身を確認したくなります。

まず下記をコピペ。ついでに計算のための記号を覚えてください。

Sub calcSample()
    Dim re

    re = re + 1

    re = re * 2

    re = re / 2

    re = re Mod 2

    Debug.Print re

End Sub

まず3行目の re = re * 1 ウィンドウ左側の枠のあたりをクリックします。
○が行全体が茶色に変わります。

ここでF5を押します。

一気に○の行までは実行されてとまります。
とはF8キーを押すたびに1行ずつ進みます。
(最初から1行ずつ実行したいならすぐにF8でオッケー)

そして、途中の間に画面の右下ローカルウィンドウを見ます。
ここに変数と中身が表示されます。

マウスカーソルを対象変数に合わせても同様です。


長いプログラムをかくと意図しない出力結果になることがよくあります。

この方法でどこでどう変わったかを確認します。



次にオブジェクトを格納した場合を見ます。

デバッグ(オブジェクト)

Sub debugObject()
    Dim rng As Range


    Set rng = Worksheets(1).Range("A1")

    rng = Worksheets(1).Range("A1").Value

    rng.Interior.Color = vbBlue



End Sub

同じようにF8キーで進めてください。
オブジェクトを変数に入れるときは Set が必要です。
(必要ない言語が多い)

ローカルウィンドウを見ると、rngのところが+になっています。
クリックすると展開されて中身が見られます。

ほかにも方法がありますが、ここでどんなプロパティを持つのか
調べることができます。

進めるとvalueの値が変わっていることなんかを確認してください。

デバッグは少なくとも存在は覚えておいてください。


少し複雑なプログラムになってくると、

エラーは出ないけど期待する結果にならない

ことがよくあります。


そういう調査に使うものです。


ではでは次回へと続く!