エクセル顧客管理 | 第25回.納品書を作成、商品情報を取得(3) | Excelマクロを駆使したカスタマイズ可能なエクセル顧客管理、エクセルVBAの学習教材



最終更新日:2014-11-11

第25回.納品書を作成、商品情報を取得(3)


エクセルで顧客管理を作ろう、


前回までで、「商品番号」で「商品マスタ」より情報を取得が一応できました、


しかし、「顧客番号」で「顧客一覧」より情報取得の時のように、


一覧を検索して、そこで選択した情報を取得するようにはなっていません。


今回は、商品情報を取得3部作の最終です。


明細部にボタンを付けて、「商品マスタ」へ移動し、そこで選択できるようにします。


前回同様に、エクセルのサンプル をアップします。

ダウンロード用の別サイトが表示されます。


さて、まず言い訳をする必要があります。


第22回.コントールについて 」、ここで私は、


作成中のエクセルでは、「ActiveX コントロール」のみ使用します。


と言い切ってしまいました。


すみません、今回は「フォーム コントロール」の「ボタン」を使用します。


明細行にボタンを付ける事を忘れていました。


「ActiveX コントロール」では、ボタン毎にSubモジュールが必要になってしまい、ちょっと不便です。


「フォーム コントロール」のボタンなら、1つのSubモジュールで済みますし、


ボタンのコピペだけで増やす事ができるのです。



シート「商品マスタ」にコンボボックスを作ります


コンボボックスの追加方法は何回かやりましたが、

1.2003なら「コントロールツールボックス」、2007以降なら「ActiveXコントロール」

  の「コンボボックス」を適当な位置に追加して下さい。

2.プロパティを変更する

  「オブジェクト名」を「cmbシート名」

このコンボボックスには、コードを入れません。

選択を変更しても何もすることがないからです。


コンボボックスにリストを追加します


シート「商品マスタ」のシートモジュールに以下を追加します。

Private Sub Worksheet_Activate()
  Dim ary As Variant
  ary = シート取得("設定").Range("シート名")
  cmbシート名.Clear
  cmbシート名.List() = ary
End Sub


シート「設定」のシート名を、配列に取り出し、その後、コンボボックスのListに入れています。


これは、「顧客一覧」と全く同一です。

標準モジュールを作り、それをCallするようにすれば、

「商品マスタ」と「顧客一覧」で共通に使えるのですが、

行数が短いので、コピペで済ませました。

今後、さらに増えるようなら、標準モジュールに作成します。



シート「商品マスタ」で、F1押下時の処理を追加します


「Mod共通」の「ファンクションF1」に以下を追加します。

Sub ファンクションF1()
  Dim varWork As Variant

  Select Case True
    Case ActiveSheet Is シート取得("商品マスタ")
      Select Case ActiveSheet.cmbシート名.Text
        Case シート取得("納品書").Name
          If Not IsEmpty(Cells(ActiveCell.Row, 開始セル取得("商品マスタ").Column)) And _
            ActiveCell.Row > 開始セル取得("商品マスタ").Row Then
            varWork = Cells(ActiveCell.Row, 開始セル取得("商品マスタ").Column)
            シート取得("納品書").Select
            ActiveCell = varWork
          End If
      End Select


太字が追加する部分です。


商品番号の入力されている行のセルが選択されている状態で、

F1が押下された場合に、「納品書」のアクティブなセルに商品番号を設定します。

ActiveCellを取得するには、そのシートをActiveにする必要があります。

従って、varWork = Cells(ActiveCell.Row, 開始セル取得("商品マスタ").Column)
で、「商品マスタ」のアクティブ行の商品番号を変数ヘ一旦入れておき、

シートを「納品書」に変更後に、この変数をアクティブセルへ入れています。


これはいかにも面倒なのですが、直接入れる事ができません。

できれば、WorkSheets(1).Activecell = WorkSheets(2).Activecell

のように記述したいところなのですが、

WorkSheetsにActivecellのプロパティが無いのです。

何かExcelとして、都合の悪い事があるのかもしれません。



標準モジュールを追加します


「挿入」→「標準モジュール」ですね、

プロパティで「Mod納品書」にオブジェクトを変更して下さい。

今後、「納品書」に関する、標準モジュールはここに記述していきます。


このように、なるべく処理内容毎に、標準モジュールは分けて作成することをお勧めします。


以下のSubモジュールを追加します。

Sub 商品検索()
ActiveSheet.Shapes(Application.Caller).TopLeftCell.Select
Call 商品マスタへ(ActiveSheet.Name)
End Sub


今回のメインの内容です。


Application.Callerは、このプロシージャーの呼び元の名前が入っています。

ここでは、ボタンの名称になります。

ActiveSheet.Shapes(ボタンの名称)で、ボタンそのものになります。

.TopLeftCellは、そのボタンが属するセルの左上のセルです。

そして、そのセルをSelectしています。

つまり、クリックしたボタンが含まれるセルをアクティブにしています。

シート「納品書」に「フォーム コントロール」の「コマンド ボタン」を作成


1.2003なら「フォーム」、2007以降なら「フォーム コントロール」

  の「ボタン」を商品番号の入力セルに追加して下さい。

  セルからはみ出さないようにして下さい。

2.ボタンの文字を変更します。

  「ボタン1」等になっていますので、「検索」にして下さい。

  ボタンの文字なので、自由な文字で結構です。

3.「マクロの登録」で、

  一覧より、「商品検索」を選択し、「OK」

4.このボタンをコピーし、他の行に貼り付けて下さい。

  ボタンは一度選択状態が解除されると、左クリックでは選択できません。

  右クリックで選択することができます。



以上で完成です。


どうですか、全てのボタンの処理が、たった2行の記述で終わりです。


この為に、今回は、「フォーム コントロール」を使用しました。


これで、


「納品書」でボタンクリック

「商品マスタ」へ移動

商品を選び、当該行のセルを選択し、F1

「納品書」のボタンをクリックした行の商品番号が設定されます。

商品情報が表示されます。


以上の機能が完成しました。



ただし、問題が1つあります。

フォームのボタンは、マウスポインタが指定できないのです。

ActiveXは、指定できますけど、ハンドは標準ではできません。

カスタムで指定しないと・・・

結局バラバラ、まあ、とりあえずは良しとしましょう。



これで、商品情報を取得の3部作が終了です。


次回は、WorksheetFunctionについて書く予定です。






同じテーマ「エクセル顧客管理」の記事

第26回.WorksheetFunctionについて
第27回.RangeとCellsの深遠
第28回.納品書データをデータベース化(1)
第29回.納品書データをデータベース化(2)
第30回.配列の使い方について
第31回.売上一覧(伝票合計の一覧)を作成(1)
第32回.売上一覧(伝票合計の一覧)を作成(2)

新着記事 ・・・新着記事一覧を見る

大量VlookupをVBAで高速に処理する方法について|ExcelマクロVBA技術解説(12月12日)
オセロを作りながらマクロVBAを学ぼう|ExcelマクロVBAサンプル集(11月26日)
ScreenUpdating=False時にエラー停止後にシートが固まったら|ExcelマクロVBA技術解説(11月21日)
データクレンジングと名寄せ|ExcelマクロVBA技術解説(10月20日)
SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い分け方|ExcelマクロVBA入門
3.変数とデータ型(Dim)|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
6.定数と型宣言文字(Const)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.CSVの読み込み方法|ExcelマクロVBAサンプル集
9.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • 納品書を作成、商品情報を取得(3)

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。

    ↑ PAGE TOP