VBAでユーザーフォーム-5マクロ登録|エクスプローラを使いコードを書く場所を確認

お知らせこの記事はVBAでユーザーフォームの関連記事です
ユーザーフォームは何処にコードを書くのか?
いよいよコードを書く事になりました。今まではユーザーフォームとはどんなものなのかを勉強してきました。
フォームを用意、シートを用意するという様に環境の外堀部分の勉強をしてきた次第です。
今回の記事では内堀の勉強に入ります。実際に コードを書いてフォームに動きを持たせていきます。
ここで一度立ち止まって考えてみましょう。フォームを作ったもののどこにコードを書けば良いか分かりますか?
すぐ分かる人は良いのですがフォームとコードの関係性がボヤっとしたままの方も多い事でしょう。

いつもはVBEで標準モジュールを用意してからコードを書いています。
ユーザーフォームはコードをどこに書くのでしょうか?
結論としては「フォームが持っているコードを書く領域にコードを書く」という事になります。
以降で解説していきます。
前回記事
前回記事はこちらです。


関連書籍
私はこちらの書籍でユーザーフォームを勉強しました。
事例を使って機能を紹介してくれるので非常に分かりやすいです。


電子書籍はこちらです。私は電子書籍をおすすめします。圧倒的に取り回しが楽だからです。
本記事での課題
今回の課題です。



課題:
プロシージャを用意する方法について理解しよう
コードはどこに書くのか?
「そもそもフォームを使う際はどこにコードを書くんですか?」これについて回答していませんでした。
解決させないと進めないと思いますので解説していきます。
実はシリーズ内で少し触れているのですが再度回答します。
「フォームにコードを持たせます」というのが回答です。
「どこに?フォームに直書き?」・・・半分ぐらいは当たってます。
確かに直書きなのですが書く場所はフォームというモジュールがもつコードウインドウです。
フォームが持っているコード画面を表示
まずは以下画像を確認ください。
フォームを作っている時にフォームをダブルクリックしてしまった方。こちらを見てください。
VBEに以下のような文字列が出てきた事がありますよね。


いわゆるコードウインドウですがこれがフォームが持っているコードウインドウです。
シートもセルが並んだ画面とコードを書く画面を持っていますよね。
同じようにフォームもフォームとしての顔とコードを書く画面を持っています。
続いてプロジェクトエクスプローラを見てください。
フォームオブジェクト(最初はUserForm1となっています)を右クリックしてみます。
その後「コードを表示」、「オブジェクトを表示」・・・という選択肢が並ぶウインドウが表示されます。


- 「コードの表示」を選択するとフォームが持つコードウインドウが表示されます。
- 「オブジェクトの表示」を選択するとフォームの外観が表示されます。
ここで外観であるフォームのデザインと裏側であるコードの画面を切り替える事が出来ます。
フォームオブジェクトはコードを書く領域を持っているという事が分かります。
フォームのコントロールからプロシージャを作る
では「オブジェクトを表示」でフォームを表示させてみます。
その後コマンドボタンをダブルクリックしてみましょう。
フォームでは一番下にある「登録」というボタンの事ですね。


Private Sub btn1_Click()
End Sub
VBコードウインドウが立ち上がり上記コードが表示されたはずです。
btn1と記載されているのはフォームを作った際コマンドボタンに着けたオブジェクト名です。
ここが違っているとご自身が付けた名前になっているはすです。ご確認ください。
各コントロールはダブルクリックするとプロシージャが作成される様になっています。
対象のフォームのコードウインドウ上に自身のイベントと連動したプロシージャを用意してくれます。
用意したクリックイベントの中にコードを書きましょう。
これでコマンドボタンをクリックした際に実行されるコードを用意することが出来ます。
基本はクリックというイベントに連動したプロシージャを用意してくれます。
もちろん変更も可能です。VBEの上部で選択、表示が可能です。


ここではbtn1のダブルクリック(DblClick)というイベントを作ってみます。
上の画像で紹介したコンボボックスからダブルクリックを選択してみましょう。
Private Sub btn1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
End Sub
VBというコードが表示されます。
このようにイベントに連動したプロシージャが作成出来ます。
最初はフォームから各種コントロールをクリックしてプロシージャを作った方が分かりやすいです。
まずはこの方法でやってみてください。
慣れてきたら他のイベントでもコードを用意していただけるとこの辺りの建付けが分かってきます。
今回は初級編ですので深く勉強しません。最短距離で次に進みます。
コードを書く際のポイント
フォームにコードを書く場所があるのは分かりました。続いてコードを書いていきましょう。
しかし「実際どうやって考えるの?」と思って手が止まって・・・というのが想像されます。
一緒に考えていきましょう。結論としてはこれだけです。
手作業でどうやるかを書き出した後作業をコードに置き換える
シンプルです。これしかないです。もう少し掘り下げてみます。
手作業でやるにはどうするのかを考える
疑問に答える為まずはどうやったらフォームの情報がシートに展開出来るのか考えてみましょう。
この段階ではコードの事は考えず手動でやったらどうなるのかを考えてみましょう。
- フォームが用意されたワークブックを起動させる
- フォームへ必要な情報を選択、入力する
- 情報を受ける側のワークブックを開く
- フォームで選択した車種のシートを開く
- 入力されたセルの最終行を確認
- 最終行の1つ下のセルにフォームの情報を貼り付ける
- 情報を受ける側のワークブックを保存して閉じる
- フォームが用意されたワークブックに戻る
手作業でやるには・・・と考えた理由
そんなことより早くコード教えろ・・・という方が大半でしょう。
その前になぜ「手作業でやったらどうなるのかを考えたのか」について理由を説明しておきます。
手作業やアイコンでやってる作業はほとんどVBAで置換可能だから
手作業でどうやってやるのか考える事さえ出来ればOKです。イコールでVBAに置き換え可能という事です。
あとはコードの書き方を考えるだけです。
私はVBAを教えているので「コードの書き方が知りたいんですけど・・・」という質問をよくいただきます。
そんな方にはまず「手作業でやったらどうするつもりだったのですか?」と聞いています。
ほとんどの人が答えられません。
つまりはコードが・・・という話ではなく実は構想が決まってない事の方が多いです。
構想が決まっていれば「〇〇したいのですがどうやってコードを書きますか?」という質問になりますよね。
裏を返せばこういった質問をされる人はコードが書けるようになる確率が高いです。
まとめ
今回はどこにコードを書くのか?何を手掛かりにコードを書くのかを勉強してもらいました。
次こそ本当にコードを書いていきましょう。
ボタンだけじゃなく他にもコードを書かなければいけない要素があります。
現在進捗率は60%程です。あと2~3回ぐらいでまとめる様に記事を用意します。
初心者向けエクセルマクロ学習シリーズほどではないのですが少し長くなってきました。
出来るだけ簡潔に書きつつ内容も薄くなりすぎない様気を付けていきます。

