● Excel+Wordで、明細付きの顧客別差込み印刷をする方法。(顧客別連続切換明細印刷・基本VBAゼロ)
「Microsoft Query」を使用して各種条件も変更できるので一度作ると条件別に印刷が可能です(期間別、ランク別、地域別、明細内容等々)。

★サンプルファイルのダウンロード01(とりあえずの簡易版)

※本サイトのPDFはWord2010でPDF化したせいか、PDFの中にVBAコードなどが書いてあってもそれを正常にコピペできません。Zipの中にモトのdocファイルがあるPDFは、そのdocファイルのほうのVBAコードなどをコピペしてください。無い場合はすみませんが手打ちで入力してください。

・とりあえずのミニサンプル:バージョン2000
(最低限の顧客別明細切り替え連続印刷のサンプル作成方法とサンプルファイル)
http://euc-access-excel-db.com/mag2charge/pos/mini_meisai_every_customer.zip
ダウンロードしたファイルを解凍して、「請求書」フォルダをCドライブのルートに置くと一応、試せます。
「請求書」フォルダ内の「sample01.doc」です。
(2007以降の方は、内容をそのように読み替えてください)

Zipに同梱されるDOCの説明書ファイルの内容はこちら↓(約20ページ)
http://euc-access-excel-db.com/mag2charge/pos/mini_meisai_every_customer.pdf
(2007以降の方は、内容をそのように読み替えてください)

★サンプルファイルのダウンロード02:バージョン2000
(POSデータとMicrosoft Query利用の詳細版)
※まだ半分書きかけですが、途中まででも公開させていただくことにしました。
http://euc-access-excel-db.com/mag2charge/pos/meisai_every_customer.zip

・POSデータをサンプルデータにして、Wordの差し込み印刷機能にて、「明細リスト付きの顧客別請求書」の連続印刷をするサンプル
(「Microsoft Query」利用なので条件別印刷も可能)

Zipに同梱されるDOCの説明書ファイルの内容はこちら↓(現時点では約70ページ。3MB弱)
http://euc-access-excel-db.com/mag2charge/pos/meisai_every_customer.pdf
(2007以降の方は、内容をそのように読み替えてください)

※VBAプログラムは、紙が「もったいなくない。」という場合や、簡易的な帳票なら「ゼロ」です。ただ、場合によってはデータが印刷されない紙が出るので、それが「もったいない」と感じる場合は少し(後述のような)VBAプログラムを使わないといけないと思います。(ほぼコピペして実行するだけなのでそう難しくはありません。)
  
  
*************************
  
Wordでは、Excel側で例えば顧客ごとの何らかの明細リストを作成すると、それを読み込んで「顧客別明細の連続印刷」ができます。

例えば、「顧客別請求書」や「顧客別見積書」などを「連続で印刷する」ことができます。

例えばこんな感じのものです。

これの「10人分のお客様の連続印刷」の、Wordでの印刷イメージのサンプルもありますのでこちらも是非見てください。
  ↓
サンプル01
「Word差込顧客別明細付き請求書」の連続印刷
  (顧客別連続印刷サンプル画面のみです。)

サンプル02
同じExcelPOSレジのソースデータにて
  「社内用顧客別購入履歴」に作り変えての印刷画面サンプル
  (こちらも顧客別連続印刷サンプル画面のみです。)

手数としては、大雑把には次のような感じでできます。
慣れてしまえばぜんぜん難しくありません。(特にWord側のレイアウト)

(a)明細と顧客情報の紐付いた基礎データのExcelファイルを作成(十数分)
 (Microsoft Query 利用がラクはラク)
(b)顧客IDで並べ替え(10秒)
(c)「集計」機能で空白行を作る(5~10分)
 (空白を作ることでWord側で顧客ID別に自動切り替えができます)
(d)Wordの差し込み印刷のソースにそのExcelファイルを指定(2分)
(e)差し込み印刷レイアウトの作成(10~60分:内容による)
 (顧客情報と自社住所、明細表を1枚に収めた請求書のようなレイアウト)
(f)差し込み結果のファイルを表示して保存(1分)
(g)明細ページが2ページ、3ページ、4ページ、とあって、
 差し込み後に無駄な空白の明細ページができてしまったら
 後述のVBAコードでそれを一括削除(無駄な紙の消費を抑えるため)(2分)

