入荷情報の書き込み

発注を行った後、発注済み商品の入荷の情報を書き込ませるようにいたしましょう。
入荷情報の入力項目を簡単ですが「入力日時」、「受入日」、「備考」、 「担当者名」とします。
1.今回は、コントロールの「ListBox」を組み込んで説明を行ないます。
 リストボックスのプロパティは、前述しましたコンボボックスとほぼ同じ特性を持っています。
1)プロパティの「RawSource」の読み込み元の表の作成を行ないます。
①「設定」シートに下図のように2つの表を作成します。図3
②各表に名前を付けます。
 名前の付け方は前に説明しましたとおり「数式」→「名前の管理」→「新規作成」で行います。
名前をそれぞれの表の名前を「商品仮置き」、「未受入品発注番号」とします。
「名前の管理」画面に次のように追加されます。
図13
2)各表の働き:
①「未受入品発注番号」表:
 「記録一覧」シートを検索して見受け入れ品(受入日の欄が空白)の発注番号をこの表に書き込ませます。
行数は、20行としていますが、日々の発注数が多い場合には、もっと行数を増やして置く必要があるかもしれません。
②「商品仮置き」表:
 「未受入品発注番号」表で選択された発注番号の未受入の商品名を書き込ませます。
一つの発注番号で最大5商品の発注としていますので、5行の表を作成します。
2.「受入入力フォーム」の作成。
1)「ユーザーフォームの挿入」ボタンで新規ユーザーフォームを挿入します。図1
2)新規ユーザーフォーム上に各種コントロールを以下のように配置ください。
ここで挿入されたユーザーフォームは「UserForm4」となっています。図2
各コントロールのプロパティの「BackColor」で薄青色にしているのは、マクロのプログラム内でデータが読み込まれるコントロールを意味していま す。
今回リストボックスを採用した目的は、いろいろなコントロールの働きを知って頂くのに良いかと考えて採用いたしました。
3.リストボックスのプロパティの設定:
1)「RowSource」の設定:
 それぞれのリストボックス1、2のプロパティ「RowSouce」に作成された「表の名前」を書き込みます。
リストボックス1の「RawSource」=「商品仮置き」
リストボックス2の「RawSource」=「未受入品発注番号」
2)プロパティ「ColumnCount」の設定:
 リストボックス1の「商品仮置き」の表は、6列で作成しているため「6」とします。
リストボックス2の「未受入品発注番号」の列数は2列のため「2」とします。
3)プロパティ「ColumnHeads」は「True」に変更しましょう。
 このプロパティは、表の各項目の表題を表示させる働きでしたよね。コンボボックスでの説明時に「True」でも「False」でも良いと言っていました が、今回は複数列の表のため項目の表題を表示させていた方が見やすいかと考えますので「True」と致しました。
4)プロパティ「ColumnWidths」の設定:
 「商品仮置き」のリストボックス1では、「60pt;110pt;60pt;60pt;50pt;60pt」と設定しておきましょう。
「未受入品発注番号」のリストボックス2では、「80pt;110pt」として書込みましょう。
今後皆様が設定する場合は、コンボボックスの場合と同じように「実際の表示」を見ながら各自調整ください。
5)プロパティ「BoundColumn」、及び「TextColumn」の設定:
 コンボボックスでの説明を思い出していただければ問題ないかと思いますが、念のため説明致します。
「設定」シートに作成した「商品仮置き」表に端から「a,b,c,d,e,f」と書き込んで見てください。図4
リストボックスが下図のように表示されます。書き込まれた「a,b,c,・・・」の行をクリックしますと濃い青に反転します。
図5
リストボックス1のプロパティの「Text」、「Value」の値は左端の「a」の値を示しています。
リストボックス1では、「商品名」のみを使用しますのでプロパティの「Value」の値に商品名「c」が表示されるように設定します。(「Text」に設 定してはいけなくはないのですが、私には「Value」が使いやすいためだけです。)
商品名は表の3列目に配置されていますので「BoundColumn」の値を「3」(3列目)に書き換えます。
リストを再度クリックしてください。プロパティ 「Value」の値の表示が「c」となっていることがわかるかと思います。
(【注】BoundColumnの書換え後、再度クリックしなければ前の「a」の状態のままです。)
商品名以外の項目はただ参考のため表示しています。
リストボックス2(未受入品発注番号)では、「Value」の値に「発注番号」、「Text」の値に「発注先会社名」を使用しますので、 BoundColumn=1,TextColumn=2と設定しておきましょう。
以上でリストボックスのプロパティの説明は終わります。
4.ユーザーフォーム上の他のコントロールのプロパティを以下の表のように設定ください。図6

