• 締切済み

エクセル 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つずつでの入力で思ったとおりの結果になりました。 今回は複数です。 初心者で、まだ手を出す部分ではないとは思いますが、よろしくお願い致します。

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

丸投げで理解しようとしていない(理解するよりコタエ聞いてコピる方が手っ取り早い)ので応用も出来ません。という典型的なご質問です。 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)
回答No.1

マクロ以前の準備: 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

kirinsan1230
質問者

補足

keithinさん、 早速のご回答誠にありがとうございます。 おおむね、行いたいことが出来ました。 感謝致します。 ただ、1点だけ Sheet2 には、製品名が同じで数量2が違う場合がございます。 そのまま実行すると、Sheet3には製品名はそれぞれで表記されますが、 数値2と3は、おそらくSheet1の一番上の製品の数値が反映されるようです。 ご教授をよろしくお願いいたします。