エクセルでワード差込印刷をグループ毎に保存する方法はありますか?

このQ&Aのポイント
  • エクセルでワード差込印刷を行い、グループ毎に保存する方法を教えてください。
  • 各レターの編集で、特定のグループごとにワードで文書を保存したい場合、マクロを使用して自動化することができます。
  • 具体的には、D列の特定のグループの最初のレコードと最後のレコードを指定し、ワードファイルを保存する作業を3回行います。
回答を見る
  • ベストアンサー

ワ ード 差込印刷 グループ毎に保存 マクロ

お世話になります。 エクセルで、次のようなデータを作り、ワード差込で レター を5つ作成します。 各レターの編集で、D列の第1~第3グループ毎まとめてワードで 文書保存したい ため、「最初のレコードと最後のレコー ド」を指定 して、ワードファイルを保存する 作業を3回行っております。 これを、マクロでD列を指定して、自動で保存するよ うにはできるものでしょうか。 第1グループには、佐藤さん田中さんの2枚つながったワード文書で保存、 第2グループには、菊地さん武田さんの2枚つながったワード文書で保存、 第3グループには、今井さん1枚のワードで保存 それぞれ、ファイル名はそれらのグループ名で保存できたら とても助かります。     A     B     C     D 1  コード   氏名   金額  グループ 2   001   佐藤    10    第1 3   002   田中    50    第1 4   003   菊池    20    第2 5   004   武田    30    第2 6   005   今井    25    第3 以上、どなたかお知恵を拝借できませんでしょうか。 どうかよろしくお願い致します。

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

  • ベストアンサー
  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.1

やろうとしていることと違っているかもしれませんがご参考までに。 ---------- エクセルのシートはご質問にあるとおりのフォーマットで作成。 エクセルファイルと同じフォルダ内に「雛形.doc」として文書の雛形を作成しておく。 雛形内には、 xxx 999 000 ggg という文字列があり、エクセルの明細行ごとに、 xxx →氏名 999 →コード 000 →金額 ggg →グループ に置き換わります。 出来上がった文書はグループごとに「グループ名.xls」で保存されます。 ------------ Sub SaveFiles() Dim wdObj As New Word.Application Dim wdDoc As Word.Document Dim wordPrototypeFile As String Dim wordFile As String Dim i As Long Dim lastrow As Long Dim newFlag As Boolean wordPrototypeFile = ThisWorkbook.Path & "\雛形.doc" '雛形のファイル lastrow = Range("A1").End(xlDown).Row wdObj.Visible = True wdObj.Documents.Open Filename:=wordPrototypeFile, ReadOnly:=True '読み取り専用で開く wdObj.ActiveDocument.Content.Copy 'クリップボードにコピー wdObj.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges '保存しないで閉じる For i = 2 To lastrow wordFile = ThisWorkbook.Path & "\" & Cells(i, 4).Value & ".doc" '編集するファイルを「グループ」で判定 If Dir(wordFile) = "" Then 'ファイルが存在しない場合は新規作成 wdObj.Documents.Add newFlag = True Else wdObj.Documents.Open wordFile 'ファイルを開く newFlag = False End If If newFlag = False Then '既存ファイルの場合は文末に改ページを挿入 wdObj.ActiveDocument.Characters.Last.Select wdObj.Selection.InsertBreak Type:=wdPageBreak End If wdObj.ActiveDocument.Characters.Last.Select '文末にカーソル移動、雛形を貼り付け wdObj.Selection.PasteAndFormat (wdPasteDefault) wdObj.ActiveDocument.Content.Select '文書全体を検索範囲にする With wdObj.Selection.Find '雛形上の999をコードに置き換える .Text = "999" .Replacement.Text = Cells(i, 1) .Forward = True .Execute , , , , , , , , , , wdReplaceAll End With With wdObj.Selection.Find '雛形上のxxxを氏名に置き換える .Text = "xxx" .Replacement.Text = Cells(i, 2) .Forward = True .Execute , , , , , , , , , , wdReplaceAll End With With wdObj.Selection.Find '雛形上の000を金額に置き換える .Text = "000" .Replacement.Text = Cells(i, 3) .Forward = True .Execute , , , , , , , , , , wdReplaceAll End With With wdObj.Selection.Find '雛形上のgggをグループに置き換える .Text = "ggg" .Replacement.Text = Cells(i, 4) .Forward = True .Execute , , , , , , , , , , wdReplaceAll End With If newFlag = True Then '新規ファイルの場合は名前をつけて保存して閉じる wdObj.ActiveDocument.SaveAs Filename:=wordFile wdObj.ActiveDocument.Close Else '既存ファイルの場合は保存して閉じる wdObj.ActiveDocument.Close SaveChanges:=wdSaveChanges End If Next wdObj.Quit End Sub 以上です。的外れだったらすみません。

