- 締切済み
エクセル 2003 リストボックス複数選択後の処理
いつもありがとうございます。 先日もご質問させていただきました。 エクセル VBA 初心者で困っております。 誠に申し訳ありませんが、ご教授をよろしくお願いします。 (sheet2)のデータをリストボックス(sheet1)で複数の値を選択し、 オートフィルタ-に反映させて抽出し、 その後、セルB1以下(sheet1)に入力した値と貼り付けた別のシート(sheet3)で数値1×数値2を掛け算し、数値3にそれぞれ出すのが目的です。 sheet1 リストボックスで複数選択された値を、A1より下に貼り付けていく それぞれB列に数値を入れる 例.(リストボックス選択後) A B 1 製品A 5(入力) 2 製品B 3(入力) 3 製品C 2(入力) ・ ・ ・ コマンドボタン1を押すと実行 sheet2(今後増える可能性あり) 製品名 数値1 数値2 数値3 1 製品C 2 2 製品A 2 3 製品E 1 4 製品B 4 5 製品F 3 6 製品D 5 ・ ・ ・ sheet3(貼付先) 実行結果 製品名 数値1 数値2 数値3 1 製品A 2 5 10 2 製品B 4 3 12 3 製品C 2 2 4 以前の質問では、1つずつでの入力で思ったとおりの結果になりました。 今回は複数です。 初心者で、まだ手を出す部分ではないとは思いますが、よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- keithin
- ベストアンサー率66% (5278/7941)
丸投げで理解しようとしていない(理解するよりコタエ聞いてコピる方が手っ取り早い)ので応用も出来ません。という典型的なご質問です。 sub macro3() dim r as long ’準備 worksheets("Sheet1").range("A1:B1") = array("製品名","数量2") worksheets("Sheet2").range("A1:B1") = array("製品名","数量1") worksheets("Sheet3").range("2:65536").entirerow.delete ’抽出と複写 r = worksheets("Sheet1").range("A65536").end(xlup).row worksheets("Sheet2").range("A:B").advancedfilter _ action:=xlfiltercopy, _ criteriarange:=worksheets("Sheet1").range("A1:A" & r), _ copytorange:=worksheets("Sheet3").range("A1:B1") ’作表 r = worksheets("Sheet3").range("A65536").end(xlup).row worksheets("Sheet3").range("C2:C" & r).formula = "=VLOOKUP(A2,Sheet1!A:B,2,FALSE)" worksheets("Sheet3").range("D2:D" & r).formula = "=B2*C2" end sub
- keithin
- ベストアンサー率66% (5278/7941)
マクロ以前の準備: 0.シート1,2,3の1行目にタイトル行を記入し,2行目から実データを記入する ご質問で書かれているような,いきなりシートの1行目からデータが記入されるような作り方はしない 1.シート1のA列に「入力規則」を取り付け,「商品名をプルダウンメニューから選べる」ように仕込んでおく 2.A列で商品を選んだら,B列に数量を記入しておく 若しくはアナタの考えた「リストボックス」を利用してシート1に商品を記入できるよう準備する マクロの用意: 次のマクロを参考にして,アナタの用意したボタンに取り付けて利用する sub macro1() dim r as long ’準備 worksheets("Sheet1").range("A1:B1") = array("製品名","数量2") worksheets("Sheet2").range("A1:B1") = array("製品名","数量1") worksheets("Sheet3").range("2:65536").entirerow.delete ’抽出と複写 r = worksheets("Sheet1").range("A65536").end(xlup).row worksheets("Sheet2").range("A:A").advancedfilter _ action:=xlfiltercopy, _ criteriarange:=worksheets("Sheet1").range("A1:A" & r), _ copytorange:=worksheets("Sheet3").range("A1") ’作表 r = worksheets("Sheet3").range("A65536").end(xlup).row worksheets("Sheet3").range("B2:B" & r).formula = "=VLOOKUP(A2,Sheet2!A:B,2,FALSE)" worksheets("Sheet3").range("C2:C" & r).formula = "=VLOOKUP(A2,Sheet1!A:B,2,FALSE)" worksheets("Sheet3").range("D2:D" & r).formula = "=B2*C2" end sub
補足
keithinさん、 早速のご回答誠にありがとうございます。 おおむね、行いたいことが出来ました。 感謝致します。 ただ、1点だけ Sheet2 には、製品名が同じで数量2が違う場合がございます。 そのまま実行すると、Sheet3には製品名はそれぞれで表記されますが、 数値2と3は、おそらくSheet1の一番上の製品の数値が反映されるようです。 ご教授をよろしくお願いいたします。