初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

初心者のためのExcel(エクセル)マクロVBA入門-成績表マクロの作成:マクロの枠を作る

ファイルのレイアウトを作成する

前回までに、基本的な設計というのは大体決めることができたと思います。さっそく成績表マクロの新しいレイアウトと、必要なモジュールの外枠をすべて作成していきます。ゴリゴリっとやっていくのでしっかりと付いて来てください。

まずはマクロファイル本体からです。前回作ったシートを修正します。設置したフォームを右上において整理、シート名を「成績表」に変更します。さらに「コメントマスタ」と言う名前のシートを作成し、コメントコードと対応するコメントを書いておきます。また、別に出力する個人成績表のテンプレートを「Template.xls」という名前で作成します。

シート名:成績表

f:id:drumer2sh:20131024100342p:plain

シート名:コメントマスタ

f:id:drumer2sh:20131024100344p:plain


テンプレートファイル:Template.xls


f:id:drumer2sh:20131024100345p:plain


テンプレートはすごくざっくりですが、レーダーチャート使って書きました。この辺は各自綺麗なレイアウトにしたり、適当にデザインしてそれっぽくするといいと思います。

マクロの外側を作成する


さて、早速モジュールの外側です。今まで作ったものは残してもいいですし、削除しても良いです。残したい場合はモジュールのエクスポート機能などでモジュールだけを別に保存するといいと思います。では作っていきます。VBEを開いて設計した各標準モジュールとシートオブジェクトに名前を設定します。標準モジュールは右クリックから挿入→標準モジュールで、プロパティウィンドウから名前を変更します。プロパティウィンドウはVBEの表示メニューから表示させることができます。設計したモジュールと定数定義用のmdlDefineを合わせてすべて設定します。さらに、テンプレートの個人成績表のシートオブジェクトにも名前を付けておきましょう。すべて設定すると下の図のようになります。


f:id:drumer2sh:20131024100341p:plain

シートオブジェクトに直接名前を設定する。


良く見てほしいのは各シートオブジェクトにもちゃんと「shtScore」「shtComment」「shtPersonalScore」と名前がついていることです。名前も「sht」から始めているので一目でこれはシートオブジェクトだな。とわかります。
このようにしておくと何が便利か?というと、オブジェクトを直接指定するので、間違いがないこと、オブジェクト指定のエラーをほぼ「未然に防ぐ」ことができます。例えば・・・

Sheets("成績表")

としてシートオブジェクトを指定すると、シートの名前が「全体成績表」とか「クラス成績表」という名前に変わった時点でこのマクロは動かなくなります。ですが今回のようにシートオブジェクトの名前を直接設定して、その名前を使うと、どのようにシート名が変わってもまったく影響は受けませんし、どのモジュールからでもshtScoreで正確に指定することができます。もう何度も何度も言ってますが、

正しくオブジェクトを指定できればマクロは簡単!


ということです。このシートオブジェクトの指定の仕方は非常に便利なので是非使ってみてください。
さて、メインの処理を書いて行きます。これも最初はコメントだけでいいです。設計通りに書いて行きましょう。

Option Explicit

Sub Main()
'一般のエラーをキャッチする
On Error GoTo cmnErr
    
    ' 事前の処理をする
    
    ' エラーのチェックをする
    '''' エラーならマクロを終了する
    
    ' 成績表を読み込む
    
    ' 成績表を出力する
    
    ' 事後の処理をする
    
    'マクロ終了
    Exit Sub
    
cmnErr:
    MsgBox "エラーが発生しました" & vbCrLf & _
            "エラー番号:" & Err.Number & vbCrLf & _
            "エラーの種類:" & Err.Description, vbOKOnly + vbExclamation, _
            mdlDefine.ERROR_WINDOW_TITLE
    'マクロを終了する
    Exit Sub

End Sub

はい、まずはこれでオーケーです。一般的なエラーを補足するためのOn Error Gotoなどは、以前やったままとなっています。
中身は設計通りに事前の処理~事後の処理をしてマクロが終了しています。今はコメントだけですが、ここから肉付けをしていくだけです。必要なモジュールの中に必要なメソッドを作成していき、メインからは呼び出すだけになります。次回から、どんどんと書いて行きましょう!


今日はここまで!


かしこ