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

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

初心者のためのExcel エクセルマクロVBA入門-実践:画面をデザインする

前回までのあらすじ・・・

A社ではたらいているあなた、発注担当者からの相談で、発注作業が楽にできるようにエクセルのマクロを作ることになりました。色々と要望を聞いてどんな機能が必要なのか?は大体わかった!さぁ、これからどうなってしまうのか!!!


( ゚д゚)ガチンコ?



もとい。

画面設計をしてみよう


さて、今回は前回の内容を踏まえて、必要な画面を作ってみます。この段階ではまだただの張りぼてですね。担当者の要望をもう一度載せておきます。

  • 自動でCSV在庫表を取込たい
  • 発注が必要な商品リストが見たい。
  • 商品は取引先ごとに見たい
  • 自分で数を入力して発注書を印刷したい
  • できればFAXも自動でしたい

でした。これを実現できるような画面を考えるわけですね。今回はシートをがっつり使うので、直接シートにボタンとかを張り付けて実現をしたいと思います。

まずは、自動でCSV在庫表を取り込みたいを形にしてみましょう。その為に、他にもちょっと足りない部分があります。一言で取り込みたいと言っても・・・

  • CSVファイルはどこにあるのか?(指定できる?指定しない?)
  • 取り込んだ後加工が必要か?(足りない部分を追加したり?)

等が必要がですよね。そこをもっと突っ込んで決めていきます。

画面を作ってみます。と言ってもCSVを読み込むだけですので、ボタンに名前を付けただけです。開発タブのデザインからActiveXコントロールのボタンを選択して、ペタッと付けただけですね。


f:id:drumer2sh:20140402133047p:plain


プロパティはこちらです。

f:id:drumer2sh:20140402132834p:plain


Captionという所をいじると、ボタンのタイトルになります。プロパティですから、当然VBAのプログラムで設定することもできます。こんな風に。。

btnCsvRead.Caption = 'CSV読み込みボタン'

btnCsvReadはプロパティにあるボタンオブジェクトの名前です。ボタンを張り付けると、CommandButton1とかになっているのでその名前を変えただけです。大したことはしていません。なぜこんなことをするのかというと、何度も言ってますが、

オブジェクトを正しく指定すればVBAはらくしょー


ということです。その為にこのように名前を付けているわけです。さて、今はまだボタンしかないですが、実はこんな前提を付けました。

  • 在庫CSVファイルは常に毎日同じ名前のファイルで同じ場所にある
  • ボタンを押すと毎回これを読み込んで在庫表シートに適当に整形して表示する
  • ファイルがない場合は、エラーを出して終了する

こんな感じですね。

さて、続いてこんな画面が欲しい。CSVの在庫表を取り込んだらそれを見ながら、取引先を選択すると、その取引先が扱っている商品が出てきて、発注しないといけない商品が一覧で見ることができる。発注ボタンを押すと発注書が印刷される。。。みたいな。

これを実現したいのでこんな画面にしてみました。

使えるシートやExcelの機能はちゃんと使う。


f:id:drumer2sh:20140402132837p:plain


はい、こんな感じ。会社名のところはエクセルの入力規則を使っています。入力基礎億はデータタブからできます。これで会社名の一覧があるシートのセルを設定しておけばいいのです。


f:id:drumer2sh:20140402132835p:plain


これを頑張ってVBAのコンボボックスを使ってやる人もいますが、コンボボックスを使う時は、シートにリストがないとか、本当に特別な値のみをリストとして扱いたいとかそんな時くらいです。それすらも例えばある場所にリストとして入力して非表示にしてしまえば傍目にはわからないです。実際にVBAのコンボボックスを使おうと思うとエクセルの機能を使うよりずっと難しく、そして面倒くさかったりします。エクセルを使ってできることはエクセルでやってしまうことです。

※実際に私がコンボボックスを使うのは以下の条件の時です。

  • シートにリストを保持できない
  • リストが毎回動的に変わる値をリストとして扱う

この2つがある時はコンボボックスを使います。

後は適当な発注書のテンプレートですね。ここに必要な情報入力して、自動で印刷すればいいのです。こんな感じでしょうか?ざっくり過ぎですが、後は自分好みのテンプレを使えばいいんです。


f:id:drumer2sh:20140402132832p:plain


さぁこれでざっくりとしたいわゆる設計的なことが終わりました。きっとここまででも、実際の発注をする人から発注書のテンプレートはこんな風にしてほしいとか、色々と要望を受けながら作っていくことになると思います。

さて、次からはどんどん作ってみましょう。次はCSVの読み込み・・・・?ではなく、いきなり発注書印刷から作ります。

VBAブログでここまでソース書かないのも珍しいですな。。。。

まぁ、でもこれも結構楽しいですよね。


※おまけ
本当はユーザーフォームを使ってかっこよくですね。スプレッドシートを使って実現してみようとか思ったんですが、2007からスプレッドシートはなくなってしまいました。何でだよ!MicroSoft!見た目重視のユーザーフォームでスプレッドシートは結構使えたのになぁ・・・残念とか思ってたのですがよく考えればエクセルにはシートがあるんだからそれを使えよってことなんですよね。きっと。そんなわけでこんな感じになりました。


今日はここまで!


かしこ