エクセル顧客管理 | 第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)

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

スプレッドシートが非常に遅い、高速化するには|Google Apps Script入門(1月17日)
画像のトリミング(PictureFormat,Crop)|ExcelマクロVBAサンプル集(12月27日)
シート保護|Google Apps Script入門(12月24日)
表示の固定|Google Apps Script入門(12月24日)
グラフ|Google Apps Script入門(12月21日)
入力規則|Google Apps Script入門(12月13日)
並べ替え|Google Apps Script入門(12月12日)
メモの挿入・削除と改行文字|Google Apps Script入門(12月6日)
リンクの挿入・編集・削除|Google Apps Script入門(12月6日)
セルに数式を入れる|Google Apps Script入門(12月1日)

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

1.RangeとCellsの使い方|ExcelマクロVBA入門
2.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.ひらがな⇔カタカナの変換|エクセル基本操作
8.CSVの読み込み方法|ExcelマクロVBAサンプル集
9.変数とデータ型(Dim)|ExcelマクロVBA入門
10.VBAのFindメソッドの使い方には注意が必要です|ExcelマクロVBA技術解説



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

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


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

    ↑ PAGE TOP