- 締切済み
エクセルユーザーフォームのリストボックスで入力する方法
(一回目は間違えて質問するを押してしまいました。すいません) エクセル2000で請求書の作り方を教えて下さい。 (1)シート「請求書」に下記請求書とフォームツールバーのボタンを挿入。 D E 商品名 単価 13 14 15 (2)シート「商品」に下記を記述後,C5:D7の範囲を「単価表」と定義。 C D 商品名 単価 5 プリンター 30000 6 ノートPC 200000 7 デスクトップPC 300000 (3)UserForm1のListBox1に、リスト項目を取り込む設定をする。 (4)標準モジュールに下記を記述してこのマクロをボタンに登録しておく。 Sub ダイアログを表示() UserForm1.Show vbModeless Range("D13").Select End Sub この状態で、(1)で挿入したボタンをクリックすると表示されるリストボックス項目をクリックすれば、D13に商品名とE13に単価を転送して、カーソルが下に自動移動するというもの。但し下記条件で。 1.コマンドボタンを使わず、リスト項目の選択でダイレクトに転送できる もの。 2.1回転送してカーソルが下に自動移動後に、引き続いて同じリスト項目をクリックしても転送できるもの。(他の項目を選択するなら転送できるのですが同じ項目の転送がどうしてもうまくいきません。) 長くなりましたがなるべく簡単な方法でよろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- papayuka
- ベストアンサー率45% (1388/3066)
やりたい事とあってるか解りませんが、、、 「商品」シートのC4:D4がタイトル行で「商品名」「単価」となっていて、C5:D7がタイトルを除いたリストだとします。 UserForm に ListBox1 を置き、UserFormのモジュールに下記のようにすると「ダブルクリック」で「請求書」シート にデータを転記出来ます。 シングルクリックでは下手に選ぶ事も出来ずに使い勝手が悪いように思います。 どうしてもシングルクリックならば、ListBox1_DblClickの内容を MouseDown 又は MouseUpとかのイベントで使う感じでしょうか、、、 '---------------------------------------------------------------------- Private Sub UserForm_Initialize() With ListBox1 .ColumnCount = 2 .ColumnHeads = True .RowSource = "商品!C5:D7" End With End Sub Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) If ActiveCell.Parent.Name <> "請求書" Then Exit Sub With ListBox1 ActiveCell.Value = .List(.ListIndex) ActiveCell.Offset(0, 1).Value = .Column(1, .ListIndex) ActiveCell.Offset(1, 0).Activate End With End Sub '----------------------------------------------------------------------
お礼
1ヶ月程ホームページで方法を探しても分らなかったのですが、おかげさまでやっと分りました。ダブルクリックイベントとインデックスをうまく利用するんですね。やっと思ったとおりの請求書が作れます。本当にありがとうございました。