• ベストアンサー

Excel単体で差し込み印刷

皆さん宜しくお願いしますm(_ _)m。  Excel(2000&2002)で名簿を作成し、これを例えば封筒に印刷したい時は普通、Wordの差し込み印刷機能を利用しますよね。  ですが僕、どうもこの差し込み印刷機能って嫌いなんです(^^;)。一番の理由はファイル管理問題。2つのファイルを作成し、同一フォルダで管理するのが基本かなと思いますが、ファイル間のリンクが切れてしまったりするのがまず嫌です(笑)。  それから、暫く放置したら忘れるんですよね(^^;)。今回の名簿ファイルは他人にどんどん引き継いで行くスタイルなので、申し渡しが上手く出来て行くかも不安です。  そんな訳で、これをExcel単体で実現したいのですが。。。皆さんの中で何か良い知恵をお持ちの方がいらっしゃったなら、貸しては頂けないでしょうか。  Excelの標準的な印刷機能では実現は難しそうですね(^^;)。やはりマクロを組まないと駄目でしょうか。  やはりExcel単体で動作する方が美しいとは思うのですが(笑)、Wordの差し込み印刷を快適に管理運営する方法でも結構です(^^;)。そもそも僕の使い方が悪いのかも知れませんし。広い視野からのご意見、ご回答お待ちしてますm(_ _)m。

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

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

Sheet1のA・B・C列に、氏名・郵便番号・住所の名簿があるとします。Sheet2に下記で封書の表書きを縦書きイメージで作成し、印刷しようとしたとき下記の点で、プログラムが複雑になります。 (1)位置合わせを、行高、列幅で調節せざるをえないが    複雑になる (2)数字の文字化(エクセルのセルには半角数字になってしまう)の対処 (3)氏名を大きくすると行高に影響し、住所の文字間隔に影響する。 (4)ハイフンに縦文字化 (5)郵便番号枠に当てはめ (6)町名の改行を途中でしないなどにするなら難しい。 (7)会社の場合の(株)の問題、部の問題 (8)とくに郵便物の種類に合わせて(1)(3)(5)など (9)縦書き式と横書き式の2種の用意が必要 何種類も用意する必要がある。  結果としてVBAでの自作は複雑になるのでお勧めできません 。年賀状ソフトなどを利用すべきです。  下記はフォントサイズと行高・列巾は調節できていません 。また-を縦書き化できていません。骨子はこんな程度と いう例です。下記は1通分ですが、行をFor Nextで繰り回せば、複数通一度に印刷処理できる。 Sub test01() Worksheets("sheet2").Range("c2") = Worksheets("sheet1").Cells(2, 2) '------ i = 1 For j = 1 To 30 Step 1 a = Mid(Worksheets("sheet1").Range("c2"), i, 1) Worksheets("sheet2").Cells(j + 3, 6) = a i = i + 1 Next j '-------- i = 1 For j = 1 To 12 Step 2 a = Mid(Worksheets("sheet1").Range("a2"), i, 1) Worksheets("sheet2").Cells(j + 5, 3) = a i = i + 1 Next j j = j + 2 Worksheets("sheet2").Cells(j + 5, 3) = "様" End Sub

webdiver
質問者

お礼

