魔王の憂鬱 -2ページ目

魔王の憂鬱

情報通信っぽいことを、分かりやすく述べているつもりです。

まだご紹介していない機能は多々ありますが、

今回でマクロ編を閉めようかと思います。



・ファイル出力

せっかくExcel内でデータをいじれるようになったので、

これを別のファイルに出力してみましょう。


順番としては

「1、ファイルを開く」

「2、ファイルに書き込む」

「3、ファイルを閉じる」

となります。


流れは分かりやすいのですが記述方法が独特ですので、

とりあえず書いてみて動かしてみて覚えていきましょう。



1、ファイルを開く

・・の前に、下ごしらえをしなければなりません。



Dim fileAddress as String

fileAddress = C:\test.txt



/* fileAddressには、作成するファイルのアドレスに加え、

ファイル名および拡張子まで指定します。

存在しないアドレスを指定するとエラーになりますよ。 */



Dim fileNo as Integer

fileNo = FreeFile



/* これはコンピュータ側の都合なのですが、

ファイルを扱うときに専用の番号を指定しておきます。

占有することで、処理中に他のプログラムによる

介入を妨げます。 */


/* 現在どの番号が空いているのかなんてイチイチ設定して

いられないのですが、「FreeFile」と記述すると、

空いているファイル番号を勝手に指定してくれます。便利ですね。 */



改めて、

1、ファイルを開く


Open fileAddress For Output As #fileNo


/* Open 出力ファイルアドレス For 記述形式 As #ファイル番号 */


/* 出力ファイルアドレス、ファイル番号については上記の通りです。

ファイル番号の前に「#」を記述するのを忘れないでくださいね。 */


/* 記述形式とは、ファイルへの書き込み方法の事でして、

「Output」で上書きモード、「Append」で追記モードを指定します。 */



2、ファイルに書き込む


Print #ファイル番号, 記述内容


/* もう一般系の記述で書いてしまいますが、

どのように書くかは大体理解いただけるかと思います。

「#」と「,」を忘れないで! */



3、ファイルを閉じる


Close #ファイル番号


/* 説明省略 */



・・と、これがファイル出力の一連の流れとなります。





では問題。


Open example1 For Output As #freeFile1

Print #freeFile1, "これは"

Print #freeFile1, "問題1です。"

Close #freeFile1


Open example2 For Append As #freeFile2

Print #freeFile2, "これは"

Print #freeFile2, "問題2です。"

Close #freeFile2


さて、example1とexample2には

それぞれ何が記述されているでしょうか?










もちろん、










どちらのファイルもテキストとして正常に出力されているとします。










それでは答えです。










答え

example1 : これは問題1です。

example2 : これは問題2です。


思いっきり引っかかっていただいた方、ありがとうございます。

記述方式に関わらず続けて記述されるのですよ。


じゃあ何が違うのかといいますと、

既に同ファイルが存在していたときの扱いが異なるのです。


Open example1 For Output As #freeFile1

Print #freeFile1, "これも"

Print #freeFile1, "問題1です。"

Close #freeFile1


Open example2 For Append As #freeFile2

Print #freeFile2, "これも"

Print #freeFile2, "問題2です。"

Close #freeFile2


これをさらに実行した場合、


example1 : これも問題1です。

example2 : これは問題2です。

       これも問題2です。


・・とまぁ、このように処理される訳なのです。




まだまだ初歩の初歩ですが、

とりあえずマクロは一旦キリをつけましょう。


次回は今のところ未定ですが、

特に思い浮かばなければテストツールの話でもします。


今回はモジュールを使ったマクロの構成についてご紹介しましょう。


さっそく、マクロの編集画面を開いてください。


プロジェクトウィンドウにて右クリック ⇒ 挿入 ⇒ 標準/クラスモジュール

魔王の憂鬱


と、このように追加するのですが、

ユーザーフォームは今回は気にしないでいただいて結構です。



そうですね、今回も「HelloWorld」を出力するマクロを例にしてみましょうかね。

[ str ] という文字列に "HelloWorld!" を設定し、

メッセージボックスで [ str ] を出力するという内容です。



・まずは一つのモジュールに全て記述するパターン

魔王の憂鬱


あ、Module2 に書いてしまった;



マクロソースとしては、かなり分かりやすい内容かと思います。

解説は大丈夫ですね。



・続いて、処理を別関数から呼んで実行するパターン

魔王の憂鬱


メイン関数を実行すると、その中で [ HelloWorld ] を呼び出します。

これもまぁ、特別難しいことではないかと思います。



ここまではいいのですが、問題はここからです。

マクロの規模が大きくなると縦に長ったらしいプログラムになってしまい、

