MS Officeで役立つVBAの技:これだけは覚えとけ!
翻訳校正:村上雅章・野崎裕子
ユーザー部門に対してVBAの教育を行うことで、彼ら自身でちょっとした業務の自動化を行えるようになり、IT部門とユーザー部門の両者にメリットがもたらされる。本記事ではそういった教育に欠かせないコーディング上のベストプラクティスを解説している。
読みやすいコードを記述する
コードの可読性を向上させる最も簡単な方法として、ステートメントをインデントするというものがある。インデントには空白文字やタブを用いることができる。VBEのデフォルトでは、タブ1つが空白文字4つ分に相当する。タブ1つに相当する空白文字の個数を変更するには、[ツール]メニューから[オプション]を選択し、[編集]タブをクリックする(このタブはデフォルトで選択されている)。そして、「タブ間隔」に適切な空白文字数を入力する(図Cを参照)。
タブを用いてコードをインデントする際の空白文字の数を指定する
どういった場合にインデントするかはプログラマーに任されているものの、以下のガイドラインを参考することができるだろう。
- If...EndやSelect Case、With、For...Nextなど、対をなすステートメントをインデントする。
- BeginTran...CommitTransやAddNew、Updateなど、関連する操作をインデントする。
- 同一モジュール内にある他の手続きと区別しやすくするため、各手続きの本体(手続きのヘッダからそのEndまでの間)をインデントする。
以下のcmdPrint手続きでは、コード本体すべてをインデントすることで手続きのヘッダ行とEnd行から区別するとともに、Ifステートメントの実行節をインデントすることでその条件節と区別している。
Private Sub cmdPrint_Click()
'Open filtered report.
Dim frm As Form
Set frm = Forms!frmReconcilePayments
If intfilterType = acApplyFilter Then
DoCmd.OpenReport "rptOnFilterTest",
acViewPreview, , frm.Filter
Else
DoCmd.OpenReport "rptOnFiltertest", acViewPreview
End If
End Sub
インデントはVBAでは必須ではないものの、インデントを用いることでコードの流れがより判りやすくなり、コードの可読性が向上する。
可読性に関するもう1つの問題として、連続した数多くの行からなるコードから特定のブロックを見つけ出すというものがある。これには、まとまった処理の切れ目や、やロジックの切れ目に空白行を挿入するとよい。ユーザーには、彼らの記述するコードが書籍のようなものであると教えるようにしよう。言い換えれば、まとまった処理が終わった時、すなわち「思考」の切れ目で空白行を挿入するということである。この例がユーザーにとって理解しにくいというのであれば、各コメントの前に空白行を挿入するように教えるとよい。ユーザーは当初、短い手続きしか記述しないため、このアドバイスを実践する機会はあまりないかもしれない。しかし、コーディングが上達した段階で再度、このアドバイスを彼らに与えておくのがよいだろう。
定数を用いて効率を高める
VBAを初めて使うユーザーは、定数を使うほどのスキルを備えていない。しかし、彼らのスキルレベルが向上するにつれて、効率というものの重要性に重点を置いて教育する必要が出てくるため、定数についても教えることになるだろう。
定数には、めったに変わることのない値が格納される。事実、定数の値をプログラム内で変更することはできない--変更するにはプログラマがコードを修正しなければならないのだ。このため、ユーザーに最初に教えておくべき重要な教訓は、安定していない値を定数として宣言、定義してはいけないというものになる。
上級ユーザーに対しては、安定している値を定数として個別に設定する方法を教えておこう。そうすれば、その値を更新する必要が生じたとしても、ステートメントを1行、すなわち定数の宣言ステートメントだけを修正すればよいようになる。例えば、一般的な割引率をDouble型として以下のように宣言するとしよう。
Const conDiscount As Double = .01
conDiscountへの参照を式や関数に記述することで、.01という値をハードコーディングすることと同じ効果を生むことができる。ユーザーにとっての最大のメリットは、割引率が変更になった際にステートメントを1行更新するだけですむというものである。
- 9人の推薦記事
- 0人がクリップ
-
ソーシャルブックマーク(-)
- トラックバック(1)
- 今日のトップ記事
- 昨日
- 2日前
- 5日前
- 6日前
- 7日前
- ホワイトペーパー
- 話題のタグ
mixiサービス企画部長に聞く、「プラットフォームを開放する理由」
iPhoneのPush Notification Serviceでなにが起こるか
iPhone 3Gはメールにファイルを添付できないの?
発射台での度胸試し--J・L・ガセー氏が見た「MobileMe」の問題点
Firefox 3.1で強化されるHTML 5対応--Canvas Text APIを検証
つなげ! 速く、美しく、正確に--光ケーブル工事の技能を競う全国大会が開催
あなたのパワポ資料が近未来的に:MSがプラグイン公開
無料の「Oracle Database XE」で高速バッチ処理:活用のポイント
Rubyでどう書く?:RubyCocoa+Core Animationでお手軽アニメーション
なつかしのHTMLタグ「marquee」--CSS 3のマーキーを検証してみる
子どもに学ばせるとよい言語とは?
DELLが掲げる「新・仮想化アセスメントサービス」
APC SOLUTIONS FORUM 2008をレポート
ZDNet Japan ホスティング特集
ZDNet Japan Green IT
仮想化環境で求められるストレージの要件
Techno Exchange
セキュリティ対策レベルテスト公開!