この「Word差込顧客別明細付き請求書」の連続印刷サンプルはPDFに変換してありますが、もともとはExcelでの明細データをソースにして作ったWordファイルです。

Wordの差し込み印刷機能で帳票を印刷すると、docファイルとして、こういう「状態」をこのまま「保存」しておけるので便利です。
あとから印刷しなおす時も、いちいちExcelのソースデータファイルが要りません。
顧客名で検索して「現在のページのみ印刷」などでも印刷できるので便利です。
これはAccessにはできません。
Excelはできないこともないけど面倒くさいです。VBAが分からない人にはできないに等しいです。
本記事は「VBAの分からない人が早くやるためのもの」ですので・・・
(後述のVBAはほぼコピペのみなので詳しい意味を知らなくても扱えます。)

ちょっとExcelとAccessをけなしてしまいましたね(^^)。
すみません!いけませんね!

もちろん、Excel帳票にもAccess帳票にもそれぞれWord帳票にはない良さがあります。
でもだからといってWord帳票にもバカにできないくらいの良さがあると思いますので是非、「第三の方法」として、サンプル作成を体験していただき、必要な場面で利用してみてください。

この方法は僕が考えたものでもなんでもなくて、使っている人は10数年以上も前のかなり昔から使ってるお決まりの方法です。

↑上記の印刷画面のみのサンプルPDFでは、「お買い上げ商品の数が多くて明細が2ページにまたいでしまうお客様」のところで、2ページ目に再度、お客様のお名前や請求合計が表示されてしまっていますが、これは、Wordの差し込み印刷のモト文書ファイルのほうで、以下のような処置をすることで解決できます。
・改ページしたうえで、
・もうひとつ明細表をコピペし、
・最初の行の頭にも、フィールドコードの「≪Next Record If≫」を入れる。

上記のようなもので、慣れると10分か15分くらいで、慣れなくてもここのサンプルの作り方さえ読めば、Excelに普段から触っている人なら勉強時間も含めて、1.5~3時間以内くらいには作れると思います。

Accessの帳票機能(「レポート」機能)はちょっと面倒なので1時間では終わらないことも少なくありません。
たとえば、お客様のお仕事関連のことや家族構成や趣味など、各種情報を1ページ目、購入履歴や接客履歴を2ページ目・3ページ目に・・・、などの帳票を作る場合は、1ページ目のレイアウトの罫線を引くのが結構難しいです。
1時間では終わらないことが多いです。(2時間、3時間、とか。慣れるまでは早くて1日、2日、大抵は一週間以上かかると思います。慣れるとそれなりに早くやれるのですが。VBAプログラムをたくさん使うわけでもないので・・・)

半面、Wordを使う場合は、罫線引きがすごくラクです。
「縦の罫線の幅が各行で全く違う・かつ・複数行に渡る表」を作るのがすごくラクですし、接客記録や購入履歴の出力もシンプルでいいなら手間がかかりません。前述のAccess帳票のようなものでも、モトのデータさえあれば15分~30分くらいで、長くても1時間くらいで作れると思います。
Accessの帳票機能(「レポート」機能)は、モノによっては「テキトーに作る」のでも結構大変なんです。特に罫線の多いものは大変です。

Excelなんてさらにもっと大変ですね。
そもそも縦の罫線が自由な位置で引けないですし、明細の罫線も自動可変じゃないですし・・・。
(セル結合が増えるとさらに面倒に・・・)
多少凝ったデザインだと「1ページ分ってどっからどのへんまで?」なんてことを考えながら作らないといけないので、作り変えるのも大変ですし やる気起きません。
顧客別や取引先の連続印刷なんてとても作る気起こりません。

面倒くさすぎて・・・。

特に兼任SEさんや普通の事務や営業の方々にはそんなヒマ無いですので・・・

