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

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

オブジェクト(ロボ)とクラス(設計図)を実践-初心者のためのExcel エクセルマクロVBA入門

今日はちょっとだけコードを書きます。前回までにお話したオブジェクト。そうロボの設計図であるクラスを書いてみましょう。サンプルにするのは以前題材で取り上げた成績表マクロを使います。今回は成績ロボ(オブジェクト)を作成する設計図(クラス)を書いてみましょう。全部やった人はわかると思いますが、ユーザー定義型をクラスに進化させる感じです。

クラスを書いてみる


では成績ロボの設計図を書いてみましょう。設計図は簡単ですね。機能と状態をただ書いて行くだけです。エクセルマクロの世界では設計図はクラスモジュールというものに書くというルールがあります。
なので、VBEを開いてオブジェクトブラウザ(VBE画面左上のエリア)にあるVBAProjectを右クリックして挿入からクラスモジュールを選択してクラスモジュールを作成します。

f:id:drumer2sh:20131111110803p:plain


プロパティウィンドウのオブジェクト名を[clsSeiseki]と変更します。プロパティウィンドウがない場合はメニューの表示からプロパティウィンドウを選択してください。

f:id:drumer2sh:20131111110804p:plain


これで新規のクラスモジュール(設計図を作るための紙)の準備が完成です。

さっそく成績ロボの設計図を書いてみましょう。機能と状態ですね。各順番は状態・機能の順に書いて行きます。
いきなりコード出しちゃいます。

Option Explicit


''''''''''''''''''''''''''''''''''''''
' 状態
''''''''''''''''''''''''''''''''''''''

' 科目のユーザー定義型
Private Type Kamoku

    kamokuName As String            '科目名
    score As Variant                '点数

End Type
    
' 成績表変数
Public Type Seiseki
    
    '出席番号
    skNum As String
    ' 氏名
    simei As String
    ' コメントコード
    cmntCode As String
    
    ' 科目と点数配列
    arryKamoku() As Kamoku
    
End Type

Public personalScoreData As Seiseki



''''''''''''''''''''''''''''''''''''''
' 機能
''''''''''''''''''''''''''''''''''''''


' 科目ごとの平均点を求める
Public Function GetAvgAsKamoku() As Double

End Function

' 全体の平均を求める
Public Function GetAvg() As Double

End Function

' 個人総合得点のランキングを作る
Public Function MakeRanking() As Variant()

End Function


こんな感じです。この成績ロボの設計図(クラス)です。ちゃんと状態と機能が書いてありますね。機能については外側だけで機能の中身は書いてませんが、この機能の中身も本来は全部書いて設計書は完成です。

このように設計図を書いておくと、すごく便利なことがあります。それは・・・

再利用が可能であるということ。


まぁ、別に汎用的にモジュールに記載してもそんなに変わりはないのですが、クラスの良いところは、同じようなロボをたくさん作れてしかもちょっと種類を変えることができるということです。
前々回でやった洋服引出ロボや本引出ロボのことです。

この成績ロボのオブジェクトを作成する。つまりインスタンスですが、小学生、中学生、高校生と同じ成績ロボでも違うものとして扱うことが可能になります。つまり。

	' 小学成績
	objSScore = New clsSeiseki
	
	' 中学成績
	objCScore = New clsSeiseki
	
	' 高校成績
	objKScore = New clsSeiseki

とすればいいわけです。どうですか?とても便利だと思いませんか?

覚えておいて欲しいのはクラスとは本当にただの「設計図」でそれ単体では何も動かない。ということです。きちんとインスタンスつまり、ちゃんと役割をもったロボを作成することで、初めてちゃんとその機能を使うことができます。
このことをプログラミングの世界でいうと、

ただのロボがオブジェクト、洋服引出ロボや小学生成績ロボがインスタンスとすると、

オブジェクトの実体がインスタンス

という言い方をしています。オブジェクトをNewして実体としてインスタンスを作成する。なんて言い方をしています。いかがでしょうか?こんな言い方をいきなりされてもきっとわからないと思いますが、今までのくだりがあればちゃんと理解できると思います。別にロボじゃなくてもよかったんですが、分かりやすい例えとして考えてみました。

では、次回はロボを動かす命令の書き方。つまりプログラミングについて勉強してきましょう。
言葉のお勉強です。コンピュータとレッツ!コミュニケーション!

今日はここまで。

かしこ