- ベストアンサー
excelの抽出・印刷について
- excelで住所録と取引台帳があります。これらのデータを組み合わせて取引内容を相手に通知したいです。
- 住所録は約2000件の相手方の情報があり、取引台帳は約10000件の取引内容があります。
- 手動で抽出して差し込み印刷する方法では効率が悪いため、効率的な方法を教えてほしいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
今仮に、住所録が入力されているシートがSheet1、取引台帳が入力されているシートがSheet2で、Sheet1のB列に氏名、Sheet1のC列に住所、Sheet1のD列に郵便番号が入力されていて、Sheet2のB列に氏名、Sheet2のC列に商品名、Sheet2のD列に取引日付が入力されていて、 Sheet3のA1セルに 通知文 Sheet3のB5セルに 様 Sheet3のA7セルに 取引内容 と入力されているものとします。 また、Sheet2のD列に取引日付データはシリアル値で入力されているものとします。 まず、Sheet3のA3セルに次の数式を入力して下さい。 =IF(COUNTIF(Sheet1!$B:$B,$A$5)=0,"",VLOOKUP($A$5,Sheet1!$B:$D,3,0)) 次に、Sheet3のA4セルに次の数式を入力して下さい。 =IF(COUNTIF(Sheet1!$B:$B,$A$5)=0,"",VLOOKUP($A$5,Sheet1!$B:$D,2,0)) 次に、Sheet3のA8セルに次の数式を入力して下さい。 =IF(OR(COUNTIF(Sheet2!$B:$B,$A$5)=0,ROWS($2:2)>COUNTIF(Sheet2!$B:$B,$A$5)),"",ROWS($2:2)&".") 次に、Sheet3のB8セルに次の数式を入力して下さい。 =IF($A8="","",INDEX(Sheet2!$D:$D,SUMPRODUCT((ROW(OFFSET(Sheet2!$D$1,,,MATCH(9^9,Sheet2!$D:$D)))*(OFFSET(Sheet2!$B$1,,,MATCH(9^9,Sheet2!$D:$D))=$A$5)*(COUNTIF(OFFSET(Sheet2!$B$1,,,ROW(OFFSET($E$2,,,MATCH(9^9,Sheet2!$D:$D)))),$A$5)=ROWS($2:2)))))) 次に、Sheet3のC8セルに次の数式を入力して下さい。 =IF($A8="",IF($A7="","","以上"),INDEX(Sheet2!$C:$C,SUMPRODUCT((ROW(OFFSET(Sheet2!$D$1,,,MATCH(9^9,Sheet2!$D:$D)))*(OFFSET(Sheet2!$B$1,,,MATCH(9^9,Sheet2!$D:$D))=$A$5)*(COUNTIF(OFFSET(Sheet2!$B$1,,,ROW(OFFSET($E$2,,,MATCH(9^9,Sheet2!$D:$D)))),$A$5)=ROWS($2:2)))))) 次に、Sheet3のA8~C8の範囲をコピーして、同じ列の9行目以下に貼り付けて下さい。 以上で完了です。 尚、Sheet2のD列に取引日付データがシリアル値ではないものが存在している場合には、Sheet3のA8~C8に入力する数式中の MATCH(9^9,Sheet2!$D:$D) と記述されている全ての箇所を MATCH("゛",Sheet2!$D:$D,-1) に変更して下さい。
その他の回答 (4)
- knmrstkt
- ベストアンサー率31% (10/32)
基本それはデータベースなんで、手っとり早くaccessにインポートすれば。 エクセルでやることではない気が・・・・ accessはエクセルデータを取り込んだり、書き出したりできる。 抽出もクエリ覚えれば簡単抽出できるし、レポート機能もあるんで、簡単印刷できる。 まあ断然accessでしょうね。
- MackyNo1
- ベストアンサー率53% (1521/2850)
No2の補足です。 もし、エクセルだけで差し込み印刷がしたいなら、抽出データ一覧シートをデータベースとして、No2の回答の数式で印刷データを表示して、以下のページのようなマクロを利用されてみてはいかがでしょう。 http://pc.nikkeibp.co.jp/article/NPC/20070301/263710/
- MackyNo1
- ベストアンサー率53% (1521/2850)
連続印刷などすべて自動化するにはマクロを利用する必要がありますが、まず以下の添付画像のような印刷用のシートを作成し、このシートを印刷するようにしてはいかがでしょうか。 B2セル(名前の入力欄) 入力規則のリストからSheet1の氏名を選択できるようにしておく。 A2セル(住所の欄) =VLOOKUP(B2,Sheet1!B:C,2,0) C4セル(商品名の欄) =INDEX(Sheet2!B:B,SMALL(INDEX((Sheet2!$A$2:$A$10000<>$B$2)*10000+ROW($A$2:$A$10000),),ROW(A1)))&"" A4セル(連続番号欄) =IF(C4="","",ROW(A1)) B4セル(日付欄) =IF(C4="","",INDEX(Sheet2!C:C,SMALL(INDEX((Sheet2!$A$2:$A$10000<>$B$2)*10000+ROW($A$2:$A$10000),),ROW(B1)))) ちなみに、印刷データを特定の条件に絞り込む場合は(印刷データが50件程度なら)、関数を使って印刷データを差し込み印刷が可能なレイアウトの一覧にして、このデータをワードの差し込み印刷を使って、一発で印刷することも可能です。
エクセルでもできると思いますが、アクセスなららくにできるはずです。失礼ながらエクセルで考える気になれません。すみません。
お礼
詳しく教えていただきありがとうございます。 周りの人にも聞いてみましたが、他の回答者の方と同じくACCESSを勧められました。 色々勉強して行かないと・・・。 また機会がありましたらよろしくお願いします。