あわせて読みたい


【セキュリティ対策ソフト】 トレンドマイクロ・オンラインショップ シマンテックストア


【書籍】 オンライン書店 boople.com(ブープル)
2012-06-08 07:00:04

イベントには最小限のコードを記載する

テーマ: ・規約
VBAに限ったことではないが、ネットで検索できるサンプルプログラムは「イベント」に書かれているケースをよく見かける。しかし、プログラムの再利用を考えると、イベントには最小限のコードを書く方がよい。
2011-07-25 08:00:26

VBA関連 規約を小分けに考えてみる

テーマ: ・規約
現在、VBA関連で規約のようなものを作りかけている。
・クラスモジュールに関するもの
・一般的な開発標準に関するもの
・Accessの開発の留意点
の3つになるか。

このうち、Accessの開発の留意点は最近のブログで書き始めたもの。しかし、これを書くには基礎知識である、一般的な開発標準に関するものをきちんと整っていないと結構説明が面倒くさいことが分かってきた。そこで一般的な開発標準に関するものも早めに整備してみようと見たら、ああ、これはちょっと完成させるのに時間が掛かりすぎる。
そこでテーマごとにもう少し小分けにしていこうと考えている。

これで集中的に作成していければと思うが、どこまで考えたとおりにできるだろうか・・。



2009-04-22 01:00:06

ObjectList

テーマ: ・規約

Excel 2003 より、ObjectList というものが使えるようになったそうだ。よくは調べていないが、使い方を見ている限り、似たようなものをClassとTypeで実装したことがある。特別新しい概念ではないような印象がある。ただ、ObjectListは結構汎用的に利用できるようだ。


 


Excelの場合、未だにExcel2000や2002を使っているところもある。もしかしたらまだ97や95を使い続けている所もあるかもしれない。Excelでの開発を行う際に重要なことのひとつとして、どのバージョンに対応させるのか、という観点も必要である。バージョンの指定を確認しなかったがために失敗したこともある。顧客はバージョンの違いで影響があるなどという認識は全くないので、開発側から確認する必要がある。


 


個人的には、使えるようにはなっておくけれど、顧客先ではまだ古いバージョンも多いので、実装するのは先かな、と考えている。


2008-12-12 11:00:00

ハンガリアン記法 誤解していた!

テーマ: ・規約
ハンガリアン記法にはアプリケーションハンガリアンとシステムハンガリアンがある、ということは以前書いた
しかし、私の理解が明らかにおかしかったので訂正する。

次のような理解が正しい(はず)。
《共通点》
・接頭語(プリフィクス)である

《相違点》
・一般にハンガリアンとして知られているシステムハンガリアンでは「変数の型」「変数のスコープ」等を表す接頭語を付加する。
・アプリケーションハンガリアンは、「変数の属性」を表すモノを接頭語を付加する。属性、というべきか、種類というべきか、迷ったが、ここでいう「属性」とは、座標軸が絶対値か相対値か、通貨単位がドルかユーロか、というような情報を指す。


参考URL:

 間違ったコードは間違って見えるようにする
 ハンガリアン記法|悪態のプログラマ 
 ハンガリアン記法|WikiPedia
 
----

以前は「システムハンガリアンとアプリケーションハンガリアンは併用できる」と理解していたが、できるようなものではない。

で、考えたところ、導入の簡単なのはシステムハンガリアンだ。アプリケーションハンガリアンはどの接頭語が何を表すか、きちんと決めなくてはならないからだ。ただ、後者の方が変数名が短縮でき、見通しはよくなる。

ハンガリアン記法について、VBAにおいてどういう方向がいいのか、考えてみることにする。



2008-10-30 01:00:35

Option Base

テーマ: ・規約
Option Base というオプションがある。各モジュールの先頭に記載し、配列の開始が0か1かを指定するオプションである。指定しなければ 0 である。

Dim sVal(10) As String という配列の場合
Option Base 0 だと 11 ( 0 ~ 10 ) 個の要素
Option Base 1 だと 10 ( 1 ~ 10 ) 個の要素
となる。

通常、あまり意識しなくてもいいと思うが、使い方はプロジェクトで決めておく必要がある。

以下、私の経験則だが・・。

