エクセルシートへの書き込み

発注入力フォームの各コントロールのプロシージャに入力する場合の段取りができましたので、「書き込み」コマンドボタンのプロシージャにエクセル シート(注文書、一括記録、発注先別)への書込みを行なわせます、次に「注文書」シートに移動した後に「発注入力フォーム」フォームを非表示にし終了とし ます。
新たに次の発注処理を行なう場合は再度発注入力フォームを表示させ処理を行なうこととなります。
「書込み」ボタンのプロシージャで作成するプログラムの流れ。
 ①「注文書」シートに書き込む。
 ②「一括記録」シートに書き込む。
 ③発注先別シートに書き込む。
 ④書き込み完了後に保存を行う。
 ⑤「注文書」シートを表示させる。
 ⑥「発注入力フォーム」を非表示とする。
プログラムを書く前に「発注入力フォーム」のコントロール、及び「注文書」の書き込みセルの位置を確認しておきましょう。図3
「注文書」シートの配置
図2
「記録一覧」、「個別発注先」シートの配置
図291.「書込み」ボタンのプロシージャの画面を表示させます。
 「書込み」ボタンを右クリックし、メニューの「コードの表示」選択し表示させる。
2.注文書シートへの書込みプログラム:
  「書込み」ボタン(CommandButton1)のプロシージャに以下のように書込みます。図18
エクセルに戻り「発注入力」ボタンをクリックし、表示された発注入力フォームに適当に入力して「書込み」ボタンをクリックします。
図8
「発注入力」フォーム」の右上の閉じる(×)を押して入力フォームを非表示にします。
「注文書」シートに移動すると発注入力フォームで書き込んだデータが下図のように書き込まれているのが分かるかと思います。
図9
こ こで実際の注文書は、発注先に送るので発注先会社名に「敬称など」がないと大変失礼かと考えますので、「御中」を付けるようにしましょう。
プログラム中での文字の連結を 行なう場合には、以前説明しましたように「&」(アンドマーク)を使用して発注先名の行を下記のように書き換えると敬称を付けた表示とすることが できます。図19
3.「記録一覧」シートへの書込み:
「記録一覧」シート及び「各発注先」シートの入力項目の配置確認
図26
2項の注文書シートへの書込みプログラムの後に「記録一覧」シートへの書込みプログラムを追記作成します。
この時点で既に注文書シートへの書込みは完了していますので、この後のプログラムには注文書シートの「発注商品一覧表」に書き込まれた「商品名」、「単 価」、「数量」、「金額」をを利用します。
図6
㋐㋑で記録一覧シート内で「入力日時」の列を変数nの繰り返しで書込む行(空白の行)を検索致します。
書込みを行なうのは「注文書」シートの「発注商品一覧表」に書き込まれている最大5商品です。
㋒の変数「n1」で一覧表の商品名の欄を検索します。
㋓で商品名が空白であれば、繰り返し作業を中止させます。それ以外(商品名が記載)であれば注文書に書き込まれた商品の情報を記録一覧シートに書き込ませ ます。
セルの行番号(5 + n - 1 +  n1)は、記録一覧シートの書き込ませる行番号を表しています。
ここで行番号の(n-1)の意味がよく分からない方は下図を参照ください。図27
4.発注先別シートに書込み:
上記プログラムの後に以下のプログラムを書込みます。
基本的には、記録一覧シートでの書込みプログラムと同じですが、ただ異なるのは発注先シート名を指定しなければならないことです。
図7
㋐、㋑の変数n0の繰り返し、条件分岐文で登録台帳の発注先会社名を検索させています。
発注先会社名が検索されれば、その2列隣の「各社略式シート名」に表記されていますので、発注先会社シート名をWorkSheets (WorkSheets("登録台帳").Cells(5 + n0, 4).Value)で指定することができます。
図28
㋗の「With ~ End With」の間で発注先会社シート名『Worksheets(Worksheets("台帳登録").Cells(5 + n0, 4).Value)』が長く見づらいため、セルの頭にドット() を付けてこのシート名を省略して書くことができます。(要注意)
例えば㋓の最初の行「If .Cells(5 + n1, 3).Value = "" Then」は、省略しなければ
「If Worksheets(Worksheets("台帳登録 ").Cells(5 + n0, 4).Value).Cells(5 +n1, 3).Value="" Then」となります。この指示は終りを表す「End With」の間で適用されます。
㋒、㋓の変数n1の繰り返し、条件分岐文では、発注先別シート内に書き込むために、入力日時の列で空白のセルを検索させています。
㋕、㋖では、「記録一覧」シートの場合と同様に注文書シートで発注商品を検索し「発注先シート」に書き込ませています。
以上で、「注文書」、「記録一覧」、及び「発注先別」シートへの書込みは完了しました。
5) 「保存指示」:
 上書き保存の作業指示は「ActiveWorkbook.Save」となります。