teruku106
質問者

お礼

MSZ006様 早速のお答えありがとうございます。 ご教示の通り入力したのですが、2行目で構文エラーが生じてしまいました。 また、 「出来上がった文書はグループごとに「グループ 名.xls」で保存されます。」とのことでしたが、これはexcelでなくwordでそれぞれ保存したいと思っております。 図々しく申し訳ございませんが、どうか引き続きお助けいただけますでしょうか。よろしくお願いいたします。

その他の回答 (6)

回答No.7

No.3の回答者です。 お礼に書かれた追加については、私なりに考えてみました。 グループの列のデータが提示したものだと、私が提示したマクロ を書き換えても無理かと思います。 「店のコード+店名」の形式だと、単純な「第1」のような形式と 違って、変数名Gnameに対応できないものなので。 ですから、「グループ」の列以外に単純なグループ名(第1など) の列はできないのでしょうか? Excel側で単純にできる列を用意ができれば、それをもとにして マクロで可能になります。また、差し込みフィールドを使って、 IFフィールドの対象にすることもしやすくなります。 差し込み印刷をするためのデータソースは、できるだけ単純で、 シンプルなもののほうが楽に作業ができますし、応用もしやすく なります。 Excelは関数などを使ったり、作業列を使うなりして、データを 工夫しやすいソフトだと思っています。 データソースをいじることができないなら、別ブックやシートに 差し込み専用のもの用意して作業することをお勧めします。 「店のコード」と「店名」の列を分けるなどをしても、マクロが 不得意な私には、追加アドバイスができるほどのスキルはなく、 希望に添えませんので、新規質問をするなどして、他の回答者が アドバイスをしてもらえるようにしたほうがよいかと思います。

teruku106
質問者

お礼

enunokokoro様 ご確認ありがとうございます。 「0000&お店名」 について分けての対応ということで承知致しました。 各ワードのファイル名にお店名がでるようにしたかったため、このような名前にしておりました。 一旦コードとお店名を分けて作業してみたいと思います。 この度は大変お世話になりました。 ご回答頂き感謝申し上げます。 また何かの機会にお知恵を拝借できたら幸いです。 その際には、どうぞよろしくお願い致します。

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.6

MSZ006です。 解決されて何よりです。 一点補足です。 雛形内の文字列ですが、金額の箇所が"000"としてありますが、、置き換える金額が1000等、"000"が含まれる場合に誤動作してしまうことがあります。 "000"ではなくて別の、通常現れ得ないような文字列にしたほうがよかったと、ふと思いました。(他の項目についても同様です) (文字列を変更した場合はそれに合わせてコーディングも変更してください。)

teruku106
質問者

お礼

MSZ006様 文字列変更の件ありがとうございます。 作業時にそのように気を付けたいと思います。

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.5

#4です。 >コンパイルエラー >ユーザー定義型は定義されておりません。 >とでます。 綴りが間違っている(タイプミス)のときに出ることが多いですので、 2行目、 Dim wdObj As New Word.Application タイプミスがないか、もう一度ご確認をお願いします。 それから先ほど解答しました、VBエディタ画面の「ツール→参照設定」で、 「Microsoft Word 11.0 Object Library」にチェックが入っているか再度ご確認をお願いします。 似たような名前で、「Microsoft Office 11.0 Object Library」というものにすでにチェックが入っていると思いますが、 これではなく、「Microsoft Word 11.0 Object Library」ですのでご確認をお願いします。

