【VBA学習】VBAで予約管理システムの作り方

  • このエントリーをはてなブックマークに追加

前回、これまで学んできた事を使って旅館の予約管理システムに挑戦してもらいました。

うまく作れたでしょうか?

ここで作り方を解説するので、うまく作れた人も作れなかった人も確認してみましょう。

■前回の記事はこちら

【VBA学習】VBAで予約管理システムを作ってみよう

旅館の予約管理システムの作り方

まずどんな機能が必要だったかおさらい

今回作ろうと思っていた予約システムで実装したかった機能はざっくり以下の通りです↓

■機能

・新規の予約を追加できる

・1部屋ずつ予約状況を確認できる

・新規の予約を追加するとき、既に予約が入っていた場合「既に予約されています」とメッセージを出して予約できないようにする。

 

■レイアウト

 

では、さっそく作ってみます。

 

1.マクロとなるメイン関数を作る

まずはボタンを押したときに実行させる関数を作っていきます。

最初の処理として、予約日と部屋番号をシートから取得してくる処理を追加しておきます。

 

「Range(“セルの座標”).Value」で、特定のセルの中身を取ってこれるんでしたね。

これで、入力された予約日と部屋番号を取ってこれました。

 

ここまで作ったら、この「YoyakuMain」という関数をボタンに実行させるマクロとしてセットします。

 

ボタンにセットしたこの「YoyakuMain」という関数がメイン関数になります。

ボタンが押されると、まずこの関数の処理がスタートするようになります。

 

2. 取得した予約日・部屋番号を元に管理表に○を付ける処理を作る

次は、予約管理表の、取得した予約日と部屋番号のセルに「予約が入っている」という意味の「○」を付ける処理を作っていきます。

 

前回のヒントでも解説しましたが、予約管理表を確認してみると、G列に日付、2行に部屋番号の情報が入っています。

さらに、部屋番号は1~5まであり、それぞれ下のように分けることが出来ます。

部屋1:2行目以降のH列

部屋2:2行目以降のI列

部屋3:2行目以降のJ列

部屋4:2行目以降のK列

部屋5:2行目以降のL列

 

この列と行の取得方法はこのように考える事が出来ます。

 

■入力させる「列」の取得方法

この処理は、取得した部屋番号「YoyakuLoom」の値をもとに、select case文で値ごとの列文字を変数「Col」にセットしています。

 

■入力させる行の取得方法

 

こっちは少し厄介です。

列は5列しかなかったので、select case文を使って取得することが出来ましたが、行(日付)は30行以上あります。

今は1カ月分の日付しか表示していませんが、半年とか1年分表示させたかったらselect case文ではあまり実用的ではありません。

コードを沢山書かなければならないし、日数が増えたらさらにコードを書き足さないといけないからです。

 

こんな時は、FOR文While文のような繰り返し処理を使って取得します。

 

FOR文は、繰り返す数が決まっている場合にのみ使えるため、今回のような表示させる日数が今後増えたり減ったりする場合は不向きです。

 

なので、今回はWhile文を使って行の取得をしていきます。

 

Whileの中では、IF文で2通りに分岐しています。

1つは、現在のDateListの中身と取得してきたYoyakuDateの中身が一致した場合、そのDateListの行をRowに詰め込んで、行を取得しループを抜ける処理。

 

もう1つは、DateListの中身と取得してきたYoyakuDateの中身が一致しない場合は、DateListの中に次の行の日付を入れてもう一度ループさせる処理。

 

これで○を入力させる行も取得できました。

 

最後に取得した行と列を繋ぎ合わせれば、○を入力させるセルの場所が完成します↓

Range(Col + Row).Value

 

これらを元に作ったのがこちらのコードです↓

実行したのがこちら↓

 

うまく管理表に○が追加されている事が分かります。

 

3. 新規の予約を追加するとき、既に予約が入っていた場合「既に予約されています」とメッセージを出して予約できないようにする

ここまで来れば、この機能の追加は非常に簡単です。

○を入力する処理の前にIF文で既に○が入力されていないかチェックしてあげればいいだけです。

入っていれば、処理を分岐させてこのメッセージを表示させます。

 

実行したのがこちら↓

 

お疲れさまでした。以上が、予約管理表の作り方でした!

自分で作ったものが、私の作り方と全然違ったとしても問題ありません

人の数だけ作り方があるのです。

 

おまけ 予約キャンセル機能

前回の記事で、「予約キャンセル機能」に挑戦した人向けの解説です。

予約キャンセル機能は、ざっくり言うと予約の「○」を消せる機能です。

この機能を追加するには、まずシートデザインを少し変えなければなりません。

 

新たに「タイプ」という入力項目を追加しました。

ここに「予約」か「キャンセル」のどちらの機能を使うか記入します。

 

そして、キャンセル機能を追加したのがこちらのコードです↓

一応開設すると、単純に「タイプ」に入力された文字によって処理をIF文で切り分けています。

この程度の予約管理表なら手で打て!って感じもしますけどね笑

 

まとめ

これで、VBAの基本講座は終了です。

もうすでに簡単なシステムであれば、発想次第でなんでも作る事が出来るはずです!

 

しかし、「クラス」「オブジェクト指向」「フォーム画面」「インスタンス」などのように、VBAにはまだまだ沢山の機能が備わっており、いずれ必要になってきます。

 

今後も、定期的にVBAの解説をしていこうと思うので、このブログなどを使ってしっかり学習を続けていくようにしましょう

 

最後に、ここまでの学習お疲れさまでした!

また、ご覧くださりありがとうございました!

 

追記

While DateList <>

の箇所でコンパイルエラーが出てしまうというコメントを頂きました

恐らく、<>がエスケープされて&lt;&gt;と表記されていましたので、それによるものかと思います!

大変申し訳ありませんでした!

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメント

  1. 井谷久隆 より:

    こちらのページを参考にしている者です。
    While DateList <> “”
    の部分でエラーが起きるのですがどうすればよいでしょうか。

  2. ここちゃん より:

    While DateList <> “”

    がコンパイルエラーになってしまいます。

井谷久隆 へ返信する コメントをキャンセル

*