ExcelVBAゲームプログラミング?

初心者でもきっとできる!
Excelさえ持っていれば特別なソフトは不要!
すぐにでも始められる簡単ゲームプログラミング!
今すぐ始めよう!

サンプルやゲームのダウンロードができる別館も好評運営中です。
ご意見やご質問、ゲームの感想等は掲示板までお気軽に。是非、皆さんの声を聞かせてください。運営、開発の励みになります。



各種ダウンロードはコチラ ↓ 意見・感想・質問はコチラ ↓
影倉庫 Shadow warehouse サポート掲示板
ブログの全体像はコチラ ↓ リンクのページはコチラ ↓
サイトマップ 自分本位なリンク


スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。






Chapter.125 [ クラスモジュール:メソッド編 ]

■クラス設計の基礎

前回はクラスモジュールとは何なのか、また、クラスモジュールを用いることでどんなメリットがあるのかなどを解説しました。なかなか理解を深める機会も少ないクラスモジュールですが、それが何の役に立つのか、どんなことができるのかは、おおよそわかったのではないかと思います。

クラスモジュールはオブジェクトそのものを設計することができ、独自のオブジェクトにメソッドやプロパティを実装できます。あらゆる処理を、それらのオブジェクトを介して行うことで、非常に可読性に優れたコードが記述できます。バグやエラーに対しても比較的強く、生産性も向上する可能性があります。

クラスモジュールを記述していくにあたり、最低限知っておくべきことがいくつかあります。今回はまず、その基本をしっかりと習得しましょう。何事も基本が大事です。ここで手を抜くことなく、地盤をしっかり固めておいてほしいと思います。今回は最終的にメソッドの実装までをやってみます。頭を柔らかくして、柔軟な発想で理解してみてください。


■クラスモジュールはオブジェクトそのもの

クラスモジュールは、そのひとつひとつが、オブジェクトそのものを表します……と言ってもちょっとわかりにくいですね。これはいったいどういうことなんでしょう。

たとえば、ロボットなどの設計図を書くとき、一枚の設計図に複数のロボットの図面を書く開発者はあまりいないはずです。一枚の設計図にあれやこれやといろいろなロボットのことをまとめて記述するより、それぞれのロボットごとに独立した設計図を作成し、個別に管理したほうが利便性が高いことは想像に難くありません。

クラスモジュールでもこれと同じことが言えます。
ひとつのクラスモジュールは、イコールひとつのオブジェクトそのものを表します。もう少し踏み込んで言うと、クラスモジュールひとつで表現できるのは、たったひとつのクラスだけです。ひとつのクラスモジュールで、複数のオブジェクトのクラスを定義することはできないわけですね。

たとえばゲームの初期化を担当する専用のオブジェクトを設計しようと考えたときには、そこで初期化プログラム用のクラス(クラスモジュール)をひとつ用意することになるでしょう。
同様に、ゲームの根幹処理を担当するオブジェクトを設計しようとすれば、そこで新たにクラスが必要になります。

このように、クラスモジュールを用いた処理では、その目的ごとにクラスを設計し、新しいクラスを定義するたびに、クラスモジュールが増えていきます。
一見すると無駄なようにも感じるかもしれませんが、それぞれのオブジェクトが完全に切り離され、別々に管理されていることによって、デバッグの優位性など様々なメリットが生まれてきます。

始めはなかなかイメージしにくいかもしれませんが、オブジェクトやクラスなど、それらの言葉の意味をよく理解し、注意深く紐解いていけば自ずとわかってくるはずです。とりあえずは、ひとつのクラスがひとつのオブジェクトを表すのだと、無理矢理に理解してしまっても問題はありません。いずれ、体感的に自然と理解できるようになると思います。


■ちょっとやってみる

それでは早速、クラスモジュールを体験してみることにしましょう。
クラスモジュールを用いたプログラミングを行う際にも、今まで同様、モジュールを挿入するところから始まります。今までは標準モジュールを挿入してきましたが、今回はあたりまえですがクラスモジュールを挿入します。

ユーザーフォームや標準モジュールを挿入するときと同様、挿入メニューからクラスモジュールを選択し挿入します。

730.gif

クラスモジュールは標準モジュールとも違う独自のアイコンで表示されます。そして、先ほども述べたとおり、このモジュールひとつが、ひとつのクラスであり、ひとつのオブジェクトを表す設計図となります。

今回はクラスモジュールに慣れるために、単純なオブジェクトを設計してみることにします。今回設計するのは「べき算の結果を返すだけのオブジェクト」です。まったく使い道はありませんね(笑)