teruku106
質問者

お礼

大変失礼いたしました。 ご想像の通り、よく似たチェックボックスと勘違いをしてしまってました。 無事に作業が出来ました! もう一つのご回答頂いております方法も良さそうなので、両方試してみたいと思います。 全くの初心者に対し親切でご丁寧なご指導を頂きましたことに感謝申し上げます。 また機会がございまいましたら、どうかよろしくお願い致します。

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.4

MSZ006です。 私もword2003/excel2003を使っているのですが・・・何でしょうね。 もしかしたらword文書のほうにマクロを記述されていますか? 私の解答の方法はエクセルシートのほうにマクロを記述する方法となっています。

teruku106
質問者

補足

MSZ006 様 引き続きありがとうございます。 エクセルの方へ記述して試しております。 出てくるエラーは、 コンパイルエラー ユーザー定義型は定義されておりません。 とでます。 okを押すと、 1行目 Sub SaveFiles() が黄色くなり、 2行目 wdObj As New Word.Application が白抜き文字の範囲選択された状態となります。 このようなご報告で伝わりますでしょうか・・・。 どうぞよろしくお願い致します。

回答No.3

ExcelのマクロでWordの差し込み印刷を制御したいのでしょうか? 差し込んだWord文書に登録して利用するなら、以下のマクロでも 可能かと思います。 マクロは得意でないので、記録マクロから編集したものですが。 (Word2003以前を対象にしています) Sub MailMerge_DataSource_Query() Dim Gname As String Dim Fname As String Dim i As Long ' ここで指定範囲「第1」などの最初と最後を指定 For i = 1 To 3  Gname = "第" & i ' クエリでグループ名を指定したままだと新しい指定が無効になる ' 場合があるので、データソースを再設定して対応。  ActiveDocument.MailMerge.OpenDataSource Name:= _ "データファイルへのパス\ブック名.xls", _  SQLStatement:="SELECT * FROM `シート名$`" ' OLE DB形式で設定済みのシート名とレコード名とクエリ ActiveDocument.MailMerge.DataSource.QueryString = _  "SELECT * FROM `シート名$` WHERE `グループ` = '" & Gname & "'" ' 新規文書への差し込み  With ActiveDocument.MailMerge   .Destination = wdSendToNewDocument .SuppressBlankLines = True With .DataSource .FirstRecord = wdDefaultFirstRecord .LastRecord = wdDefaultLastRecord End With .Execute Pause:=True End With  Fname = Gname & ".doc" ' ファイル名を指定 ActiveDocument.SaveAs FileName:=Fname ActiveDocument.Close Next i End Sub

teruku106
質問者

お礼

enunokokoroさま ご回答りがとうございます。 出来ました! 恐れ入りますが追加でご質問させてください。 グループの列へはexcelにおいてソートかける都合から次のような名前を付しております。 0001東京支店 0002大阪支店 0003福岡支店 1001新宿営業所 1002札幌営業所 このような場合、どのように書き換えたら宜しいでしょうか。 基本的なことをわかっておらず申し訳ございませんが、どうか宜しくお願い致します。

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.2

MSZ006です。補足を見ました。 すみません、書き間違えました。保存先は「グループ名.doc」です。 あと、大事なことを忘れていました。 VisualBasicEditorの画面で、メニューバーの「ツール」→「参照設定」で、 「Microsoft Word 11.0 Object Liblary」にチェックを入れてください。 (11.0のところは環境によっては違う数字かもしれません)

teruku106
質問者

お礼

チェックは入っているのですが、同様のエラーが生じてしまいます。 当方ワードエクセルともに2003を利用しております。 その他ご指導のことは行ったつもりなのですが・・・。 最新のワード等利用しないと動かないものでしょうか。 無知で申し訳ないです。