「ActiveWorkbook」は、作業中のファイルを指しています。
保存指示を行なうのは、書込み作業の処理が完了したところで何らかの原因、例えば停電などによるパソコンのシャットダウンによる書込みデータの消去、保存 忘れなどの防止のためです。
6)「注文書」シートへの移動:
発注の流れとして、発注入力後注文書を印刷することとなりますので、現在の「記録一覧」シートより「注文書」に移動させるようにしています。
Worksheets("注文書").Active」(「注文書」のシートを作業 画面にする。)で記録一覧シートから「注文書」シートへ移動します。
7)ユーザーフォームの非表示(隠す):
発注入力ボタンをクリックして発注入力フォームを表示(Show)させたのとは反対で、非表示(Hide) で指示します。図20
以上で「書込み」ボタンでの作業は完了です。
5.「キャンセル」ボタンのプロシージャ:
 発注入力フォームでの作業を中断する場合に使用します。
 プロシージャは、発注入力フォームを非表示にすると以下のように書き込むだけです。図21
6.「発注入力」ボタンプロシージャ:
現在プロシージャは以下のようになっています。図7
ここで発注入力フォームを立ち上げて下図のように何か入力して、「書込み」ボタンをクリックしましょう。
発注入力フォームが非表示となり、注文書シートに今入力した項目が書き込まれているのが分かるかと思います。
図22
さらに記録一覧シート、及びここでは田中コーポレーション(シート名:田中)のシートを確認すると同様に書き込まれているのが分かるかと思います。
次に新たなデータを入力しようと「記録一覧」シートの「発注入力」ボタンをクリックして発注入力フォームを表示させると前に入力した 値がそのまま残っているのが分かるかと思います。
当然、注文書の様式にも前のデータがそのまま残っている筈です。図23
このように前のデータがそのまま残っていると次の入力時には、一度発注入力フォームの入力データ、及び注文書シートのデータを消さなければなりません。
「発注入力」ボタンによる「発注入力フォーム」を立ち上げる前にこれらデータの消去(リセット)が必要となります。
この消去(リセット)のプログラムをプロシージャに追加します。
1)「発注入力フォーム」のコントロール内のデータのリセット:
2)注文書シート内に書き込まれたデータのリセット:
 下図エリアのリセットを行なう。図24
プログラムは以下の通りとなります。
ず25
 注文書シート内の消去では、当然シート名の指定が必要となりますので、「With ・・End With」を使用してシート名を省略して書いています。 
「SetFoucus」で「発注入力フォーム」を立ち上げた時に常に同じコントロールにカーソルがあるようにセットします。ここでは発注日(テキストボッ クス2)にセットしています。
以上で書込み方法についての説明を終えますが、人が入力を行ないますので様々な誤入力が発生します。
参考までに次の2点のミス入力起こした場合の対応について次ページで紹介いたします。
 1.コンボボックスで商品名を選択するのは良いが、間違えて同一商品を更に選択した場合の警告表示。
 2.基本的には、発注番号は一つのみで管理されるのが普通なので、後日既に使用されてる発注番号が採番された場合の警告。
 このようなミス入力を行なった場合、折角マクロを組んでいるので警告表示をして入力担当者に知らしめたいですよね。
発注番号は、採番のルールが決まれば、自動で採番することも可能ですが、おそらくいろいろな採番方法があるでしょうから、今回は採番方法については省略致 します。
取り敢えず1、2項の警告表示の方法について次ページにて紹介致します。
(不要であれば飛ばしていただいて構いません。)

次ページへ

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