プログラムの説明:
プログラムを作成して行きます。
1.「受入入力」ボタンの配置:
作成した「受入入力フォーム」を表示させるためにエクセルの「記録一覧」シートに「受入入力」ボタンを配置しましょう。
「開発」→「挿入」→ボタン(フォームコントロール)を選択し、配置します。
このボタンの名称を「受入入力」とします。図7
2.「受入入力」ボタンのクリック時のプロシージャにプログラム書き込んで行きましょう。
①入力日時のTextBox1にパソコンの現在の時刻を書き込ませる。
②ユーザーフォーム上の各コントロールのリセットをします。
 (前に入力作業されたデータを消しておくため)
③ 担当者名テキストボックス7は最初にTabStopを「True」で設定していますが、連続して入力を行なう場合には担当者名は、最初に入力を行なってい ればその後は入力が不要なので、「書込み」コマンドボタンのプロシージャのプログラム内でTabStopを「False」に書き換えます。
そのためここで 「True」に戻します。 
④「設定」シートに作成された表「商品仮置き」、「未受入品発注番号」をリセツト(空白に)します。
⑤繰り返し変数n0で「未受入品発注番号」を検索して、「未受入品発注番号」の表に書き込ませます。
検索方法としては「未受入品」とは、「記録一覧」シートの表の受入日欄が空白なので空白の行を検索させます。
空白が検索されれば「未受入品発注番号表」に「発注番号」と「発注先名」を書き込ませます。
⑥ユーザーフォームを表示させた場合、カーソルの位置が定められたコントロールにあるように「SetFoucus」します。
⑦受入入力フォーム(ここでは、UserForm4)を表示させます。
以上の流れでプログラムして行きます。
 ここでは説明の都合上一括で書いていますが、実際にはプログラムを実行させながら不具合な点を追加修正を行って行けば 良いのです。
最初から完全に書かなければいけないと考えるとプログラムの作 成が嫌になるかと思います。
以上のプログラムは次のようになります。図8
黒 矢印線で囲んだ範囲は、記録一覧シートより「設定」シートの作業を行うためにWorksheets("設定")でシートの指定を行う必要があります。
そのシー トの指定を前述しましたように「With  ~ End With」で省略しています。
変数n0の繰り返しで、受入日が空白かどうか確認し、空白であれば未受入商品のため、この商品の発注番号を変数n1の繰り返し文で「設定」シートの未 受入発注番号の表に書き込ませています。
最大5個の同じ発注番号が存在しますので、書き込む時に同じ番号が既に書き込まれていれば書込みを中止させます。

次にユーザーフォーム上の各コントロールのプロシージャにプログラムを組み込んで行きましょう。
プロジェクトウィンドウの「UserForm4」をダブルクリックしますとユーザーフォーム4がコードウィンドウに表示されます。
3.Private Sub ListBox2_Click()のプロシージャ:
1)プロシージャの表示:
 リストボックス2を右クリックし、メニューの「コードを表示」選択するとプロシージャが表示されます。
Private Sub ListBox2_Click()

End Sub
2)このプロシージャでプログラムする内容:
①「商品仮置き」表のデータをリセット(空白に)する。
(連続して数商品の受け入れ入力するため前の商品のデータを消去する必要があります。)
②「発注先会社名」及び「発注番号」の書込み:
 クリックした発注番号を「発注番号」のテキストボックス2、及び「発注先会社名」をテキストボックス3に書き込まむようにプログラムします。
ここで思い出して頂きたいのはリストボックス2の「Value」に「発注番号」、及び「Text」に「発注先会社名」になるようにプ ロパティを設定していましたので、テキストボックス2に「Value」、テキストボックス3に「Text」を代入すれば良いことになります。
③繰り返し変数n0で選択した発注番号の商品を検索し、「商品仮置き表」に書き込む:
 ・「記録一覧」シート内で「入力日時」の列で空白のセルを検出したら繰り返し作業(変数はn0)を中止させます。
 ・空白でなければ、発注番号の列でリストボックス2で選択した発注番号と同じ発注番号、かつ受入日の欄が空白の行を検索させます。
