2014/09/10 このエントリーをはてなブックマークに追加 はてなブックマーク - 【Microsoft頑張れ】VBAの扱いひどくない?(Don't do careless programming by VBA)

【Microsoft頑張れ】VBAの扱いひどくない?(Don't do careless programming by VBA)








VBAなんてチョロいって人
VBAがショボいって思ってる人




Excel VBAはofficeの入っているPCなら誰でも利用可能である。
したがって、非プログラマや非VBAerもカジュアルに利用できる。

環境構築不要という参入障壁の低さはメリットでもあるが、
糞コード氾濫の一因にもなる。
(どこの現場もオレオレツールばっかだよね)

基本的に、VBAにはVBAの作法がある。※1
そこに、JavaやらPHPやらC系のコーディングルールを下手に混ぜ込むのはご法度だと思う。

VBAをやるならVBAに従おう。
(といいつつ、僕もコーディング規約に沿っているか不安な部分もある。Javaライクに書いてたら誰か殴って欲しい。)


ということで、基本的な規約ぐらい最低限は。



  命名規約


  • グローバル変数・ローカル変数⇒Camel形式※2
  • SubプロシージャとFunction⇒Pascal形式※3
  • クラスメンバ変数⇒Pascal形式
  • 変数のつなぎ目に「-(ハイフン)」や「_(アンダーバー)」を使わない


  • 参考元
    Developer Network MSDN 名前に関するガイドライン
    http://msdn.microsoft.com/ja-jp/library/ms229002(v=vs.100).aspx



      Javaとかの人向け(おまけ)



  • Option Explicit
  • ->変数宣言の強制。モジュールの先頭に書く。

  • Function、Subブロック外はモジュールスコープ
  • ->標準モジュールの場合の話。細かく言うと、Privateならモジュールスコープで、Publicならグローバルスコープ。基本的にはOption Explicitの下に書く(そこしか書けないかな)

  • 変数はブロックの先頭で宣言する
  • ->VBの言語思想による。(Cとかもそうだけど)

  • Boolean値は「 = True」か「= False」で評価しないとダメ

  • Integer使わずLong使おう
  • ->Integerは値の許容範囲が狭く、実行時に問題が発生したりする。Longの方が平和。

  • Variantを甘く見るな
  • ->なんも考えずぶち込むと大変なことになるよ☆

  • 型指定しないとVariantになる
  • ->型は明示的に

  • 引数にはByVal、ByRefを指定しよう
  • ->ByVal・・・値渡し、ByRef・・・参照渡し

  • Optional、ParamArrayを使おう
  • ->仮引数の方にOptionalを使えば、実引数は省略可。

    ->仮引数の方にParamArrayを使えば、可変長引数ぽくなる。

  • LBound、UBoundを使おう
  • ->覚えておくと便利って話

  • For Eachを使おう
  • ->覚えておくと便利って話

  • 三項演算子はIIf
  • ->三項演算子大好き(個人的趣味)
    例) Dim value As String
    value = IIf(i > 10,"10より大きい","10以下")

    ※ただ、厳密にはJavaの三項演算とは異なり、TRUEとFALSEの場合両方評価してしまうよう。
    つまり、ショートサーキット演算ではない(AND演算子に関しても同様らしい)
    2014/09/15追記





    なんか、すごいブーメランな気もするけど。

    VBAの学習サイトとか、情報の塊としては素晴らしいのだけれど
    実際のソースとしてはモヤっとしたものがある。
    そこらへんは見極めが必要。

    いつまで経っても古いサイトの古い情報が
    検索エンジンの結果の1番トップにあるのは
    なんだか違和感がある。(しょうがないけど)

    Tipsにしても、そこらへんの人が好き放題書いてる印象がある。
    研磨されないので、VBA界隈の人はもっと殴りあいするべきである。

    多分、参考書を読んだ方が良いのだろう(自分含め)





    VBA扱いひどいよねって話でした。
    あと、ちゃんとルールを知ろう、ルールを広めようっていう試みでした。
    VBAが混沌とした残念な広まり方をしている原因は以下のようなものが考えられる。

  • 素人がさわってる
  • 別言語のプログラマが片手間でやってる(やらされてる)
  • PM、SE層がツールなんて簡単に出来ると思ってる
  • 成果物ではないため、コードの品質はどうでも良いと思われている
  • Microsoftがちゃんと情報提供してないっていうか力を入れてない

  • 僕がどんだけ探してもMicrosoftのVBAに関してのドキュメント見つかんないんだもん
    そこらへんのリファレンスの整備とかMicrosoftがやってくれればもうちょっとちゃんとした情報が広まったんじゃなかろうか。



    ・・・って書いてたらコメントをいただきました。公式仕様あるみたいです。英語ドキュメントですが。
    [MS-VBAL]: VBA Language Specification
    2014/09/15追記



    結論としては

  • 言語に罪は無い
  • 言語を使う人(の使い方)が言語のイメージを形成している
  • 言語を使わば言語に倣え
  • 規約は守ろう
  • 公式ドキュメントを信じよう
  • Microsoft頑張れ


  • 以上。


    ※1 厳密にはVBAの規約ってあまりMicrosoftとして公表してないっぽい。
    VBの規約に準じる。ただ、VBの命名ルールはなぜか.NetFramework4の規約を参照している。。
    Microsoftちゃんとしろ。
    ※2 小文字始まり。単語と単語のつなぎ目は大文字
    例)
    hogeListItem
    ※3 大文字始まり。単語と単語のつなぎ目は大文字
    例)
    HogeListItem








    2 件のコメント:

    1. >僕がどんだけ探してもMicrosoftのVBAに関してのドキュメント見つかんないんだもん

      仕様書ならありますよ。
      http://msdn.microsoft.com/en-us/library/dd361851.aspx
      リンク先のpdfファイル

      返信削除
    2. >kumattiさん
      おぉ、ありがとうございます!
      日本語ドキュメントはなさそうですねぇ(英語読めよって話なんですけどね)

      ブログの内容修正させていただきます。

      返信削除