納品書を作成、顧客情報を取得(3)最終更新日:2014-11-11第20回.納品書を作成、顧客情報を取得(3)エクセルで顧客管理を作成します、とうとう、20回まできました、では、前回の続き、3部作の最終です。実際のエクセルを見ながら確認して下さい。シート「納品書」です。今回は、シート上部の、ボタンの機能説明になります。その前に、シート「顧客一覧」にコンボボックスを追加します。「コンボボックス」を適当な位置に追加して下さい。「オブジェクト名」を「cmbシート名」このコンボボックスには、コードを入れません。選択を変更しても何もすることがないからです。「コマンドボタン」を適当な位置に追加して下さい。「オブジェクト名」を「btn顧客検索」追加された「ボタン」をダブルクリック、または、「コードの表示」このモジュールを以下のようにします。Sub続いて、シート「顧客登録」のシートモジュール「一覧へ_Click」以下の部分を修正します。Subまだまだ、シート「顧客一覧」のシートモジュールへ以下を追加。Sub準備OKでしょうかあっちこっちで追加・修正になりました。何をしているかと言うと、以下の流れになります「納品書」のボタンをクリック↓「顧客一覧」のシートを表示↓顧客を選択し、F1↓「納品書」の顧客番号が設定される↓顧客情報が表示されるこの一連の機能を実現する為に、いろいろ追加しています。このような場合、よくあるのは、ユーザーフォームを使用します。それでも良いのですが、ユーザーフォームを新たに作り、プログラムを入れるのは、それなりの作業になります。顧客一覧のシートがあるのですから、これをそのまま使用した方が効率的なのはいうまでもありません。それなりの仕掛けは必要です。btn顧客検索_Click()ここはそのままですね。゚ャーのCallです。一覧へ_Click()ここも、修正箇所の内容は、上と同じです。String)シート「顧客一覧」を選択しておきます。Withcmbシート名のリストを先頭より検索し、引数のシート名と一致するリストを選択状態にします。.List(i)でコンボボツクスのリストのi番目(0開始)のテキストを取得します。iで、i番目のリストを選択状態にします。Forは、既に用はすんだので、ループを抜けます。Forを記述しなくても、正常に動作しますが、プログラムの基本は、余分な事はさせない。Worksheet_Activate()「顧客一覧」のシートが選択された時に起動されるイベントです。シート「設定」の、シート名の範囲を、配列に入れ、cmbシート名をクリアした後、この配列を入れています。あれっ、名前定義「シート」名」の設定はどこかで記述しましたかね?まあ、もうお分かりですよね、可変リストを作成するときの、名前定義と同様です。シートなんて、そんなに追加するものでもないので、固定でも支障ありませんが。注意).確か前回、コンボボックスに入れる時に、0番目が空だと先頭が空行になると説明しました。ここで作成される、配列は、Lboundが1であり、0番目が存在していないのです。セル範囲(Range)を、Variantに入れた場合は、1からの配列になります。ファンクションF1()このモジュールは、F1が押された時に、起動されるモジュールです。覚えていますでしょうか、ブックモジュールの「Workbook_Open」で定義しています。どのシートで、F1が押されても、このモジュールが起動されます。シート取得("顧客一覧")この部分で、押されたシートを判定し、個別のCase文で処理しています。今回は、シート名のコンボボックスの選択状態により、処理を分岐させるようにしました。「顧客登録」の場合は、いままで通りです。シート取得("納品書").Name新たに、「納品書」の場合の処理を追加しました。「納品書」の「顧客番号」に、現在行の顧客番号を設定し、シート「納品書」へ移動しています。注意).IF文で、顧客番号の存在行かをチェックしています。このIF文は、シート名判定のSelect文の上にすることもできます。変更が大きくなってしまいます。今回は、そのような処理を入れる事は無いと思うので、上にした方が良いように思えます。このような事を考慮してプログラミングしていくことが、「保守性」を高めるのです。注意).シート取得("納品書")が2行続いているので、Withを書きたくなります。Selectが2段階、そしてIF文となっています。ネストは、概ね3段階程度にしないと、「可読性」を落とします。コンパイラーも完璧ではないので、動作不良を起こす原因にもなります。従って、この場合2行程度ならWithを使いません。複雑になる場合は、IF文以下を、別のSubモジュールにしていきます。これで、「納品書」のボタンをクリック↓「顧客一覧」のシートを表示↓顧客を選択し、F1↓「納品書」の顧客番号が設定される↓顧客情報が表示されるの機能が実装されました。この機能は、さらに今後作成するシートでも使う事になるはずです。このような、そのソフトにとっての基本機能は、しっかりとさせておく必要があります。大急ぎで3部作を出しました。別に急ぐ必要がないのですが、プログラム作っちゃったし・・・まあ、次回以降で、補足説明をします。この3部作を読んで理解できるなら、もうバリバリのプログラマーですからね。次回から、少し復習をしましょう。納品書を作成、顧客情報を取得(3)このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。