(またExcelをけなしてしまいました!ダメですね!ごめんなさい。でもほんと、Excelの顧客別やお取引先別のサマリー付の明細印刷は大変なんです。というか僕はやったことすらありません。1組だけのサマリー付き可変明細行帳票を作るだけでもすごく大変でした・・・。VBA必須ですし。作り変えももちろんVBAを使わないと無理ですのですごく面倒くさいです。Accessはもとから明細行は可変なので罫線さえ多くなければExcelよりはだいぶラクです。Accessのレポート機能はサブフォームも埋め込めるので便利ですし、VBAも使えて細かく制御はできますので、Accessでできない帳票印刷っていったら「相当」なレベルだとは思います。でもAccessのレポート機能でできないものもあるでしょうからその場合はExcelでやるしかないか・・・という感じです。今のところ過去にそういう事態に陥ったことはないのですが、でももし実際そんな場面に遭遇したら、「あきらめてください」と言ってしまうかもしれません・・・。ボーナスもらえるならやるかもしれませんけど・・・。)
  
  
  
いろいろと書いてしまいましたが、「Excel+Wordでの明細付きの顧客別差込み印刷」のように、データベースシステムの帳票をWordで作成・印刷することは、例えば次のようなときに便利です。

・Accessの「レポート」で帳票作成・印刷をするのが面倒なとき
・Accessの「レポート」の知識が無くて
  顧客別や取引先の連続印刷の仕組みが作れない時
・Accessの「レポート」の仕組みを学習し始めたとき、
  ある程度「レポートの動き」を把握するまでの代替方法として
・Excelでの顧客別連続帳票印刷だとVBAが必要なので面倒くさいとき
・ExcelVBA知識が無くて顧客別や取引先の連続印刷の仕組みが作れない時
・Excelの「帳票印刷」の仕組みをVBAで作れるようになるまでの代替方法として
・「凝ったレイアウトじゃなくてもいい帳票」の作成や印刷をしたいとき
  (TPOを考えて、その中でパパパッと片付けてしまいたいとき)
・社内用に、お客様別の住所や家族構成などの各種情報入りの
  購入履歴明細や接客履歴(カルテ)などを作るとき
  (社内用なので凝ったレイアウトにはしないとき)
・本番用の帳票を作る前のとりあえずの見本・たたき台としての出力
・請求や見積明細ではなくてDMハガキなどを作りたいときは、
  WordのほうがExcelやAccessで印刷するよりも絵付きのデザインを変えやすい

ただ、Wordの表の操作に慣れてないといけないかもです。
そう難しくはないとは思いますが、ただひとつ面倒なのは、表を作ったときになぜか、各セルの中に日本語を入力したときにセル幅いっぱいまでちゃんと入力できないことがあります(異常に狭い範囲しか入力できずにちょっと入力しただけで数行になってしまうパターンです)。
そんなときは上側のルーラーをいじることで解決できます。
なんでそうなってしまうのかは分からないのですが・・・。

でも、逆に、困ることってそれくらいかもしれないです。

あと、
・VBAや自動化はわからない。でも備考やその他の項目において
  イレギュラーなレイアウトのイレギュラーな注釈を入れたい・・・
というときも、Wordの差し込み印刷での帳票作成ならやりやすいです。

というのも、Wordでは前述のとおり、差し込み印刷のモト文書から、全顧客の全明細データの入った印刷用のファイルを別口で作って保存しておけるからです。

つまり前述のWord差込請求書サンプル01と全く同じ形態で、docファイル、docxファイルが作れるのです。

これはVBAのわからない人にとっては便利です。

イレギュラーな注釈なんてそうそうはないので、それを書き込むお客さまの数もしれていますし、この形態のWordファイルなら、お客様名で検索をかければ、すぐにそのお客様のページも見つかりますので処理も簡単です。
もちろん、ソースデータのExcelファイルの備考に書き込んでおいてもいいのですが、そういうものよりももっとイレギュラーな書き込みをしたいときなどに便利です。(備考欄が狭すぎて書ききれない場合とか)

========================================

●特定のページを削除するWordVBAコードの外郭

一応無い知識とWeb検索を動員して作ってみましたが、僕のほうでは動きましたが、自己責任でお試しくださいませ。

以降、カーソルのある行の(次ページに行ったときの先頭行の)先頭文字が合致したページを削除するサンプル
9ページあるWordファイルのうちの、3ページ目と6ページ目を削除する例
各ページの先頭の一文字に、ページ番号を半角数字で入れてから実行します。

