コメントを残すVBAのフォームを使って作業指示を簡単にするExcel、Excelマクロ、VBA営業リーダーがスタッフに対し、翌日の指示をすることがよくあります。その指示を出す時、1つの営業先に対し、複数の人に指示するとき、一人一人にメールを手書きで書くのは大変で、一覧の画面でどのスタッフにどの営業先への指示をするかを一度に設定できると効率いいですよね。これは、どんな作業でもリーダーから翌日の作業する指示を出すというシチュエーションで共通して言えることです。そんな時に使えるツールを作りながら、ExcelVBAのフォームの作り方の初級編を紹介します。VBAのフォームVBAのフォームとは、次のようなものです。これは最も簡単なフォームで、文字を入力してOKボタンが押せるだけのものですね。意外と作成するのは簡単なので、ポイントを絞ってお話していきましょう。今回作成するのは、次のような仕組みです。作業一覧があって、社員一覧があって、指示する日付、作業を選択し、それにあたる社員をクリックして選んでいき、OKボタンをクリックすれば一覧表に反映します。複数人数が担当する場合には複数人数分、行が増えるわけですね。準備でははじめの準備ですが、次のようにExcelに入力します。入力が大変なら作業数と社員数は3つくらいでよいです。作業一覧と社員の一覧はテーブルにしてもよいと思います。(しなくても今回の練習はできます)VBE起動Altキーを押したまま、F11キーを押し、VBEを起動します。挿入メニューの中のユーザーフォームをクリックすると、ユーザーフォームが作成されます。ユーザーフォームに名前を付けるユーザーフォームには名前を付けましょう。名前をつけていないと管理しにくくて仕方なくなります。名前は、フォームを右クリックしプロパティをクリックすることで表示されるウィンドウの「(オブジェクト名)」欄に入力します。私は、私自身が認識しやすいので、いつも名前は日本語で入力していますが、VBAをプログラムしていて名前をCtrl+スペースキーなどで呼び出しやすく、やりやすいのは実はアルファベットです。ご自身のやりやすい方で名前を付けてください。名前設定のついでにタイトルに表示する文字も変えてしまいます。Captionで設定します。今回は「作業指示」とします。これでフォームの枠は完成です。部品を入れるではフォームに部品を入れていきましょう。今回は、ドロップダウンで日付を選択、同じようにドロップダウンで作業内容をまとめたものから選択、社員の一覧からどの社員がその作業をするか複数選択できるようにしたものから選択の三つのボックスがあります。それぞれ作成していきましょう。日付のボックスですが、コンボボックス挿入します。コンボボックスはツールボックスの中にあります。それをクリックし作業指示のフォーム上をドラッグしフォーム上にコンボボックスを配置します。コンボボックスのような部品にもすぐに名前を付けましょう。私は日付と名前を付けました。同様に、作業のコンボボックスも作成します。次はラベルを作成します。ラベルはそのボックスが何かを表す文字です。これもツールボックスにあります。ラベルのオブジェクト名は私は慣れないうちは付けていたのですが、実際にはあまり意味がないので最近は付けていません。右の方に社員の一覧表を表示したいので、フォームを広げます。普通に四角形の図形を大きくするようにフォームの右下のポインタを広げれば大きくなります。広げたところに社員の一覧を作ります。社員のラベルを作ります。次にリストボックスを作ります。リストボックスはドロップダウンする内容がすべて表示されているようなボックスで、単一選択の他に複数選択する時にも使えます。リストボックスもツールボックスの中にあります。これをフォーム上で、ドラッグして配置します。オブジェクト名は「社員」にします。最後にOKボタンを作成します。ボタンは、キャンセルでもOKでも、ツールボックスのボタンを使用します。フォーム上に配置します。文字を「登録」にしましょう。オブジェクト名は「登録ボタン」にするとよいでしょう。ここまでで部品の登録は終わりです。フォームを表示するフォームを表示するには、VBAでフォームを表示する命令をしなければなりません。VBEの挿入で標準モジュールを挿入します。この右側のウィンドウに、フォームを表示するプログラム(マクロ)を作っていきましょう。マクロ名は「作業指示開始」とします。Subの間に書きます。フォームの表示は、フォーム名.Showです。今回は作業指示.Showです。このマクロを呼び出す四角形をExcelシート上に作成し、マクロ「作業指示開始」を登録します。その四角形をクリックするだけでフォームが表示されます。部品の中身を作成する今のところ、部品があるだけで、その内容はそれぞれの部品には入っていないので、選択できません。それそれ項目を入れていかなければなりませんが、その項目一つ一つをアイテムと呼びます。アイテムは設定するというより、追加する、という感じです。部品名.AddItem(追加するもの)と指定します。追加はいつでも行えるのですが、まずはフォームを開いたときにあると良いでしょう。作業指示のフォームをダブルクリックします。右側にフォームが表示されるので右クリックしてコードの表示をすると、そのフォームに対して行えるプログラムを書く画面が表示されます。はじめ、UserForm_Click()になっています。これはフォームをクリックしたら始まるマクロという意味です。今回は、フォームが表示されたときに動くマクロにしたいので、ClickをActivateに書き換えます。Activateが表示された時、ということになります。Sub間にVBAを書いていきます。日付ですが、本日より7日後までの日付から選べるようにします。今日から今日より7日後までのループをしてアイテムを追加していきます。"yyyy/mm/dd"))Next日付をループするのにdという変数を使います。日付型の宣言をします。実際にボックスに入れるのは、見やすい日付形式のものにするので、Format関数で年月日の形式にしています。そのままExcelにも入力できる形ですね。実際にExcelシートからフォームを表示してみましょう。本日の日付から7日後までがリストされました。