質問 |
||
| QNo.4201124 | エクセルで注文書を印刷したい。 | |
|---|---|---|
| 質問者:K-19New |
またまた教えてください。 エクセルで注文書を発行印刷したいのです。 Sheet1に注文すべきデータだあります。 セルA1から 仕入先コード 仕入先名 商品コード 商品番号 品目名 単価 注文数 001 AAA A111 A001 ABC 100 10 001 AAA A112 A002 ADD 200 50 050 FFF F555 F051 TYI 500 10 があります。 Sheet2には注文書のフォームがあります。明細行は7桁です。 このとき、仕入先は二つあります。001 と 050 最初に001を印刷し連続して050を印刷する。仕入先をグループをして 印刷はできるのでしょうか? |
|
困り度:
|
||
| 質問投稿日時: 08/07/24 18:06 |
||
回答良回答20pt |
|
| ANo.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でやればもっとすっきりプログラムが組める。 |
|---|---|
| 回答者:imogasi | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/07/24 20:59 |
|
| |
| この回答へのお礼 | ありがとうございます。もっとVBA勉強しなければとおもいました。 |