「Left(Selection.Sentences(1).Text, 1) = "6"」の行を
空白ページ=Left(Selection.Sentences(1).Text, 1) = "" とか
空白ページ=先頭行が空白行だというWordファイルなら、
そういった判断文に変えることで、空白ページを削除できると思う

大変参考になったWebページ

ページ毎に処理を行うWordマクロ
https://www.ka-net.org/blog/?p=4890

  
2017/05/08 追加
  
2ページ目、3ページ目の余計な空白明細が発生したとき、それを一括削除するプログラムができたのでご紹介します。 https://www.ka-net.org/blog/?p=4890 を参考にした前述のサンプルを書き直しただけのものです。

このコードでは、指定した位置の明細表の1行目を調べて、最初の文字が空白(vbcr)だったらそのページを削除する、というものです。
この例では 2ページ目以降の明細表の位置としては、「空白行が2行→列名→明細の1行目」、ということで、ページ全体からすると、表の始まりが3行めから、明細の1行目が4行目から、そういったケースを想定しています。(≒先頭行1+3行移動=4行です。)

明細の位置にともなって、
「Selection.GoTo What:=wdGoToLine, Which:=wdGoToNext, Count:=3」の「Count:=3」の値を変えます。

差し込み印刷の差し込みしたのちの生成されたWordファイルでの編集時では、バージョン2000でも2010でも、セクション区切り記号を改ページ記号にすべて置換しないと正常動作しませんでした。
置換は、ワイルドカード利用のモードにて、なぜか「^m」を「^m」に置換すると、セクション区切り記号が改ページ記号に置換されます。そのあと、以下のコードを実行します。
(もうひと手間必要な場合もありますので、その件はこのページの上のほうのPDFをごらんください。

サンプルのdocファイルのZIPも作りましたので、そちらで動作確認もできます。
http://euc-access-excel-db.com/mag2charge/pos/zero_table__delete.zip
解凍すると表示される「空白明細ページの削除テスト.doc」というファイルです。
サンプルは削除対象の空白の明細が3ページ目にあって、そのページだけを削除するサンプルです。
表の始まりは2行目から、明細内容の1行目が3行目から始まっているので「Count:=2」となっています。

では、以下、この削除用のコード内容です。(上記のdocファイルとはと少し内容が違います)

  
========================================
  

  
  
*******************

※Wordファイルを作ったら、列名を変えるところまで(列名はWord側と代わると訂正を求められるので、変えたほうがいい。)

次回やるときに、列名を残してコピペしたいので、空白3列は表の左側に作ったほうがいい。
消すときは列名を残す。
列を増減させない・列を入れ替えない。→列の名前でデータをひっぱっているわけではなく、何列目の列かでデータを引っ張っているので、列構成が変わると、Word側に表示される明細内容が変わってしまうので。

●Wordファイルの準備

【Word2000の場合】

2枚目に続きを表示するときは、「改ページ」を入れる。でないと1枚目の途中から2枚目の明細が印刷されてしまうので。
改ページを入れるまでは、差込み前の設定画面では、明細行の高さが2行になってしまったために2ページにわたってしまっても、明細行1行で1ページ目に表示されるので心配ない。

フィールドを明細の2行目にセットしてから、印刷用の列名、を決めたほうがいい。

個別に直したい場合は、差込文書を作って保存してから
Excel側の備考に書き忘れた 備考内容を 個別に印刷したい場合は、これも、差込文書を作って保存してから

以上、Word2000の場合でした。

●消費税、小計、の表示
●一回作っておけば、期間を変更するなどをしても、使えます

基本的に毎回変更するのは、
・集計期間やその他の条件をかえて、Microsoft Queryでリストアップしなおす
・空白列をつくって~のくだり集計して 合計を 「=SUMIF($C$2:$C$100,D2,$N$2:$N$100)」ところまで。
と、最後の合計行を削除

あとは、一回作ったワードがあれば、何回でも使えます。

Excelでソースを別のシートにコピペするときに、VBAを使って、ラクに現在のデータの削除と値の貼り付け、列挿入や加工・集計ができるようにするといいと思います。
マクロの記録、ショートカットキーとSendkeysを利用したプログラムでもいいと思います。

●アレンジ
(01)社内資料として、上部にお客様名やご住所を書いて、リストアップする
(02)ローラー作戦用住所リストの作成
顧客名簿の住所分割をどこまでやるか?→ローラー作戦するなら、番地も分ける。
町、丁目、番、などでローラーする範囲を分けることが多いから。
町、丁目、番、も列を分けて入力されていると、それで並べ替えができるので、それをリスト化できるから

●3段階の集計はできるか?
たしかできたと思う。顧客1人あたりに、明細の空白行を2つ入れて、別のNext Record Ifの基準列を作るなどして(ダメかもしれないけど試す価値はあり)

●Accessでできない、挿絵入りのDMを作るときにも使える

作り変えて印刷
期間を変えて印刷
条件をかえて印刷

よくやる帳票印刷処理

列の並びはかえない。おおもとのpos.xlsはWordファイルの直接のソースではないので列の並びを変えてもいいけど、
Wordファイルの直接のソースのxlsは列の並びを変えると表示されるデータが変わってしまいます。

ラベル印刷

送り状印刷など

バーコード印刷

=========================

DOCファイルの目次 meisai_every_customer.doc

=========================

第1章 Excel+Wordでの帳票印刷機能の作成について
第1節 ExcelとWordだけでの連続印刷機能のメリット
第2章 どのようにすると明細付きの顧客別文書が作れるかの概要
第1節 Excelデータをどう持つとWordにどのように読み込まれるかの概要
第2節 Word側のどの位置にExcel側のどのデータが吸い込まれるか?の概要
第3節 Excel側のデータを準備する方法・手順などの概要
第1項 空白行を入れる
第2項 「売上合計」列を作る
第3項 重複値のチェックと必要に応じての集約
第4項 空白行や請求合計列を入れる前の段階で、顧客情報を全行同じ値で埋めるには?
Chapter1 オートフィルで埋める方法
Chapter2 Microsoft Queryで埋める方法
第4節 Excel側のセル書式(\マークやカンマなど)のWord側への反映について
第3章 簡単なサンプルについて
第4章 社外向けの文書の場合の作成方法(見積書や請求書など)
第1節 Excel側の準備
第1項 POSデータのセットと顧客ID列の確認
Chapter1 POSデータのダウンロードと解凍・設置
Chapter2 POSデータの中に、顧客IDの列があるかの確認
§1 C:\pos\pos.xls を開いて、顧客マスタと売上明細自体があるかを調査
§2 顧客マスタ(「T顧客マスタ」シート)のチェック
§3 売上明細(「T売上明細」シート)のチェック
第2項 連続切替印刷請求書のソースデータ用ファイルの準備
Chapter1 POSレジデータとWordファイルの中間に位置するExcelファイルを作成
Chapter2 顧客マスタと売上明細をリレーションさせた結果を表示するシートの名付け
Chapter3 POS内の顧客マスタと売上明細(レジデータ)のリレーション結果を「リレーション結果」シートに表示
§1 「リレーション結果」シートの「A1」をクリック
§2 Microsoft Query の画面を開く
§3 子ウィンドウを最大化
§4 Microsoft Queryのメイン画面の各部名称について
§5 テーブルペインの「T売上明細$」テーブルを少し右へずらす
§6 スクロールで「T顧客マスタ$」の「顧客ID」を探す
§7 スクロールで「T売上明細$」の「顧客ID」を探す
§8 リレーションさせる(T顧客マスタ$とT売上明細$を「顧客ID」で)
§9 データペインで仮想表の確認
§10 並べ替え(顧客IDと売上日付で)
§11 Excelへこの結果を返す(表示する)
§12 ★(補足)必要な列だけに絞り込んで抜き出す方法
Chapter4 ウィンドウ枠の固定
Chapter5 顧客ベースの明細の最大件数を調べておく
§1 「リレーション結果」シートを表示
§2 ピボットの作成
§3 最大件数を調べる(降順の並べ替えで)
Chapter6 列の並びを変える(Word側で作業しやすくするため)
Chapter7 別シートに値のコピペ
Chapter8 ウィンドウ枠の固定
Chapter9 別シートのリネーム
Chapter10 コピペしたシートを一番左にもってくる(Excel2000+Word2000の時のみ)
第3項 重複値の調査(顧客IDなどキーとなる列内で)
第4項 必要に応じて重複分を移動させて集約する
第5項 集計用のための(空白行を作るための)ダミー列等の作成
Chapter1 空白の列を、最左に、3列挿入
Chapter2 最左に「連番」列を作成
Chapter3 2列目、3列目に顧客IDの複製の列を2つコピペ
Chapter4 ひとつを「グループID」列に、もうひとつを「ダミー集計用」列にリネーム
第6項 売上合計列を作る
第7項 金額の列のセル書式を「通貨」にする
第8項 空白行を作る
第9項 「集計」の総合計の行を削除(シートの一番下)
第10項 連番列に値を入れる
第11項 列名の変更(Word側で作業しやすいように短い列名に変更)
第2節 Word側での請求書レイアウトデータの準備
第1項 Wordファイルの作成
第2項 Excelファイルの読み込み指定(Word2000の場合)
Chapter1 差込印刷ヘルパーダイアログの表示
Chapter2 「メイン文書」の決定
Chapter3 読み込むExcelデータの決定
第3項 請求書レイアウトの作成
Chapter1 「請求書」と入力
Chapter2 お客様名を表示する部分の設定と「様」の入力
Chapter3 合計金額を表示する部分の設定と「円」の入力
§1 Excel2002~2016などの場合の追加書式設定
Chapter4 明細を入力する表の作成
Chapter5 列名の入力と二重罫線の書き込み
Chapter6 明細の1行目の表示内容の決定
§1 Excel2002~2016などの場合の金額部分の追加書式設定
Chapter7 明細の2行目の表示内容の決定
§1 「Next Record If…(X)」の挿入
Chapter8 3行目から最終行までの設定
Chapter9 上書き保存
第4項 印刷プレビュー
Chapter1 顧客切り替え連続印刷状況のプレビュー
第5項 プレビュー結果の保存
第6項 明細行を2ページ、3ページと増やす場合
第7項 不要なページの削除(明細がすべて空白のページの削除)
Chapter1 処理の流れ
§1 Word2000の場合
§2 Word2010の場合
Chapter2 Word2000の場合の対処法
§1 セクション区切り記号を改ページ記号に変換
§2 一番最後の表の直下に改ページ記号を入れる(もしなければ)
§3 VBAプログラムを実行
†1 VBAプログラム内容
†2 標準モジュールへのコピペ
†3 プログラムの数値1文字を修正(明細表の位置に応じて変えます)
†4 プログラムの実行
†5 状況のチェック
§4 一番最後の表も無い空白ページを削除
Chapter3 Word2010の場合の対処法
§1 セクション区切り記号を改ページ記号に変換
§2 標準モジュールへのプログラムのコピペ
§3 プログラムの数値を1文字だけ修正
§4 VBAプログラムを実行
§5 VBAプログラムをさらに繰り返し実行
§6 状況のチェック
§7 一番最後の表も無い空白ページを削除
Chapter4 プログラミングコードのおおまかな処理内容
第8項 MSQuery側の列名をWord側の列名と同じにする
第5章 社内文書の場合の作成方法(顧客購入履歴やカルテ的なものなど)

=========================

DOCファイルの目次 mini_meisai_every_customer.doc

=========================

第1章 本書の利用目的について
第2章 何をするのか?
第3章 Excelデータの準備前に・・・
第4章 Excelデータの作成と配置
第5章 Word側での請求書レイアウトデータの準備
第1節 Wordファイルの作成
第2節 Excelファイルの読み込み指定(Word2000の場合)
第1項 差込印刷ヘルパーダイアログの表示
第2項 「メイン文書」の決定
第3項 読み込むExcelデータの決定
第3節 請求書レイアウトの作成
第1項 「請求書」と入力
第2項 お客様名を表示する部分の設定と「様」の入力
第3項 合計金額を表示する部分の設定と「円」の入力
Chapter1 Excel2002~2016などの場合の追加書式設定
第4項 明細を入力する表の作成
第5項 列名の入力と二重罫線の書き込み
第6項 明細の1行目の表示内容の決定
Chapter1 Excel2002~2016などの場合の金額部分の追加書式設定
第7項 明細の2行目の表示内容の決定
第8項 3行目から最終行までの設定
第9項 上書き保存
第6章 印刷プレビュー
第1節 顧客切り替え連続印刷状況のプレビュー
第7章 プレビュー結果の保存