納品書A・納品書B・請求書が一つのファイルにシートとしてあったとします。
納品書A
商品a 数量 1
商品b 数量 2
商品c 数量 3
納品書B
商品b 数量 3
商品e 数量 2
このとき、請求書に
納品書a、納品書bの商品ごとの合計数量が自動で計算されるマクロを作りたいのですが。
その際、納品書の商品名はプルダウンで選択式となり、
仮に商品がa~fまであっても、
商品が選択されなければ、請求書には項目が出ないようにしたいのです。
よろしくお願いします。
関数だけで実現できます。そのためには処理を2つの部分に分離して説明します。
1 全ての商品ごとに集計する。
2 商品数が0の商品の行を消す。
1については、vlookup関数とiserror関数で可能です。
2は、リストにしてフィルタで0以上だけを表示するという方法もありますが、
処理が自動にならないのとレイアウトが崩れるので、ここでは作業シートを追加して対処します。
① まず、わかりやすくするために納品書aと納品書bの表にそれぞれ"納品書a"、"納品書b"と名前をつけます。
② 次のような作業シートを追加します。
B列に商品名を列挙します。
C2セルに下の数式を入れて商品名分下にコピーします。
=IF(ISERROR(VLOOKUP(B2,納品書a,2,FALSE)),0,VLOOKUP(B2,納品書a,2,FALSE))+IF(ISERROR(VLOOKUP(B2,納品書b,2,FALSE)),0,VLOOKUP(B2,納品書b,2,FALSE))
A2セルに下の数式を入れて商品名分下にコピーします。
=IF(C2>0,A1+1,A1)
A1セルに請求書の見出しになる行数を入れます。図ですと23です。
図のように、できた表に"作業シート"と名前をつけます。
これで、作業シートで全ての商品が集計できるはずです。
③ 次に請求書シートに数量0以外の商品だけを表示する処理です。
見出しの商品の下のセルに、下の数式を入れて商品名の数だけ下にコピーします。
=IF(ISERROR(VLOOKUP(ROW(),作業シート,2,FALSE)),"",VLOOKUP(ROW(),作業シート,2,FALSE))
見出しの数量の下のセルに、下の数式を入れて商品名の数だけ下にコピーします。
=IF(ISERROR(VLOOKUP(ROW(),作業シート,3,FALSE)),"",VLOOKUP(ROW(),作業シート,3,FALSE))
以上で、関数だけでできます。
マクロで実現したいという場合は、納品書と請求書のセルがどこになるのかとかいろいろ情報が必要です。
その場合は、コメントをオープンされたほうがよろしいかと思います。
大変わかりやすい解説をありがとうございました。
早速作成いたしました。
感謝いたします。