[ call ] 先の特定に時間がかかるなど管理が面倒になります。


そこで用いるのが「標準モジュール」なのです。


「標準モジュール」で記述されたマクロソースは、いくつに分かれていようが

一つの「標準モジュール」として扱うことができるのです。



まぁ聞くより見た方が早いかもしれません。

魔王の憂鬱


メイン関数を [ Module1 ] に移しました。それだけです。

それだけなのですが、これが非常に重要な事なのです。

例えば

[ Module1 ] ⇒ [ MainModule ]

[ Module2 ] ⇒ [ HelloModule ]


とでもモジュール名を変更しておけば、

どのモジュールにどのような関数・・メソッドと呼んだ方がいいですかね?

どのようなメソッドが宣言されているのかをすぐに判別できるのです。



なんとまぁ便利な機能なのでしょう。


続いて「クラスモジュール」です。

Javaに慣れていないと少し複雑に見えますが、

まぁ見ててください。


[ Module2 ] に書いたソースを「クラスモジュール」にコピーします。

ついでにモジュール名も変更します。



以上の下ごしらえを行ったものが、下図に用意してあります。

魔王の憂鬱


アルファベット順に並んでしまい、メインモジュールが下側にきてしまいました。



ここまでの流れは同じですね。

マクロのソースは同じ。違うのはモジュールの種類だけ。


ただ、クラスモジュールに記述されたこの [ HelloWorld ] は、

このままではまだ使うことができません。


流石に全てが同じだと厄介ですので、

クラスモジュール側は [ HelloWorld2 ] としておきます。


それを踏まえまして、メインモジュールから [ HelloWorld2 ] を呼んでみます。


まずはクラス型の変数を用意します。魔王の憂鬱

ちなみに変更したクラスモジュールの内容↑


メイン関数に [ Main2 ] を追加しました。この中で

[ maou ] という [ HelloClass2 ] 型の変数を宣言しました。


まぁこれだけなのですが。

一応 [ HelloWorld2 ] を呼んでみましょう。


こうなります

魔王の憂鬱


面倒になってきたので並べて載せましたが、

クラス変数となった [ maou ] さんは「.(ドット)」を打つ事によって

自身にある使用可能な関数を自動で表示してくれます。


そして設定したのが上図下側のマクロソースです。



[ Main ][ Main2 ] それぞれを実行すると・・

魔王の憂鬱


このように!それぞれ呼び出すことができました。



標準モジュールの使い方は"C言語"

クラスモジュールの使い方は"Java"


お好みのほうをどうぞ

さて、前回までのマクロで

「シートの選択」「セルの選択」「入力値の入力/出力」を学びました。

「文字列/値のコメント出力」も学びました。



そろそろマクロっぽい仕組みを作ってみましょうか。

という訳で、今回は「ボタン」を作ってみましょう。

ボタンの配置は「フォーム」より行います。


王道のRPGっぽい流れになっていますが、

手順は以下の通りです。



「ボタンを押してマクロを実行」

「ボタンに対応するマクロを登録」

「フォーム:ボタンを配置」

「フォームコントロールの表示」



それでは順を追って作っていきましょう。


「フォームコントロールの表示」

・Excel 2010 の方は開発タブの「挿入」をクリック

 開発タブはマクロ作成のために表示設定してあるはずですね。


・Excel 2003 の方は以下の画像を参照に表示設定させます。

 表示 → ツールバー → フォーム

魔王の憂鬱


「フォーム:ボタンの配置」

フォームコントロールよりボタンを選択します。

ポインタが[ + ] となりますので、ドラッグして枠を作りましょう。

この枠の位置/大きさがボタンの位置/大きさになります。

位置も大きさも後からいくらでも変えられるので、今回は適当。


魔王の憂鬱


「ボタンに対応するマクロを登録」

場所を決めたらそのままマクロ登録ウィンドウが表示されます。



魔王の憂鬱


ここには作成されたマクロの一覧が表示されます。便利ですね。

この中で選択されたマクロが実行されるのです。



「ボタンを押してマクロを実行」

説明するまでもないので省略


代わりに各種設定方法など


・ボタン名

ボタン上で右クリック → テキストの編集

魔王の憂鬱


・実行マクロ

ボタン上で右クリック → マクロの登録


・ボタン位置/大きさ

ボタンの外枠をドラッグ


「(動かせないよ?)」という方は、一度ボタン上で右クリックをして、

ボタンの外枠に上記画像のような太点線を表示させてみてください。




できましたか?

このようにボタンでマクロを動くようにさせておけば

マクロの内容や、マクロそのものを知らない人でも扱えるようになります。


ボタン連動ができるようになると一際マクロが楽しくなってきます。頑張りましょう