関連するQ&A

  • 差込印刷のセクション別印刷

    Word2000を使っています 封筒を差込印刷ヘルパーを使って作成し、 新規文書として保存し 任意のページを印刷しようとしたところ 印刷できません(印刷範囲を指定しています) 新規文書として保存した Word文書の欄外左下に 0ページ 1セクション  1/24と表示されています 通常複数ページある文章は 10ページ等と表示されて います。 任意のページのみを印刷する方法を教えてください よろしくお願いいたします

  • Word2003での差込印刷 - データソースが保存されない

    ■環境 ・WinXP(SP2) ・MS Word 2003 / Excel 2003 Excelでデータを作り、それをWordにデータの差し込みを行って、文書を 作成し、利用しておりました。 ところが今回、Excelのデータの場所とファイル名が変更になりました。 Wordを開くと、 -------------------------------------------------------------- この文書を開くと、次のSQLコマンドが実行されます: SELECT * FROM '××××$' データベースからのデータが、文書に挿入されます。続行しますか?   「はい」  「いいえ」 -------------------------------------------------------------- というダイアログが表示されます。 データのパスが変わりましたので、「はい」をクリックして、 「データファイルの選択」ダイアログから新しいパスを参照するように 指定して、そのまま上書き保存を行いました。 けれども2度目にまたそのファイルを開いてもその情報は保存されず、 再び「データファイルの選択」ダイアログが開きます。 以前は「はい」で文書が正常に開かれていたのですが、一体何が原因 として考えられますでしょうか? なぜデータソースのパスが保存されないのでしょうか。 毎回データを指定するのも手間がかかりますので、以前のように自動的に 読み込んでくれれば、と思います。 原因や対処法にお心当たりのおありの方は、ご助言いただけますと幸いです。

  • 差し込み印刷の「新規文書の差込」について

    Word2003とExcel2003です Excelデータをワードの封筒に差し込み印刷で差し込み印刷終了後「各レターの編集」で「新規文書への差し込み」をクリックして、ワードに全データを差し込むと「セクション区切り」で「次のページ」となりますがこれを「改ページ」で次のページを表示させたいのですができますか 理由は、抜き出し印刷をするときにページ指定がすぐわかるように各ページにページ番号を隠し文字で挿入したいのです。 「セクション区切り」で改ページするとページ番号がすべて「1」で表示され、一つ一つ前のセクションから続きを設定しないと続き番号になりませんので面倒だからです。

  • ワードでの差込印刷の差し込みフィールドが表示されない

    ワード2000を使用して差し込み印刷を作成しようとしていま。 エクセルで差込データを作成し、保存しました。 データをあてはめる原本をワードで開いて、差込印刷ヘルパーを開き、定型書簡を作成←作業中のウィンドウをクリック データファイルの指定でエクセルのデータファイルを開き、メイン文書の編集をクリックしました。 その後にマニュアルには差し込みフィールドの挿入で入れたいデータを指定できるとありますが、 Ask(問い合わせ)(A) Fill-in(文字列の書き込み)(F) If…Then…Else(If 文) Merge Record #(レコードの差し込み)(R) ・・・・・・ というものが表示されます。 これはどういう意味でしょうか? 作成したデータのフィールドが表示されません。 教えてください。

  • エクセルの検索機能について

     エクセルの詳しい方に質問です。  まず下記のようなデータがあります。  A列  B列  安部  10  佐藤  20  佐藤  30  佐藤  25  田中  10  このデータをもとに下記のような表をつくりたく思っています。  A列  B列  C列  D列  安部  10  佐藤  20   30   25  田中  10 なお、A列はこちらで入力し、B列~D列に式を入力しておき自動計算するようにしたいのです。 わかる方のお力添えをよろしくお願いします。  

  • エクセルで、次のような自動入力をしたい

      A    B    C    D   E  ・・ AA 1 田中 鈴木 佐藤          山田 2 鈴木 山田              海岡 3 田中 佐藤              佐藤 というような表があり、AAの列に名前を入力したとき、 D1に「山田」、C2「海岡」と、その行に関してAA列に新規の名前が入力されたときにD1,C2に自動入力することは、VBAで簡単にできますか? 3列目には「佐藤」さんがすでいるので入力不要です。 よろしくお願いします。(マクロ初心者です)

  • X個グループからY個ずつデータを抽出したい

    例:グループの数は100ぐらいがあって、グループごとのレコード数はそれぞれであり、毎回そのうちのX(例3)グループずつにデータを抽出します。そして1つのグループから最大Y個(例2)のデータを抽出します。 抽出したデータにフラグを立てて、次の抽出時に除外の条件として使います。 例:以下のテーブルがあって、毎回3グループから2個のデータを抽出します: group name flag ---------------------------------------------------------------------------- 1_group 田中A          0     1_group 佐藤A          0     1_group 林A           0     1_group 鈴木A           0     1_group 牧野A           0     2_group 平田B          0     2_group 小林B          0     ・・・ 3_group 高橋C          0     3_group 丹羽C          0     3_group 田中C          0     3_group 佐藤C          0     3_group 鈴木C          0     3_group 吉田C          0     ・・・ 4_group 高橋D          0     4_group 丹羽D          0     4_group 田中D          0     4_group 佐藤D          0     4_group 鈴木D          0     ・・・ (1)1回目の抽出の結果 group name flag ---------------------------------------------------------------------------- 1_group 田中A          0     1_group 佐藤A          0     2_group 平田B          0     2_group 小林B          0     3_group 高橋C          0     3_group 丹羽C          0     (2)2回目の抽出の結果 group name flag ---------------------------------------------------------------------------- 1_group 林A           0     1_group 鈴木A           0     3_group 田中C          0     3_group 佐藤C          0     4_group 高橋D          0     4_group 丹羽D          0     (3)3回目の抽出の結果 group name flag ---------------------------------------------------------------------------- 1_group 牧野A           0     3_group 鈴木C          0     3_group 吉田C          0     4_group 田中D          0     4_group 佐藤D          0     DBはSqlLiteです。 長いですが、ご教授頂ければ、ありがたいです

  • word2003で、名前を五十音順に昇順で表の並べ替えをするんですが、

    word2003で、名前を五十音順に昇順で表の並べ替えをするんですが、なぜか下の順のようになります。長嶋と田中が昇順で並び変えできないのです。列を選んで、並び変えダイアログで 五十音順、昇順を 指定しています。どこか間違いがあるのでしょうか。 井上 佐藤 長嶋 田中

  • ピボットテーブルの集計結果を使って、さらに条件を付けて集計をしたいです

    ピボットテーブルの集計結果を使って、さらに条件を付けて集計をしたいです。 たとえば、このようなピボットテーブルから、 [A]      [B]       [C]       [D]                         1月 Group  Account1   Account2 G0    田中         東京     5         加藤         大阪     2 G1     佐藤        大阪      3 G1    田中         名古屋       A列のGroupをキーにして、D列を集計します。 G0の合計は7で個数は2、G1の合計は3で個数は1、という結果を出すにはどのようにしたら良いでしょうか?

  • エクセルのデータ並べ替え(抽出)の方法

    エクセルのデータ並べ替え(抽出)の方法 を教えてください。 下記のようなデータがあるとします。   A    B    C   D 1 田中  東京  千葉  福岡 2 山田  京都  滋賀 3 佐藤  奈良  青森  USA 4 鈴木  カナダ 愛媛 A列は名前、B列以降は文字列です。B列以降はC列までの行、D列までの行とさまざまです。重複セルはありません。 これを下記のように並べ替えたいです。   A    B    C   D 1東京  田中 2千葉  田中 3福岡  田中 4京都  山田 5滋賀  山田 6奈良  佐藤 7青森  佐藤 8USA   佐藤 9カナダ 鈴木 10愛媛  鈴木 こういうことは可能でしょうか??? 教えてください。 よろしくお願いします。

専門家に質問してみよう