べき算とは、2乗、3乗、などの計算のことです。今回設計するオブジェクトを仮に「べき算ロボ」と名付けることにして、話を進めていきます。べき算ロボは、ユーザーにひとつの数字を与えるよう求めてきます。そして、与えられた数字を2乗した結果を報告するだけの機能を持ちます。ほんっとに、全く使い道がないロボットですが、今回はこれを設計します。

◆べき算ロボの仕様
・数字を渡すと2乗して結果を返す
・計算結果はメッセージボックスを用いて表示する

さて、べき算ロボをクラスモジュールで設計するために、まずするべきことは何でしょうか。

クラスモジュールは、それ単体がひとつのオブジェクトですから、当然のようにクラスモジュール自体が名前を持っています。先ほど、クラスモジュールを挿入したときを思い出してみてほしいのですが、デフォルトでは「 Class1 」などと名前がつけられていたと思います。これはプロパティウィンドウを見てみても明らかですね。

731.gif

クラスモジュールを挿入して真っ先にするべきは、このクラスモジュール自体の名前をつけることです。何のためのクラスなのか、何のためのオブジェクトなのかが、あとからわかりやすいように名前をつけておくべきでしょう。

今回はべき算ロボを設計するので「 Beki_Class 」と名付けました。何度も言うように、ここでは設計図を書くだけです。まだ、べき算ロボ自体を製作開始するわけではありません。設計図に図面を書く段階です。これがポイント。

732.gif


■メソッドの実装

クラスの名前を変更できたら、いよいよ設計図を書いていきます。とは言え、べき算ロボに求められている動作は非常に単純です。与えられた数字を2乗し、その答えをメッセージボックスで表示するだけでしたよね。

ここで大切なのは、今まさに、このべき算ロボの『 動作 』を定義しようとしているという点です。オブジェクトの動作……ということは、これはつまり『 メソッド 』ですね。今わたしたちがやろうとしていることは、べき算ロボにメソッドを実装させる一連の手順なんですね。

メソッドを実装させるとは言っても、やることはいつものようにサブプロシージャを記述するだけです。クラス Beki_Class に、次のように記述しておきましょう。

Sub Bekizan(Num As Long)

    Dim L As Long
    
    L = Num * Num
    
    MsgBox "結果は " & L & " です"

End Sub

この Bekizan というサブプロシージャは、引数として Long 型の数値を受け取り、その2乗をメッセージボックスで表示するだけの内容ですね。非常に簡素です。

簡素とはいえ、これで、Beki_Class に、あっという間にメソッドが実装できてしまいました。ほんとにこれだけ? とか思ってしまいますね。それでは正しくメソッドが実装されているのか、実際にこのクラスを用いた処理を実行し、試してみることにしましょう。


■クラスを利用する

クラスモジュールとは別に、標準モジュールをひとつ挿入します。
ここに、先ほど設計図を書いた Beki_Class を用いた処理を記述していきます。

クラスモジュールとはあくまでも設計図だと何度も言ってきました。そして、その設計図からオブジェクトを生成し、利用するということが最終目的です。クラスを利用するその段階になって初めて、オブジェクトそのものを生成します。

設計図を書いたクラスに属するオブジェクトを生成するには、ふたとおりの方法があります。ひとつは、変数を宣言するときのような形で、オブジェクトを宣言する際にクラスを割り当てる方法です。この場合には、次のように宣言文を記述します。

Dim B As New Beki_Class

New というキーワードを用いて、オブジェクトを宣言しています。この方法では、宣言されると同時に、いずれオブジェクトを生成する予定だよ! というように前もって指定しています。つまり、オブジェクトが使用される場面では、自動的にオブジェクトが生成されるようになるということです。

もうひとつの方法が、オブジェクトの型のみをあらかじめ宣言しておき、あとからクラスを割り当てる方法です。今までオブジェクト型の変数を使う際に用いていた方法と同じですね。

Dim B As Beki_Class

Set B = New Beki_Class

Set ステートメントを用いて、オブジェクトにクラスを割り当てているのがわかりますね。この Set ステートメントを用いた方法は、以前 Range 型のオブジェクト変数を利用した際に使われていた方法と同じですね。そしてこちらの方法の場合も先ほどと同様に New というキーワードが使われています。

これを見ると、 New というキーワードがクラスを割り当てることと大きく関係していることがわかりますね。このキーワードの役割は、オブジェクト変数に、そのオブジェクトの実体を割り当てることです。そして、この「実体を割り当てる」ということを俗に「インスタンスを生成する」あるいは「インスタンスを得る」と呼びます。

