• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルで注文書を印刷したい。)

エクセルで注文書を印刷する方法

このQ&Aのポイント
  • エクセルを使用して注文書を印刷する方法について教えてください。注文すべきデータはSheet1にあり、注文書のフォームはSheet2にあります。
  • セルA1から始まるデータには仕入先コード、仕入先名、商品コード、商品番号、品目名、単価、注文数が含まれています。注文書の明細行は7桁です。
  • 仕入先コード001と050の注文書を連続して印刷する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

こういう問題はVBAでやるべき課題である。 ーー 説明も大変だが、関数で途中まではやってみる。じっくり考えてみてください。 仕入先コード順に並んでいるのが大前提。 ーー 例データ Sheet1 A-H列 H列は作業列 仕入先コード 仕入先名 商品コード 商品番号 品目名 単価 注文数 キー作業列 1 田中建材 A111 A001 セメント 100 10 00101 1 田中建材 A112 A002 砂 200 50 00102 1 田中建材 A113 A003 砂利 300 20 00103 50 鈴木塗料 F555 F051 壁塗料 500 10 05001 50 鈴木塗料 F556 G210 フィルム 100 15 05002 ーー H2に =TEXT(A2,"000")&TEXT(COUNTIF($A$2:A2,A2),"00") と入れて下方向に式を複写。 結果上記H列。 この例では、999社、請求は1社9件以内の仕組みとしている。9999や99などに変えることは出来る。どう変えたらよいかわかりますか? ーーー Sheet2 B3:E10 仕入先コード 仕入先名      3行目 1 田中建材           4行め 請求件数 3           6行目 商品コード 商品番号 品目名   以下9行明細 A111 A001 セメント A112 A002 砂 A113 A003 砂利 D4 田中建材 =VLOOKUP(B4,Sheet1!$A$1:$B$100,2,FALSE) D6 請求件数 =COUNTIF(Sheet1!$A1:$A$100,$B$4) C8 商品コード =IF(ROW()-7>$D$6,"",INDEX(Sheet1!$C$1:$E$100,MATCH(TEXT($B$4,"000")&TEXT(ROW()-7,"00"),Sheet1!$H$1:$H$100,0),1)) D8 商品番号 =IF(ROW()-7>$D$6,"",INDEX(Sheet1!$C$1:$E$100,MATCH(TEXT($B$4,"000")&TEXT(ROW()-7,"00"),Sheet1!$H$1:$H$100,0),2)) E8 品目名 =IF(ROW()-7>$D$6,"",INDEX(Sheet1!$C$1:$E$100,MATCH(TEXT($B$4,"000")&TEXT(ROW()-7,"00"),Sheet1!$H$1:$H$100,0),3)) 最後の引数だけ1->2->3と変わるだけ。 単価、注文数は長くなるので省略。類推のこと。 C8:E8を下方向に式を9行複写 結果 上表のとおり。 B4セルの仕入先コードを50 に変えると 仕入先コード 仕入先名 50 鈴木塗料 請求件数 2 商品コード 商品番号 品目名 F555 F051 壁塗料 F556 G210 フィルム ーーー 問題は明細数には限りがある。超えたときどうするか。 仕入先コードを1->50-->・・と変化させつつ、印刷をしないとならない。 これは自動的にやるには、VBAの世界です。 == 以上関数では、相当複雑で、十分で無いことがわかったでしょう。VBAを勉強してください。 VBAでやればもっとすっきりプログラムが組める。

K-19New
質問者

お礼

ありがとうございます。もっとVBA勉強しなければとおもいました。

関連するQ&A