意識的に Option Base を 1 に設定するのは、データベースとワークシートとのデータのやりとりをする領域に対してである。
通常の場合、データベースから読み込んだデータをセルに貼り付ける場合、いったんVariant型の配列を経由させる。
理由は、読み込んだ内容を未編集でそのまま貼り付けられる場合は少なく、何らかの加工が必要になることが多いのだが、セルに貼り付けてから編集すると「遅い」ので、Variant型の配列に突っ込んで、そこで型変換なりしてから一気に書き込むのだ。ワークシートは列、行とも1から開始するので、Variant型の配列をワークシートの同じように設定しようと思うと、 Option Base を 1 とした方が分かりやすいからだ。

また、Typeなどで確保したエリアは Option Base 0 にしている。配列番号 0 は通常空けておいて、例えばアルゴリズムでソートをする際のスワップ領域にしたり、何らかのしきい値を入れておくのに使う。

ブログトップへ
ブログ内検索キーワード
 Option 配列

2008-10-28 00:55:33

文字列の連結に + は使わない

テーマ: ・規約
VBAで文字列を使う場合、& と + を使うことができる。しかし、 + は四則演算の加算の記号でもある。目に飛び込んできた記号が + なら加算である、という状態にしておけば、その箇所を加算箇所が一目瞭然となり、可読性が向上する。

では、文字列の連結はどうするのか?
他の言語、例えばDelphiでは確か Concat とかいう関数があったかと思うが、同様の関数を作ってもいいし、&で接続しても構わないだろう。ただ、関数を使った方が拡張性は高いかな、という気はする。


2008-08-04 05:00:49

ハンガリアン記法

テーマ: ・規約
変数や定数に、型を表すプリフィクスを付加する表現方法である。

〔例 アンダーバーは使わないパターン〕
Dim iCnt As Integer ' i がプリフィクス
Dim lRecCnt As Long ' l がプリフィクス
Dim shtFrom As Worksheet ' sht がプリフィクス

〔例 アンダーバーを使うパターン〕
Dim i_Cnt As Integer ' i がプリフィクス
Dim l_RecCnt As Long ' l がプリフィクス
Dim sht_From As Worksheet ' sht がプリフィクス

よくVBAではプリフィクスを3桁としている表記をよく見かける。いろいろ意見はあるだろうが、IntegerやLongのような、基本的で頻出する型については1桁でよいだろう。
上記の例で、Worksheet を sht としているが、Worksheet、Form、TextBoxなどのオブジェクトは3桁くらいないと分かりにくいように思う。また、通貨型など、頻繁に使うものでないとか、他の言語にあまりないものは3桁くらいあった方が分かりやすいようだ。また、プリフィクスと変数の間を _ (アンダーバー)でつなぐのもよいだろう。
このあたりは経験と分かりやすさで選ぶとよい

開発プロジェクトでは経験してきた現場や言語により個人個人の常識が違う。なるだけ早期に確立しておくことが必要である。 ハンガリアン記法で享受できるコーディングやテスト時のミスを若干減らせること、保守時に理解が早くなることなどのメリットは捨てがたいからだ。


最近はクラスを独自に作ることもあり、ハンガリアン記法を使わないことも見かける。まあ、それはクラス用の表記を決めるように決めればよいように思う。


なお、ここまで「システムハンガリアン」ということについて書いている。

ハンガリアン記法には、システムハンガリアン以外に、アプリケーションハンガリアン、という概念があるそうだ。
アプリケーションハンガリアンは「変数の意味を変数名とすることで、間違ったコードが間違って見える」ことを目的としている。
もう少し言及すれば、変数の使い回しのようなことをせず、例えば行を表すなら lRow などとし、行を表す以外の用途には使わない。列を表す表現に、iCol_A、iCol_Bのような、汎用的に使うようなモノを作らない、など、となるであろう。

アプリケーションハンガリアンの概念も重要であるので、規約として定めた方がいいだろう。できれば変数の辞書や命名規約を作る、などができるのが望ましいだろう。

なお、上記に関係する部分でもあるが、

・型の略し方
・大文字小文字の混ぜ方
・Const値の表記方法
・スコープがPublic、モジュール/クラス内でのPrivate、Private のプリフィクスの付記方法
・型による限界値(例:Integerのとりうる範囲、など。C言語やDBMSではIntegerと書いても桁数が違う場合もあるので。)の把握
・型がデータベースのどの型と一致するか

あたりも決めておき、文書にして、共有しておくとよいだろう。




2008-03-16 12:50:15

記事:「MS Officeで役立つVBAの技:これだけは覚えとけ!」

テーマ: ・規約

「MS Officeで役立つVBAの技:これだけは覚えとけ!」という記事を見つけた。


http://builder.japan.zdnet.com/news/story/0,3800079086,20367444,00.htm


