SSブログ

VBA 手間を惜しむな。何したか 画面に出そう。 [Excel VBA]

VBAプログラムを終了したら何か表示させよう

例えば、ファイルを出力するなら、どこのディレクトリに何のファイルを出力したか?
安心感が違います。

dim tmp as string

tmp = "ディレクトリ:(" & workPath & ")に ファイル:(" & fileName & ") を出力しました。" 
MsgBox (tmp)

いったんtmpに入れているのは debug.print tmp をしたりデバック時に判るようにです。

何も表示せずに終了させるのですか?いつ終わったのだろうか?勘弁してください。

nice!(0)  コメント(0) 

Excel VBA Cells の Colは数字はやめよう

Cells (3, 14) のカラムはどこだ?
Cells (3,"J" ) のほうが1目でわかるぞ
  メンテも楽だし。。。。

  本当はマジックナンバーを使いたくないが、、、
nice!(0)  コメント(0) 

VBA Sub Moduleは2画面程度に抑える [Excel VBA]

  だらだらと3画面も続くようなプログラムはやめましょう。
 ある程度の塊で意味を持たせて sub に納めます。

 といいますか、いきなりコーディングせずに手順書を日本語!で書きます。
 大まかな手順ごとに 面倒がらずにSub Module化します。
 後から絶対見やすいです。

例えば TOPは以下のように
 sub main()
        dim r as long
        dim c as long
          …
          …
        Call A
        Call B
        Call C
        Call D
    end sub

Call しかない場合が素敵です。

 同じ処理をCopy Pasteして2回書いてもいけません。必ずSub Module化します。
 たとえ数行でもです。
 Bug修正時に絶対もう一方の修正を忘れます。
 差分は 引数で分けます。

nice!(0)  コメント(0) 

[VBA]インデントを深くしない技

if 文を重ねるとインデントが深くなってしまいます。3つ以上のインデントは避けるべきです。
そのための手法があります。ちょっと慣れが必要ですが。
sub aaa
    if a=1 then
        xxx
        xxx
        if b= 2 then 
            yyyy
            yyyy
        end if
    end if
end sub

の場合は以下のように記述します。

sub aaa
    if a != 1 then
        exit sub   ' 何もしない
    end if

    xxx
    xxx
    if b=2 then
        yyyy
        yyyy
   end if
end sub


   aが1以外の場合何もしないので
 条件を反転して 何もしなくて sub を抜けるようにします。
 xxxが2行しかありませんが、体外20行ぐらいあったりします。
 その場合20行先で、何もしないことが分かります。
 ならば、最初にわかるようにすると親切です。


nice!(0)  コメント(0) 

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。