インスタンスとはつまり、設計図から生成された、そのオブジェクトの完成品です。クラスモジュールを用いて設計してきたオブジェクトが、インスタンスを得たことで初めて実体化します。この実体化したオブジェクトを利用することで、クラスモジュールに記述したメソッドなどを利用することができるようになるのですね。


さて、ちょっと話が逸れてしまいましたが、実際にクラスを用いた処理を見てみましょう。以下のコードは、クラス Beki_Class を用いた一連の処理、その一例です。

Sub test()

    Dim Obj As New Beki_Class
    
    Obj.Bekizan 3

End Sub

なんとまぁ、これは簡単なコードですね。

まず変数の宣言をしている部分で、Obj という変数を宣言していますね。そしてその宣言には New キーワードが使われています。もちろん、指定されているクラスは Beki_Class ですね。

変数 Obj は、Beki_Class に属しています。そしてこのクラスには、先ほど設計した Bekizan というメソッドが実装されています。メソッド Bekizan は引数として整数型のデータを受け取り、それを2乗してメッセージを表示します。つまり、上記のコードを実行すると、メッセージ『結果は 9 です」が表示されます。


ここで注目するべきは2点です。

まず1点目は「 Obj.Bekizan 3 」の部分です。
メソッドとは、オブジェクトが持っている関数です。そして、呼び出す際には、オブジェクト変数名に続けてピリオドを打ち、メソッド名を記述しますね。たとえば Range クラスには様々なメソッドがありますが、Copy メソッドなどを呼び出す際には「 Range("A1").Copy 」などと記述しますね。コードを打っている最中には、入力候補が表示され補助してくれます。

733.gif

Beki_Class のインスタンスを得ている Obj は、その恩恵を全て受けることができます。当然、メソッドなどの入力補完もキチンと行われます。これは非常に便利ですよね。

734.gif

そして注目するべき点の2点目。それはコードが実行される順序を良く知るということです。VBA にはステップイン(ステップ実行)という機能があります。ファンクションキーの F8 を押すことで、一行ごとにコードを実行することができる機能ですね。

先ほどのコードをこのステップインを用いて実行してみると、コードがどのような順序で実行されているのかわかります。標準モジュールに記述されているサブプロシージャ test() から実行が始まり、「 Obj.Bekizan 3 」のところからクラス Beki_Class のほうへ実行が移っていきます。

クラスモジュールの中では、呼び出されたメソッドが実行されます。メソッドの実行が完了すると、再びメソッドの呼び出し元へ処理が移っていきます。これは今まで、標準モジュール内に記述されたサブプロシージャなどを呼び出したときと、あまり変わりませんね。これなら別にクラスモジュールなんて使わなくてもいいんじゃねーの? とも思ってしまいます。


しかし、クラスモジュールを用いてオブジェクトを設計することで、得られるメリットがいろいろありましたね。そのことを考えれば、やっていることはたいして変わらないとしても、十分に使う意味があります。

ひとつのオブジェクトとして処理をパッケージ化することによって、デバッグの効率が向上したり、入力補完などの恩恵を受けられたりすることは非常に大きな意味があります。一見するとわかりにくいクラスモジュールも、わかってしまえばどうということはない、そういうふうに考えるといいのではないでしょうか。


■まとめ

さて、非常に簡単にですが、クラスモジュールの使い方をざっと解説してみました。案外、簡単だなぁという印象を受けたのではないかと思います。

オブジェクトには、今回解説したメソッドのほかに、プロパティやイベントといった特殊な動作や特徴がまだまだあります。クラスモジュールを用いた処理では、そういったことまで全てをカバーすることが可能です。

今回はまだ、メソッドの使い方をざっと理解したに過ぎません。まだまだ、クラスモジュールの世界は奥が深く、そして知れば知るほど面白いものです。そして、クラスモジュールの使い方を理解していくことで、ExcelVBA が元から持っているオブジェクトについての理解も深まっていきます。必ずプラスになることですから、諦めずに、ついてきていただけたらと思います。



■格言

クラスモジュールの基本を理解する
Newキーワードでインスタンスを得る
メソッドの実装方法を知る


オブジェクトとは奥深い。知るほどに、そう思います。


スポンサーサイト






Chapter.126 [ クラスモジュール:プロパティ編 ]

■クラスとプロパティ

前回は、クラスモジュールの準備とメソッドの実装について取り上げました。メソッドは要するに単なるサブプロシージャで実装でき、それほど難しい概念でもありませんでした。

