作業は、シートのAからC列に入っていますね。これを見やすい形でリストにします。作業番号は半角4文字なので、全部で6文字分でいいと思います。顧客は全角5文字なのですが、余裕を見て10文字になります。内容も2文字なのですが、実際は10文字くらい入っていた方がいいと思います。いうことで、それぞれの文字の長さを揃えます。揃えるには左からの文字数を規定できるLeft関数を使います。今回は単なる文字数ではなく半角の文字数で指定するのでLeft関数になります。その文字列に規定したい文字数と同じ長さの空白を足して、それの左から既定の文字数を取り出せば、すべて同じ文字の長さにできます。この詰め物をすることをパディングと言います。タブ揃えみたいなものですね。3行目からA列の入力されているセルの数の分、ループすればいいので、次のようなVBAになります。(<作業の内容>)Nextループは回数なので単純に数字ですのでiという変数でLong型にしています。作業の内容は3項目あり、それぞれ文字数を規定しなければならないので、素直に書くと次のようになります。10)これでは見づらいので、次のように_で行を分けて表記します。1行が長くなるときはこれで分割できるのですね。これを先ほどの日付のVBAの下に記述します。最後の社員ですが、これもシートのE列に入っているものを使うので、3行目からE列にデータの入っているセルの個数の回数、ループします。ループ回数はiがすでに数字として宣言してあるので流用します。i).Value)Next作業ではセルを参照するのにCellsを使いましたが、今回はRangeで指定しています。どちらでもよいと私は考えますが、今回、私は、作業は3項目あるので、それもA列から指定できるので1,2,3の数値で指定したほうがわかりやすいのではないか、とくにループをするのであれば座標で指定できるCellsがいいと思いCellsで指定しました。社員は必ずE列を見るということを明示したかったので、本来ループなのでCellsを使いたいところですが、明示したいことの方が勝っているような気がするのでRangeにしました。他人が見てわかりやすいというのが一番だと思うのですが、統一したほうがいいという考えもありますし、このあたりの選択は難しいので、その時の判断によると思います。このVBAを作業の下に入れます。※↑社員のところのループの始まりは2になっていますが3が正解です。これでアイテムを入れるところは完了です。実際に動かしてみましょう。作業が揃うようにしたはずなのに、揃っていません。社員が複数選べません。この2つを修正します。作業が揃っていないのは、フォントが等幅フォントになっていないからです。すべてのボックスを選択して、プロパティのFontをMSゴシックに変更します。ひとつ、社員は、これもプロパティで、MultiSelectを1-fmMultiSelectMultiを選択します。この、MultiSelectなんて設定があるかどうかもわからない、どうやって探したらいいのかわからない、探せたとしてどの設定を選べばいいかわからないという方は、こういう方法はいかがでしょうか。落ち着いてプロパティを上から順に探します。それらしいものを見つけたら、その設定値も何が選択できるか見てみます。見当違いのものであれば設定値も見当違いのものが出るでしょう。私自身、それで見分けていきます。基本は英語なので、時に和英辞書を片手に探すこともあります。あとは略語になっている場合もあるので頭文字などでも想像します。これで動作して、うまくいったことを確認しましょう。(作業のところは結局うまく揃わないので、左からの文字数を調整する必要があるかもしれないです)一旦×ボタンで閉じましょう。ユーザーフォームの値をセルに登録するではいよいよ、登録ボタンをクリックしたときの動作を作成します。フォームの登録ボタンをダブルクリックします。登録ボタン_Click()が現れます。Subの間に登録ボタンをクリックしたときの動作を書きます。社員が複数いたら社員の分書き込みます。いうことは、選択されている社員の数だけループします。日付はフォームで選択された日付をそのまま入力すればいいので、日付のValueで読み込めばよいです。作業は、コードで記録します。作業コードはフォームで選択された作業の左から6文字なのですが、空白が入っているので、Left関数で6文字切り出して、余計な空白を削除するTrim関数で処理します。社員は、ちょっと大変です。原理がわかれば簡単です。ように複数入ることはできません。登録されたアイテムの上から順番にSelected(0)からにTrue、Falseで入っていきます。Trueが選ばれているものです。社員の上から2番目、4番目、7番目が選ばれていると、社員.Selected(1)、社員.Selected(3)、社員.Selected(6)がTrueで他の社員.SelectedはFalseになります。一つ抑えておきたいのは、リストボックスに登録されているアイテムは上から順にList(0)からに値が入っているということです。アイテムの個数分、Selectedを調べていってTrueの時に、そのListの値がセルに書き込むべき社員名ということになります。アイテムの個数分のループをします。アイテムの個数はListCountでわかります。順番は0から始まるのでループの始まりも1からではなく0から、その分、ListCountから1を引きましょう。1NextこのForとNextの間に判定とセルに書き込むものを書いていきます。その判定式は次の通りです。書いてもいいのですが、省略しています。これはIfの書式はこういうことができるからなのです。普通のIfの構文は次の通りですよね。If真の場合=Trueだったら、なのです。Trueを省略できるのです。成立している=Trueそのものなのですから。Ifの間の処理を考えていきます。今、G列に入力されているセル数の次の行のG列に日付、H列に作業の頭6文字の空白を除いたもの、I列に社員のListの今の順番iのものを入力するということになりますので、まずは、今入力する行を変数rに求めましょう。rは行数なので、Long型にします。1そしてそれぞれを入力するところを作っていきます。作業指示.社員.List(i)変数名iとrをLongで宣言して終わりです。実際に動作させて登録されるかやってみましょう。おわりに今回は私なりにVBAのフォームで便利なものを作る方法を比較的初心者の方にも楽しく学んでいただけるように丁寧に解説しました。この操作は1回だけやっても身につきません。何度も繰り返し練習しましょう。私は大体45分で作成するのですが、2回目は20分、3回目は15分と短くなっていきます。手順を丸暗記でもいいので、何も見ずにできるようにしておくとスキルアップにつながると思います。本当に何も見ないでできるようになったら、それぞれの意味をもう一度読み直すと良いでしょう。Officeの魔法使い。仙台市在住のフリーランスのパソコンインストラクターです。1969年1月生まれ。Excelを黎明期から30年近く使っています。出版社様と一緒にExcelの情報発信もしています。2020年は令和時代のExcelの使い方と教え方を勉強しています。Twitterでも業務で使える便利なOffice技をめっちゃつぶやくツイッタラーです。コメントをキャンセルメールアドレスが公開されることはありません。