こういうブログを書いていながらヘンかもしれないが、「世間ではVBAの注目度がそれほどないので、こういう記事が出てくること」には少々驚いた。内容は参考になるだろう。


さて、記事の文中に「ユーザーを教育し、彼ら自身でちょっとしたコーディングを行えるようにすることで、彼らからの開発要求を減らすことができるようになるだろう。Visual Basic for Applications(VBA)は学習の容易なプログラミング言語であるため、コーティング経験のないユーザーに教える言語としてお勧めだ。」


うんうん、まったくその通り。ただ、業務を持っているとなかなか片手間でできることではないことも事実。

私としてはユーザーを教育するよりも、もっと現場をよく知っているエンジニアを育てた方がいいのではないか?と思ってはいる。

2008-03-15 20:30:00

コーディング規約はなぜ必要なのか?

テーマ: ・規約

コーディング規約、なぜ必要なのか?


http://revilog.com/2008/02/011137.html

この記事に「要らない場合」の一例が出ている。この記事の内容通りの環境ならば必要ないだろう。


しかし、世の中、そういう場合はあまりない。また、「顧客に納品し、メンテナンスが顧客に委ねられる」と、自分たちの手を離れるケースだと、まずそういう期待はできないのだ。まして、ユーザー部門の利用が多いVBAである。規約がないと困るケースは多々あるだろう。


上記で紹介した記事のケースでもなければ、規約は必要と考えていただいて大きくは間違っていないだろう。




2008-03-09 17:30:26

変数の宣言は強制する

テーマ: ・規約

VBEのメニューバーの[ツール]-[オプション]で表示されるダイアログボックスで、標準設定だと変数の宣言は強制されていないが、以下の画像の赤枠のように、強制することをお勧めする。


VBE_Option


「いちいち変数を宣言するなんて面倒」と思う方もいらっしゃるだろう。ごく短い処理であればそれでも済む場合もあるが、それでも変数の宣言を、それも適切な型での宣言をさせた方がよい、と思う。


思いつく理由としては

・使っていない値に設定してしまう危険性がある

・型を間違ってしまう危険性がある
がある。


※以下のサンプルコードはまたしても実行していないので、おかしな場合はご連絡を。


【使っていない値に設定してしまう危険性がある】

例えば次のようなコードがあったとする。


Sub aaa_0()


  'AとBの加算結果を表示する


  A = 1

  B = 2


  C = A + B


  MsgBox D


End Sub


上記プログラムでは何が表示されるだろうか?実際はこれほど単純なミスも希であろうが、例なのでご了承頂くとして、コメントに入れたとおりの結果は得られない。

このときに、A、B、C を宣言しておけば、間違えてDを使ったとしてもエラーが出るので防止することができる。


Sub aaa_1()


'次の3行を追加

  Dim A As Integer

  Dim B As Integer

  Dim C As Integer


  'AとBの加算結果を表示する

  A = 1

  B = 2

  C = A + B

  MsgBox D   '←宣言されていないのでエラーが発生する

End Sub


【型を間違ってしまう危険性がある】

例えば次のようなコードがあったとする。

Sub bbb_0()

  'AとBの加算結果を表示する

  A = 1

  B = 2

  C = "A"

  D = A + C

  MsgBox D

End Sub

変数を定義していないと変数は Variant型になる。Aの内容は数字の1、Cの内容はアルファベットのAなので、一見足し算なんぞできないように思えるが、+ は文字列の結合をする演算子でもあるのだ。よって、「文字同士の結合」だと勝手に解釈されてしまう。


Sub bbb_1()


'次の4行を追加

  Dim A As Integer

  Dim B As Integer

  Dim C As String

  Dim D As Integer

  'AとBの加算結果を表示する

  A = 1

  B = 2

  C = "A"

  D = A + C  '←演算結果が数字ではないのでエラーが発生する

  MsgBox D

End Sub


【まとめ】
上記のように、変数の宣言はミスを防いでくれるのだ。多くのコンピュータ言語は「変数の宣言は当たり前」であり、また「Variantのような何でも屋の型はまずない」のである。(詳しい方へ:プリミティブな型、とご理解願います)

型を正しく宣言しないと、宣言したソフトウェアよりもテスト工数が多くなり、製造に余計なコストがかかる、ということにもなるのである。たとえ短いプログラムであったとしても、かならず「正しい型を宣言する」ようにすることをお勧めする。



Amebaおすすめキーワード

    アメーバID登録して、ブログをつくろう! powered by Ameba (アメーバ)|ブログを中心とした登録無料サイト