今回は、前回のメソッドに続き、オブジェクトには欠かせない概念であるプロパティについてやりたいと思います。プロパティってなに? という方がもしいらっしゃったら、過去の講座などを参考に予習しておくことをオススメします。少なくとも、プロパティがなんなのかなど、そういった基本的な知識抜きでクラスモジュールは理解できません。焦らず、基本からしっかり習得しておきましょう。(参考:Chapter.74 [ プロパティ・メソッド・イベント ]

さて、プロパティとは簡潔に表現するならオブジェクトが持つ変数に他なりません。当然、クラスモジュールを用いた処理でも、このプロパティを活用することで、様々な処理を行うことができます。
たとえばユーザーフォームで考えてみると、様々なプロパティがありますね。幅や高さなどを表すプロパティもあれば、色や外見にかかわるプロパティもあります。Caption プロパティを操作すればタイトルバーに表示される文字列が変化したりもしますね。

プロパティはたしかに、役割としては変数のようなものです。オブジェクトの様々な特徴や属性を保持する役目があり、それによってオブジェクトの外見や挙動が変化します。一度設定した値などは、特別な理由がない限りは勝手に変化せず、参照すればその値を取得することができます。
しかしよく考えてみると、普通の変数とは異なる面がありますね。たとえば先ほどの例で考えると、ユーザーフォームには様々な色にまつわるプロパティがあります。BackColor プロパティを変更すると、ユーザーフォーム自体の色が変化しますね。普通の変数には、このような外見に影響を与えるような効果はありません。Caption プロパティにしてもそうです。値を設定するとユーザーフォームのタイトルバーの文字列が変化します。このような値とは別の部分にまで影響を与える効果は、通常の変数にはないプロパティ独自の機能です。

こうして考えてみると、プロパティとは普通の変数以上の特別な存在であるということがわかりますね。ただ単に値を保持することだけが、プロパティの役割ではありません。値が変更されると同時に、値とは別の部分にまで影響を与えるというケースがプロパティにはあるのですね。実は、このことを理解することこそが、クラスモジュールでプロパティを実装するうえで非常に重要になります。


■取得と設定

ひとくちにプロパティと言っても、参照のみを許すプロパティや、値の取得も設定も両方可能なものなどがありますね。この点も、普通の変数とは違いますね。
そして、ユーザーフォームの BackColor プロパティのように、値が設定された瞬間になにかしらの処理が同時に起こるプロパティがあったりします。

実は、プロパティには、値が取得される場合と、設定される場合というふたつの局面が存在します。そして、それぞれに、どういった挙動をするべきかがあらかじめ決められているのです。ですから、値が変更されると同時に外見が変化したり、表示される文字列まで変化したりする場合があるわけです。

プロパティが取得される場合には、あまり特殊なことはありませんね。ただ単に、現在設定されている値をプログラムに返してやるだけです。しかし、設定される場合には様々なケースが存在します。色を変える必要があったり、表示されている文字列を変更する必要があったり、いろいろ考えられますね。

クラスモジュールには、このようなプロパティの特性を独自に実装する仕組みがキチンと備わっています。

サブ、そしてファンクションに続く、新たなプロシージャである『 プロパティプロシージャ 』によって、この特徴的なプロパティというものを実装させることが可能になります。


Property Get プロシージャ

プロパティプロシージャには、実はふたつの種類があります。先ほどから言っているように、プロパティには取得されるときと設定されるときのふたつの場面が存在するからです。

プログラムがプロパティを取得しようとしているとき、どのような処理を行うのか定義するのが Property Get プロシージャです。反対に、プロパティが設定されようとしているとき、その動作を定義するのが Property Let プロシージャになります。
早速、それぞれの使い方を見ていきましょう。

まずは、Property Get プロシージャからです。
Public Property Get Prop() As type

End Property

上記のコードで「 Prop() 」となっている部分がプロパティ名になります。わかりやすいプロパティ名をつけましょう。そして、その後ろには As から繋がる変数の型宣言がありますね。プロパティは変数と同じように当然型を持っていますから、ここではそれを指定します。
Property Get プロシージャの場合にはプロパティの取得が行われようとしたときに自動的に呼び出されます。ですから、特別な理由がない限りは、そのまま値を渡し、取得を完了させてやります。

値を返す際には、プロパティ名にそのまま値を渡します。これは Function プロシージャなどの場合と同じですね。

Public Property Get Prop() As type

    Prop = VarProp

End Property

さて、ここでひとつ大事なポイントがあります。
プロパティは、プログラムの実行中いつでも取得できるものでなければなりませんから、当然、その値を保持するために、変数が必要です。プロパティプロシージャはあくまでも、プロパティを取得したり設定するための手法でしかありません。橋渡しをするプログラムでしかないわけですね。
値を実際に保持する変数は、必ず別途必要になります。上記の例で言うと、VarProp がその変数に相当します。そして、この値を保持するための変数は、常に値を保持するわけですからモジュールレベルで宣言します。クラスモジュールの宣言セクションで Private キーワードと共に宣言します。

'クラスモジュールの宣言セクションに記述
Private VarProp As type

ちょっとわかりにくいかもしれませんが、よく考えて理解してみてくださいね。一度、簡単に整理してみましょう。

クラスモジュールにプロパティを実装するには、プロパティの値を保持する変数(今回の例で言うと VarProp )が必要です。この変数は常に値を保持し続けるわけですから、必ずモジュールレベルで宣言します。Private キーワードを忘れずに付加して宣言するようにしましょう。
そして、プロパティの値をプログラムとの間でやり取りするために必要なのがプロパティプロシージャですね。プロパティプロシージャで指定された名前が、実際のプロパティ名になります。
先ほどの値を保持するための変数は、あくまでもクラスモジュールの内部で値を保持するために必要な変数に過ぎません。クラスモジュールの中でさえ有効であればそれでいいわけですね。外部から参照されるプロパティの名称は、プロパティプロシージャの名称で指定するわけです。この点に気をつけましょう。
また、Private キーワードと共に宣言する変数の型と、プロパティプロシージャで指定される型とが必ず一致するようにしましょう。上記の例ではいずれも type と書かれていますが、この部分が必ずリンクするように同じ型を指定するように気をつけましょう。

補足コラム:スコープ
クラスモジュールを扱う際には、変数やプロシージャのスコープが非常に重要になります。はっきり言いますが、スコープの何たるかがわかっていないうちは、クラスモジュールを本当の意味で理解できたとは到底言えません。
まず、モジュールレベルでPrivate宣言した変数のスコープは、どの範囲になるでしょうか。Private付加なら、その変数は同モジュール内でのみ有効な変数となります。つまりそのクラスモジュールの外からは参照できません。
一方で、プロパティプロシージャ自体はPublic付加で記述します。これは何故だかわかりますか? プロパティはプロジェクトのあらゆる場所から参照できなければ意味がありません。ですから、Publicなプロシージャとして記述するわけです。
プロパティを参照することは、プロジェクトのどこからでもできます。しかし、実際に値を保持している変数を直接参照して操作するのではなく、あくまでもPublicなプロシージャを介して値を操作しているわけです。
このことが実はすごく重要で、わかりにくい部分でもあります。オブジェクトとは、プロパティやメソッドなどが、ひとつにパッケージ化されたプログラムやデータの集合体です。その中身はそれぞれのオブジェクトごとに独立して管理され、外部との情報のやり取りは厳密に管理された状態であることがポイントになります。
プロシージャはPublic、中身の変数はモジュールレベルのPrivate、など、スコープの範囲がそれぞれに異なっているのも、このようなオブジェクトの概念をしっかり周到した結果なんですね。



Property Let プロシージャ

さて、続いてはプロパティが設定される場合に呼び出される Property Let プロシージャです。

プロパティが設定される際には、先ほども解説したように、値以外の部分が変化する場合があります。それを独自に実装するために Propety Let プロシージャは存在します。まずは、構文です。

Public Property Let Prop(var As type)

End Property

ベースとなる構文はこれだけです。Property Get プロシージャと、Property Let プロシージャは、双方が存在する場合には必ず対になります。ですから、プロパティ名は同じものが指定されているところに注意してください。プロパティの中には、取得だけできて設定はできないものなどが存在します。そういった場合には片方だけ(つまり Property Get だけ)が存在するケースもあります。取得も設定も両方できる場合には、同じプロパティ名にするように気をつけましょう。

プロパティが設定される場合に必要となるわけですから、Property Let プロシージャには設定されようとする値を受け取る引数がありますね。上記の例で言うなら「 var As type 」の部分がそれに相当します。この変数 var に、今まさに設定されようとしている値が呼び出し元から渡され含まれています。もし単純にプロパティの値を変更するだけでいいのなら、次のように記述すればいいでしょう。

Public Property Let Prop(var As type)

    VarProp = var

End Property

値の設定と同時に何かしらの処理が必要な場合には、ここに追記する形で別に処理を記述すればいいですね。


■まとめ

さて、ざっと解説してきましたがどうだったでしょうか。

プロパティは、メソッドに比べて実装が非常に面倒です。ただ単にサブプロシージャひとつ記述することで実装できたメソッドに比べ、プロパティはモジュールレベルの変数であったりプロパティプロシージャであったり、様々なものを利用して初めて正規に実装できます。スコープの問題などもかかわってくるため、非常に面倒臭い印象を持たれた方も多いのではないかと思います。

しかし、プロパティはオブジェクトに欠かせない概念であると同時に、オブジェクトの特性を考えたとき、やはりプロパティの実装にはプロパティプロシージャという専用のプロシージャが必要です。

補足コラムでもちょっと触れましたが、オブジェクトとはプロパティなどのデータやメソッドなどの動作が全てひとつにパッケージ化されたものです。その中身にアクセスするためには、プロパティの参照や、メソッドの呼び出しなど、適切なプロセスが踏まれるべきです。これは考えてみるとまるで意味がないことのようにも思えますね。しかしとても大切なことです。

たとえば、ユーザーフォームを複数個利用しているなプロジェクトがあったとします。プログラムから自由に各オブジェクトの中身に干渉できるとしたら、どうでしょう。コードにプロパティの名称だけを記述して値を設定したら、いずれかのユーザーフォームがランダムに操作されるような仕様になっていたのでは、まともなプログラムが書けるはずがありません。プロパティを設定する際には、必ずオブジェクト名+プロパティ名という順序で記述し、プロパティを設定するはずです。
これは、各ユーザーフォームが個別にデータを保持しており、きちんとした手順を踏まなければその中身には容易にアクセスできないような、そういう構造を持っているということに他なりません。また、このパッケージ化されたオブジェクトの特性があるからこそ、複雑なプログラムを容易に管理でき、またコードの可読性が高まっているともいえますね。

クラスモジュールでクラスを実装し、オブジェクトの設計図を書くということはまさにそういうことを自前でやっていくことと同じです。多少面倒であっても、しっかりプロパティプロシージャや、メソッドを用意してやることで、データをうまく覆い隠し、管理することができるのですね。

最初は難しい概念かもしれませんが、オブジェクトとは何か、そしてクラスとは何かということがわかってくるにつれ、自然と理解できるようになってくると思います。

まずは、今回の内容をしっかりと習得し、プロパティプロシージャとはどういうものなのかを正しく理解してください。最初はどうしても難しいことばかりだと思いますし、スコープのことなどは余計にわけがわからなくなる要因だとは思います。しかし、焦らずひとつひとつ理解していけば、必ず意味がわかってきます。そして、その利便性や、クラスモジュールを用いることの大切さも自然と理解できるはずです。

大切なことは、諦めないこと。
そして、難しいことも順を追って、自分のわかるところから少しずつでも理解していくことが大事です。ここまできたら理解せずに終わりにしてしまうのは非常にもったいないです。諦めずに、がんばってみてください。



■格言

プロパティは単なる変数以上のもの
プロパティプロシージャには2種類ある
スコープをよく理解する


非常に難しい内容でした。私の言葉が不足していないか心配です。







メールフォーム

影斬に物申すという方はこちら

名前 :
メール:
件名 :
本文 :

可能な限り要望には応えますが、必ず返信や回答ができることを、保障するものではありません。
ご了承ください。

Chapters

コンテンツ一覧


■Chapter 一覧■
    全てのChapterの一覧です。
    直接アクセスしたい方はこちらをご利用下さい。

    Chapter.1 [ 知っておくべき心得 ]
    Chapter.2 [ Excelってなんだろう ]
    Chapter.3 [ Excelの基本画面 ]
    Chapter.4 [ VBAとは? ]
    Chapter.5 [ モジュールについて ]
    Chapter.6 [ 変数 ]
    Chapter.7 [ 変数の型と宣言 ]
    Chapter.8 [ プロシージャとスコープ ]
    Chapter.9 [ ゲームつくる様々な手法 ]
    Chapter.10 [ ユーザーフォーム ]
    Chapter.11 [ プロパティウィンドウ ]
    Chapter.12 [ 乱数 ]
    Chapter.13 [ 条件分岐 ]
    Chapter.14 [ ゲーム画面のデザイン ]
    Chapter.15 [ コード記述の基本作法 ]
    Chapter.16 [ じゃんけんゲーム:1 名前をつける ]
    Chapter.17 [ じゃんけんゲーム:2 フォームの起動 ]
    Chapter.18 [ じゃんけんゲーム:3 乱数の種 ]
    Chapter.19 [ じゃんけんゲーム:4 イベント ]
    Chapter.20 [ じゃんけんゲーム:5 引数 ]
    Chapter.21 [ じゃんけんゲーム:6 役判定 ]
    Chapter.22 [ じゃんけんゲーム:7 予測と制限 ]
    Chapter.23 [ Withステートメント ]
    Chapter.24 [ 画像を表示させる ]
    Chapter.25 [ 画像表示の発展形 ]
    Chapter.26 [ 繰り返し処理 For文 ]
    Chapter.27 [ 繰り返し処理 Do~Loop文 ]
    Chapter.28 [ Exitステートメント ]
    Chapter.29 [ フォーム上の位置情報 ]
    Chapter.30 [ API基礎知識 ]
    Chapter.31 [ API補足知識 ]
    Chapter.32 [ メインループを考える ]
    Chapter.33 [ 同期処理の概念 ]
    Chapter.34 [ 移動処理その1:画面設定と考え方 ]
    Chapter.35 [ 移動処理その2:DoEvents ]
    Chapter.36 [ 移動処理その3:キー入力判定API ]
    Chapter.37 [ 条件分岐のさらなる探求 Select Case ]
    Chapter.38 [ アニメーション ]
    Chapter.39 [ 配列変数 ]
    Chapter.40 [ ゲームの初期化 ]
    Chapter.41 [ シューティングゲーム1:ゲーム設計 ]
    Chapter.42 [ シューティングゲーム2:メインプロセス ]
    Chapter.43 [ シューティングゲーム3:構造体 ]
    Chapter.44 [ シューティングゲーム4:定数 ]
    Chapter.45 [ シューティングゲーム5:プレイヤーキャラクター ]
    Chapter.46 [ シューティングゲーム6:ショットを撃つ① ]
    Chapter.47 [ シューティングゲーム7:ショットを撃つ② ]
    Chapter.48 [ シューティングゲーム8:Mod演算子の活用 ]
    Chapter.49 [ シューティングゲーム9:敵キャラクター登場 ]
    Chapter.50 [ シューティングゲーム10:衝突判定 ]
    Chapter.51 [ シューティングゲーム11:衝突の実体 ]
    Chapter.52 [ シューティングゲーム12:敵の攻撃 ]
    Chapter.53 [ シューティングゲーム13:爆発エフェクト ]
    Chapter.54 [ シューティングゲーム14:残機数表示① ]
    Chapter.55 [ シューティングゲーム15:残機数表示② ]
    Chapter.56 [ シューティングゲーム16:スコアの表示 ]
    Chapter.57 [ シューティングゲーム17:タイトル画面 ]
    Chapter.58 [ シューティングゲーム18:ボスキャラクター ]
    Chapter.59 [ シューティングゲーム19:最後の仕上げへ ]
    Chapter.60 [ シューティングゲーム20:いよいよ完成STG ]
    Chapter.61 [ カードゲームで使えるめくり効果 ]
    Chapter.62 [ ラジアンと角度 ]
    Chapter.63 [ ラジアンの活用:円運動 ]
    Chapter.64 [ ラジアンの活用:任意の角度へ移動する ]
    Chapter.65 [ APIによるサウンド再生:基礎 ]
    Chapter.66 [ APIによるサウンド再生:MIDIと多重再生 ]
    Chapter.67 [ APIによるサウンド再生:MCIコマンドとループ再生 ]
    Chapter.68 [ Function プロシージャ ]
    Chapter.69 [ 値渡しと参照渡し ]
    Chapter.70 [ デバッグ1:イミディエイトウィンドウ ]
    Chapter.71 [ デバッグ2:ローカルウィンドウ ]
    Chapter.72 [ デバッグ3:コード実行の中断 ]
    Chapter.73 [ オブジェクトってなんだ ]
    Chapter.74 [ プロパティ・メソッド・イベント ]
    Chapter.75 [ オブジェクト変数 ]
    Chapter.76 [ オブジェクトとコレクション ]
    Chapter.77 [ 特殊な繰り返し:For Each ]
    Chapter.78 [ エラー処理 ]
    Chapter.79 [ On Error と GoTo文 ]
    Chapter.80 [ Resumeステートメント ]
    Chapter.81 [ バイトとビット ]
    Chapter.82 [ ウィンドウメッセージとイベント ]
    Chapter.83 [ 文字列の基礎 ]
    Chapter.84 [ 文字列操作① ]
    Chapter.85 [ 文字列操作② ]
    Chapter.86 [ タイピングゲーム1:仕様を決める ]
    Chapter.87 [ タイピングゲーム2:キー入力検知 ]
    Chapter.88 [ タイピングゲーム3:文字列照合 ]
    Chapter.89 [ タイピングゲーム4:判定関数 ]
    Chapter.90 [ タイピングゲーム5:ゲーム画面設計 ]
    Chapter.91 [ タイピングゲーム6:問題文のソート ]
    Chapter.92 [ タイピングゲーム7:動的配列 ]
    Chapter.93 [ タイピングゲーム8:キーダウンイベント ]
    Chapter.94 [ タイピングゲーム9:正打数の表示 ]
    Chapter.95 [ タイピングゲーム10:タイムの表示 ]
    Chapter.96 [ クリックゲーム1:イベントの種類 ]
    Chapter.97 [ クリックゲーム2:画面設計 ]
    Chapter.98 [ クリックゲーム3:クリック座標検知 ]
    Chapter.99 [ クリックゲーム4:キャラクター準備 ]
    Chapter.100 [ クリックゲーム5:キャラクターの配置 ]
    Chapter.101 [ クリックゲーム6:キャラクター移動とNot演算子 ]
    Chapter.102 [ クリックゲーム7:クリックのヒット判定 ]
    Chapter.103 [ クリックゲーム8:ヒットマークエフェクト ]
    Chapter.104 [ クリックゲーム9:サウンド処理の実装 ]
    Chapter.105 [ クリックゲーム10:マウスカーソルの変更 ]
    Chapter.106 [ ブロック崩しゲーム1:仕様と概要を決める ]
    Chapter.107 [ ブロック崩しゲーム2:基本概念の確認 ]
    Chapter.108 [ ブロック崩しゲーム3:ベクトルとは ]
    Chapter.109 [ ブロック崩しゲーム4:変数や定数の宣言 ]
    Chapter.110 [ ブロック崩しゲーム5:初期化処理の実装 ]
    Chapter.111 [ ブロック崩しゲーム6:ブロックの配置 ]
    Chapter.112 [ ブロック崩しゲーム7:根幹処理とバーの処理 ]
    Chapter.113 [ ブロック崩しゲーム8:線分と線分の交差を判定 ]
    Chapter.114 [ ブロック崩しゲーム9:線分同士の交点 ]
    Chapter.115 [ ブロック崩しゲーム10:ボールの処理 ]
    Chapter.116 [ ブロック崩しゲーム11:最終調整して完成へ ]
    Chapter.117 [ テキストファイル操作基礎 ]
    Chapter.118 [ テキストファイル操作:読み込み編 ]
    Chapter.119 [ テキストファイル操作:CSV読み込み編 ]
    Chapter.120 [ テキストファイル操作:様々な読込編 ]
    Chapter.121 [ テキストファイル操作:バイナリ編 ]
    Chapter.122 [ テキストファイル操作:暗号化編 ]
    Chapter.123 [ テキストファイル操作:復号化編 ]
    Chapter.124 [ クラスモジュールとは ]
    Chapter.125 [ クラスモジュール:メソッド編 ]
    Chapter.126 [ クラスモジュール:プロパティ編 ]
    Chapter.127 [ クラスモジュール:イベント拡張編 ]
    Chapter.128 [ クラスモジュール:イベント自作編 ]
    Chapter.129 [ APIによる描画処理1:ハンドル ]
    Chapter.130 [ APIによる描画処理2:デバイスコンテキスト ]
    Chapter.131 [ APIによる描画処理3:ペン オブジェクト ]
    Chapter.132 [ APIによる描画処理4:ブラシ オブジェクト ]
    Chapter.133 [ APIによる描画処理5:図形描画準備編 ]
    Chapter.134 [ APIによる描画処理6:図形描画実践編 ]
    Chapter.135 [ APIによる描画処理7:画像描画の仕組み編 ]
    Chapter.136 [ APIによる描画処理8:ビットブロック転送編 ]
    Chapter.137 [ APIによる描画処理9:ラスタオペレーション ]
    Chapter.138 [ APIによる描画処理10:マスク描画 概念編 ]
    Chapter.139 [ APIによる描画処理11:マスク描画 実践編 ]


    コードやVBAに関する質問などはサポート掲示板(別館)までお気軽にどうぞ。




fc2 seotool Excel VBA ゲーム プログラミング 講座

Counter

twitter


Shadow BBS - 影掲示板

VBA 関連書籍



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。