ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

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勉強しなければとおもいました。