• ベストアンサー

【WORD差し込み印刷】複数レコードを1ページに。

差し込み印刷について伺います。 エクセルでデータファイルを作り、ワードで印刷するものです。 エクセルファィル 鈴木 辞典 1冊 鈴木 新書 2冊 佐藤 週刊 1冊 佐藤 専門 3冊 ワード 鈴木さんの購入した本は以下の通りです。  辞典 1冊  新書 2冊 というように、複数のレコードを氏名ごとに1枚の通知文にしたいと考えています。 フィールドコードなどで、名前を判断し改ページができるような方法があれば教えてください。  

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

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

#2です。補足ありがとうございます。 >複数レコードを1ページとして印刷(しかも、名前ごとに)するところがなかなか難しいです。 >名前(前のレコード)と名前(今のレコード)を比較する関数(?)やデータを格納できる任意の変数があればよいと思うのですが・・・。 おしゃることは良く判ります。ワードのフィールドでの回答が出れば良いのですが、まず難しいでしょう。私も勉強させてほしいのですが。しかしOKWEBを見つづけて3年、これに類した質問回答は今までありませんでした。 ○私のお勧めに対しての反応は今一つですが、下記をやって見てください。いろいろ応用が効きます。 (データシート)Sheet1のA2:C5に 鈴木 辞典 1冊 鈴木 新書 2冊 佐藤 週刊 1冊 佐藤 専門 3冊 氏名順にソートしてあること。 (印刷物シート)Sheet2の C3に「さんの購入した本は以下の通りです。」 と文言をいれます。B2に「注文書」とかいれるのも 不動文字は自由です。C4:D18は注文明細のために 空白にしておいてください。 (プログラム) ツール-マクロ-VBEでVBE画面に変ります その画面で-挿入-標準モジュール で出てきた画面に下記を貼りつける。 Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet '----A Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") '-----B d = sh1.Range("A2").CurrentRegion.Rows.Count MsgBox d j = 5 '---第1データ分セット m = sh1.Cells(2, "A") sh2.Cells(3, "B") = m sh2.Cells(4, "C") = sh1.Cells(2, "B") sh2.Cells(4, "D") = sh1.Cells(2, "C") '-----第2行以下処理 For i = 3 To 1 + d If sh1.Cells(i, "A") = m Then '-----名前前行と同じ sh2.Cells(j, "C") = sh1.Cells(i, "B") sh2.Cells(j, "D") = sh1.Cells(i, "C") j = j + 1 Else '------名前前行と変ったとき印刷とクリア sh2.Range("A1:f20").PrintOut sh2.Range("c4:d18").ClearContents '-------名前変化後分のデータセット m = sh1.Cells(i, "A") sh2.Cells(3, "B") = m sh2.Cells(4, "C") = sh1.Cells(i, "B") sh2.Cells(4, "D") = sh1.Cells(i, "C") j = 5 End If Next i sh2.Range("A1:f20").PrintOut End Sub プリンタに上をセットして そしてメニューの実行-SUB/ユーザー・・をクリック。 (結果) 鈴木 さんの購入した本は以下の通りです。 辞典 1冊 新書 2冊 と 佐藤 さんの購入した本は以下の通りです。 週刊 1冊 専門 3冊 の2枚の紙がプリンタから出てきます。 1人15冊以上注文がある場合は手直しが必要ですが、今回は略。

kiku2327
質問者

お礼

アドバイスありがとうございます。 WORDへの差込印刷だけしか思いつかなかったのですが、EXCELのマクロがあったとは目から鱗です。 早速試してみます。

その他の回答 (3)

回答No.3

Accessを使えるなら早いように思いますが、エクセルデータファイルをワードで差し込み印刷となると、、意外に難しいですね。NO.1の方の補足にありました、元ファイルを変更すると他へ影響があるとのことですが、コピーしてもう一つ同様のファイルを作ってから加工するとか、エクセルのピボットテーブルで、ページエリアに購入者名を配置し、ページごと表示にすれば、あっという間に、個人集計が可能となるかと思います。説明下手ですみません。参考になれば。

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

小生は判ってないのですが、質問への直接の回答でなくて済みません。 (1)フィールドコードなどで おっしゃる通り、挿入-フィールド-フィールドの名前 に出てくるIfやNext(Record)などの英語の 語句を駆使すると、お望みの処理が出来るらしいとかねてから睨んでいて関心があります。 一種のプログラムを組むようなものでしょう。フィールド コード自体がワードの中で異色な感じがします。 しかし、解説した書籍やWEBサイトがなくて、判らずじまいです。1000ページぐらいのワードの本数冊にも、あまり記述がありません。 (2)それで ワードで差し込み印刷せず、エクセルVBAで処理する方 法もあることを御紹介します。 印刷物をデータ記録シートと別シートにして、名前が変るまで同一印刷シート次行にデータをセットし名前が変るとシートを印刷します。 ラベル印刷の例が殆どですが、過去に何度も質問があります。 http://okweb.jp/kotaeru.php3?qid=797145などの小生の回答を参考にご覧下さい。 印刷シートをエクセルのシートで設計してデータをセットするセルを決めて貰うこと、データシートで名前の入っている列や、印刷する項目列を教えてもらえれば、15行程度のVBAプログラムで、エクセル内の処理が出来ます。

kiku2327
質問者

補足

アドバイスありがとうございます。 複数レコードを1ページとして印刷(しかも、名前ごとに)するところがなかなか難しいです。 名前(前のレコード)と名前(今のレコード)を比較する関数(?)やデータを格納できる任意の変数があればよいと思うのですが・・・。 ワード 鈴木さんの購入した本は以下の通りです。  辞典 1冊  新書 2冊 ++改ページ+++++++++++++ 佐藤さんの購入した本は以下の通りです。  週刊 1冊  専門 3冊

  • goomika
  • ベストアンサー率26% (66/251)
回答No.1

データファイルを修正されたらいいですよん。 鈴木 辞典 1冊 鈴木 新書 2冊 佐藤 週刊 1冊 佐藤 専門 3冊 ではなく、    辞典 新書 鈴木 1冊 2冊 佐藤 1冊 3冊 そして、差込印刷の設定したらOKです。     

kiku2327
質問者

補足

アドバイスありがとうございます。 実際のデータは行700、列10のデータです。 なかなか、元のファイルを加工するのは他への影響もあり、なかなかできない状況です。

関連するQ&A