(空白でない場合は、既に受入済み商品のためリストに載せないこととします。)
 ・空白のセルが検索されれば、繰り返し変数「n1」で「商品仮置き」表の「発注日」の列で空白のセルを検索し、その行に、発注日、発注先、商品名、単 価、数 量、金額、を書き込ませます。
書込み後、繰り返し変数n1の繰り返し作業を中止します。
(繰り返し変数n1の値5は、一つの発注番号での発注商品は最大5のため)
ここでは基本的には「商品名」のみで構わないのですが、伝票をみての作業入力となるためこの商品で間違いないか確認し易いように他の項目も表示させてみま し た。
④「n0」の繰り返し作業を入力日時の欄が空白となるまで行います。
図9

4.リストボックス1のプロシージャのプログラム組み込み:
リストボックス1では前の3-2)項で書き込まれたデータ(商品仮置きの表)が表示されていますので、このリストから該 当の商品を選択(クリック)して、商品名のテキストボックス3にその商品名を書き込ませます。
リストボッ クス1のプロパティ「BoundColumn」を「3」に設定し、商品名を「Value」に設定していますのでテキストボックス3に 「ListBox1.Value」を書き込ませます。
1)リストボックス1のプロシージャを表示:
 リストボックス1を右クリックし、メニューの「コードの表示」を選択しプロシージャを表示させる。
2)商品名の書込み:テキストボックス4にリストボックス1の「Value」を代入させます。
以下のようになります。
図10
5.担当者名(テキストボックス7)のプロシージャへの組み込み:
前回に申し上げましたように直接名前を書き込むのであればプロパティの「IMEMode」をHiraganaに設定しておけば直接担当者名を書くことがで きますので、プログラムの必要はないのですが、担当者をコード化し、コードから呼び込むことと致します。
1)Changeプロシージャ:
  アルファベットの大文字変換プログラム
2)Exitプロシージャ:
  コードの検索プログラム図11
6.書込み(コマンドボタン1)のプロシージャへの組み込み:
プログラムの流れ
1)「記録一覧」シート内での検索、書込み作業
①変数nで入力日時列を検索し、空白ならば繰り返し作業を止めます。
②空白でなければ、同一の「発注番号」かつ、同一の「商品名」の検索を行います。
②「発注番号」と「商品名」が同一であれば、その行の受入情報「入力日」、「受入日」、「備考」、「担当者名」のセルに書き込みを行う。
2)発注先会社のシート内での検索、書込み作業
①発注先会社名を「登録台帳」シートの「会社名」の表で検索を行う。
②同じ会社名が検索されれば、その2列横の「会社略称シート名」でシート名を確定させる。
③確定したシート名内で同一「発注番号」かつ「商品名」の検索を行う。
④同一「発注番号」かつ「商品名」の行に受入情報「入力日」、「受入日」、「備考」、「担当者名」を書き込む。
3)担当者名(テキストボックス7)のプロパティ「TabStop」の設定を「True」より「False」に行う。
連続入力作業を行う場合には、担当者名の繰り返し入力作業を省略するためです。
このため「受入入力」ボタンのプロシージャで再度「True」に戻すよう指示をしています。
4)発注番号、発注会社名、商品名、受入日、及び備考のテキストボックスを空白(リセット)とする。
5)リストボックスに関する事項のリセット
①リストボックス1、2のクリック状態(行の濃い青色反転)を解除
②「設定」シートの「未受入発注番号」表のクリア
③未受入発注番号の再読み込み
④「商品仮置き」表のクリア
6)カーソルをリストボックス2に移動させます。
7)保存指示を書き込みます。
図12以上でマクロを活用した簡単な発注、受入情報の入力のプログラミングの説明を終了 致します。
   
説明能力不足及び重複した説明などで非常に読みづらい点があったかと思いますが最後まで付き合い頂きありがとうございました。
このようなものでも何かに役立てば幸いです。
次回は準備できればエクセルのファイル間のデータのやりとり方法でも紹介できればと考えています。


サイドバータイトル
inserted by FC2 system