お答えありがとうございます(^^)。  詳細な解答で勉強になります。今回の質問のアウトプットシートは、結構こちらサイドの都合が反映させられますので、細かな問題は出にくいようにある程度細工できるんです。教えて頂いた諸問題を考慮してアウトプットシートを改良したいと思います(^^)。  そしてやはりExcel単体での差し込み印刷は、マクロに頼る方法が最有力なんですよね。・・・僕もそんなような気はしていましたけど、こうして皆さんに解答を頂いてそれが確信に変わってきました。  このファイルは僕のPC内だけで使用するのでは無いので、マクロを実装するとセキュリティ関係で叱られるのが最大のネック。  これがあるので躊躇していました。このファイルは他にもたくさんの機能を実装しているのですが、この問題があるので全てマクロを避けて来ました(^^;)。  その結果、不必要にファイルサイズが大きくなり、また動作も鈍くなってきてまして・・(笑)。ここに来てマクロを使うなら、一から設計し直したらファイルサイズも小さく、動作も軽くなるだろうなぁと思っています。  他のPCでも、マクロを意識させずにスンナリと受け入れさせる方法って無いですか(^^;)?また、別のスレッドを立てた方が良いのかも知れませんね(^^ゞ。

その他の回答 (2)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

こんにちは。 単純な1レコード、1印刷なら、 1.リストシートと印刷シートを作る。 2.リストシートのレコード先頭にインデックスを付ける。 3.印刷シートでどこかのセルを基準にして、VLOOKUPで各データを持ってくる。(基準セルは文字を白くするとか、印刷範囲から外すなどで対応) 連続の差込印刷をやるなら、基準セルにインデックス値を入力し印刷のループをマクロで。 Wordの差し込みの方が遥かに簡単だと思います。 ちなみに私は必ず同じフォルダに置き、Wordのファイル名が「葉書印刷.doc」なら、Excelの方は「葉書印刷差込データ.xls」のようにしています。

webdiver
質問者

お礼

お答えありがとうございます(^^)。  仰るとおりですよね、僕も印刷シートを用意し、インデックスをドロップダウンで引っ張ってきて、後はVLOOK関数で関連づけしています。  問題は現状、ドロップダウン形式にしていること(^^;)。1レコード単位の差し込みの実現に止まっています。  そしてこれを自動化する場合、やはりマクロの手助けが必要と・・・僕の思考もそこに至り、他に良い手は無いかという訳で今回の質問をさせて頂いた次第です。  というのも、マクロを実装するとExcel起動の際に面倒ですよね。セキュリティレベルを下げると聞かれなくなりますが、このファイルは他人のPCに引き継ぐので厄介です。出来れば設定変更を強要したく無いんですね(^^;)。  でも機能の実装はしたい(笑)。うーん、ジレンマです。差し込み印刷のファイル管理についても参考になりました。差し込みの関連づけが何かの拍子に切れてしまうというトラブルさえ無ければ、この方法でも良いかも、と思いました。

  • ka3
  • ベストアンサー率18% (36/194)
回答No.1

 繰り返して印刷させる為には、やはり、マクロが必要だと思いますが、「データ入力シート」と「印刷レイアウト設定シート」の二つを用意するのは、如何でしょうか ?  次の様な手順を繰り返させる(Loop)事で、対処できるのではないでしょうか ? ──────────────────────── Sub Macro1() Range("A1").Select ActiveCell.FormulaR1C1 = "=Sheet2!R[1]C" Range("B2").Select ActiveCell.FormulaR1C1 = "=Sheet2!RC" Range("C3").Select ActiveCell.FormulaR1C1 = "=Sheet2!R[-1]C" Range("D4").Select ActiveCell.FormulaR1C1 = "=Sheet2!R[-2]C" Range("A1:D4").Select Range("D4").Activate Selection.PrintOut Copies:=1, Collate:=True End Sub ────────────────────────

webdiver
質問者

お礼

お答えありがとうございます(^^)。  やはりマクロですよね。実は僕も印刷用シートという発想が良いと思って用意しました。  現在はこれにドロップダウンを実装し、ひとつずつレコードを切り替えては印刷、という仕組みにまではしているんですね、凄く非効率的ですが(^^;)。  で、自動化しようと思ったのですが・・・マクロ導入に躊躇する大きな理由としては、Excelのセキュリティを「低」にしないとスンナリ起動しないという事です。  他人に引き継ぐとき、これが足を引っ張るだろうなぁと思う訳です(^^;)。でも、これしか手が無いならやはり実装したいところですね。・・・どんなものでしょうか(^^;)? 

関連するQ&A