第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について書く予定です。
同じテーマ「エクセル顧客管理」の記事
第22回.コントールについて
第23回.納品書を作成、商品情報を取得(1)
第24回.納品書を作成、商品情報を取得(2)
第25回.納品書を作成、商品情報を取得(3)
第26回.WorksheetFunctionについて
第27回.RangeとCellsの深遠
第28回.納品書データをデータベース化(1)
第29回.納品書データをデータベース化(2)
第30回.配列の使い方について
第31回.売上一覧(伝票合計の一覧)を作成(1)
第32回.売上一覧(伝票合計の一覧)を作成(2)
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.ブック・シートの選択(Select,Activate)|VBA入門
10.条件分岐(Select Case)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。