- ベストアンサー
エクセルから帳票形式に差込印刷する方法は?
- エクセルで大量のデータを帳票形式に差込印刷する方法について教えてください。
- エクセル自体での差込印刷はできないため、ワードの「差込印刷」機能が必要です。
- エクセルデータ形式のカンマ区切り表示はワードの制限により難しいため、VBAや差込印刷マクロを利用する方法も検討してください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#01です。出血大サービスです(^^; ただし不具合以外の修正はご自身でお願いします。 2行目~4行目と項目の定義の箇所は再度設定し直してください。 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub InsPrint() Const org As String = "Sheet1" '元データのシート名 Const prs As String = "Sheet2" '印刷するシート名 Const strt As Integer = 2 '元データの実データ開始行 Dim idx, fromL, toL As Long Dim oSht, pSht As Worksheet Dim res, res2 Set oSht = Worksheets(org) Set pSht = Worksheets(prs) res = MsgBox("印刷行範囲を指定しますか?" & Chr(13) & _ "はい:指定する、いいえ:指定しないで全件印刷、CANCEL:印刷しない", vbYesNoCancel) Select Case res Case Is = vbCancel Exit Sub Case Is = vbYes res2 = Application.InputBox("印刷開始行を半角数字で入力して下さい", Type:=1) If TypeName(res2) = "Boolean" Then MsgBox "印刷を中止しました", vbOKOnly Exit Sub Else If res2 >= strt And res2 <= oSht.Range("A65536").End(xlUp).Row Then fromL = res2 Else MsgBox "開始行が不適切です。印刷を中止しました", vbOKOnly Exit Sub End If End If res2 = Application.InputBox("印刷する最終行を入力して下さい" & Chr(13) & _ "99999を入力すると最終行まで印刷します", Type:=1) If TypeName(res2) = "Boolean" Then MsgBox "印刷を中止しました", vbOKOnly Exit Sub Else If res2 = 99999 Then toL = oSht.Range("A65536").End(xlUp).Row Else If res2 >= fromL And res2 <= oSht.Range("A65536").End(xlUp).Row Then toL = res2 Else MsgBox "最終行が不適切です。印刷を中止しました", vbOKOnly Exit Sub End If End If End If Case Else fromL = strt toL = oSht.Range("A65536").End(xlUp).Row End Select For idx = fromL To toL '以下の行を項目数だけコピーして定義する pSht.Range("A1").Value = oSht.Cells(idx, "A").Value ' pSht.PrintOut '印刷 '5頁につき8秒休止する If (idx Mod 5) = 0 Then DoEvents Sleep 8000 End If Next idx End Sub
その他の回答 (3)
- zap35
- ベストアンサー率44% (1383/3079)
エクセルで差し込み印刷のようなことをするにはマクロが必要です。 以下のマクロはそのひな形です。 pSht.Range("A1").Value = oSht.Cells(idx, "A").Value の行を差し込みする項目の数だけコピーして定義して下さい。この例は pSht.Range("A1").Value → 印刷シートのA1セルに oSht.Cells(idx, "A").Value → 元データのA列のデータを 差し込むという意味になります。修正を加えるのは左辺"A1"と右辺"A"の2カ所のみで、他は変えてはいけません。 また2行目~4行目も実際のシートに合わせて修正が必要です マクロはALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。実行はシート画面に戻って、ALT+F8を押してマクロ一覧からマクロ名を選択して実行します。 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub InsPrint() Const org As String = "Sheet1" '元データのシート名に修正 Const prs As String = "Sheet2" '印刷するシート名に修正 Const strt As Integer = 2 '元データの実データ開始行に修正 Dim idx As Long Dim oSht, pSht As Worksheet Set oSht = Worksheets(org) Set pSht = Worksheets(prs) For idx = strt To oSht.Range("A65536").End(xlUp).Row ' 以下の行を項目数だけコピーして定義する pSht.Range("A1").Value = oSht.Cells(idx, "A").Value ' pSht.PrintOut '印刷 ' プリンタの印刷が追いつかないので5頁につき8秒休止する If (idx Mod 5) = 0 Then DoEvents Sleep 8000 'ミリ秒単位で指定 End If Next idx End Sub マクロを実行中途中で印刷を止めたい場合は、ESCキーを押してください。
お礼
あ
補足
すみません、質問者です。 「お礼」のところに「あ」と書いた後、誤って確認画面・・・へ進んでしまいました>< 早速、回答をありがとうございました! す、すばらしい、感動するくらいシンプルで要望どおりのマクロひな形です! 試してみたところ、うまくいきました。 そこで、さらに厚かましい質問ですが・・・ 指定行から指定行まで、を印刷せよ、という指示BOXを組み込むマクロを挿入するにはどういった風にすればいいでしょうか・・・? マクロVBAを勉強中のみであり、なかなか応用まで行きません・・・未熟モノですが、よろしくお願い致します。
- Us-Timoo
- ベストアンサー率25% (914/3620)
すみません、解決策ではありません。先に考え方のお話です。 そういう込み入った処理をする場合、通常はアクセスでやると思いますよ。 アクセスの場合、データベースとフォームを作るのと両方しなくては いけないと思いますので。 EXCELで、もしやるとするなら、マクロやVBAを組んでやらなくては いけないと思います。関数や数式だけでやろうとすれば、かなりの 手間がかかると考えられますし、処理も煩雑になると予想されますので、 ・お金を出して詳しい人に作ってもらうか ・かなりの手間を覚悟で関数や数式を組み合わせて作るか のどちらかになると思います。 解決にならないレスで申し訳ありません。m(__)m
お礼
回答ありがとうございます^^ そうですね、アクセスだと問題ないですが、 ここの職場では、アクセスがなく、またアクセスを使いこなせる人がいないので、今後の引継ぎを考えて・・・エクセル&ワードでいく方法がないかを模索中です。 参考意見をどうもありがとうございました。
- vaio09
- ベストアンサー率37% (756/2018)
逃げの手段ですが、アクセスで処理したら制限ないですよね。
お礼
そうなんですわ(笑 アクセスがない職場だからこそ・・・^^;
お礼
質問者です。 うーん・・・!!!本当に「出血サービス」を頂きました・・・! 感謝・・・感謝です!!! 不具合もなく、理想通りの差込印刷ができました。本当にありがとうございます。 自分自身、もっとマクロVB応用ができるよう勉強します@_@; ちょいと・・・質問ですが、 最初の行 Declare Sub の Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) は、どういう行為(意味)をさすのでしょうか? 索引とか引いても見つからないもので・・・^^;