• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルから帳票形式に差込印刷したいのですが)

エクセルから帳票形式に差込印刷する方法は?

このQ&Aのポイント
  • エクセルで大量のデータを帳票形式に差込印刷する方法について教えてください。
  • エクセル自体での差込印刷はできないため、ワードの「差込印刷」機能が必要です。
  • エクセルデータ形式のカンマ区切り表示はワードの制限により難しいため、VBAや差込印刷マクロを利用する方法も検討してください。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.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

sartan777
質問者

お礼

質問者です。 うーん・・・!!!本当に「出血サービス」を頂きました・・・! 感謝・・・感謝です!!! 不具合もなく、理想通りの差込印刷ができました。本当にありがとうございます。 自分自身、もっとマクロVB応用ができるよう勉強します@_@; ちょいと・・・質問ですが、 最初の行 Declare Sub  の Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) は、どういう行為(意味)をさすのでしょうか? 索引とか引いても見つからないもので・・・^^;

その他の回答 (3)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

エクセルで差し込み印刷のようなことをするにはマクロが必要です。 以下のマクロはそのひな形です。  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キーを押してください。

sartan777
質問者

お礼

sartan777
質問者

補足

すみません、質問者です。 「お礼」のところに「あ」と書いた後、誤って確認画面・・・へ進んでしまいました>< 早速、回答をありがとうございました! す、すばらしい、感動するくらいシンプルで要望どおりのマクロひな形です! 試してみたところ、うまくいきました。 そこで、さらに厚かましい質問ですが・・・ 指定行から指定行まで、を印刷せよ、という指示BOXを組み込むマクロを挿入するにはどういった風にすればいいでしょうか・・・? マクロVBAを勉強中のみであり、なかなか応用まで行きません・・・未熟モノですが、よろしくお願い致します。

  • Us-Timoo
  • ベストアンサー率25% (914/3620)
回答No.2

すみません、解決策ではありません。先に考え方のお話です。 そういう込み入った処理をする場合、通常はアクセスでやると思いますよ。 アクセスの場合、データベースとフォームを作るのと両方しなくては いけないと思いますので。 EXCELで、もしやるとするなら、マクロやVBAを組んでやらなくては いけないと思います。関数や数式だけでやろうとすれば、かなりの 手間がかかると考えられますし、処理も煩雑になると予想されますので、 ・お金を出して詳しい人に作ってもらうか ・かなりの手間を覚悟で関数や数式を組み合わせて作るか のどちらかになると思います。 解決にならないレスで申し訳ありません。m(__)m

sartan777
質問者

お礼

回答ありがとうございます^^ そうですね、アクセスだと問題ないですが、 ここの職場では、アクセスがなく、またアクセスを使いこなせる人がいないので、今後の引継ぎを考えて・・・エクセル&ワードでいく方法がないかを模索中です。 参考意見をどうもありがとうございました。

  • vaio09
  • ベストアンサー率37% (756/2018)
回答No.1

逃げの手段ですが、アクセスで処理したら制限ないですよね。

sartan777
質問者

お礼

そうなんですわ(笑 アクセスがない職場だからこそ・・・^^;

関連するQ&A