[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAを使用した差込文書について』(あ)
エクセルのVBAでの差込印刷について、どのようにコードを入力したら良いか教えていただけないでしょうか。
「印刷」シートと「データ」シートがあります。 「データ」シートに差し込みたい一覧のデータが入力されています。
「データ」シートの一覧表は下記の通りです。
A 列 B列 C列 D列 1 No. 氏名 会社名 枚数 2 1 あ A会社 1 3 2 い B会社 4 3 う C会社 5 5 4 え D会社 3 6 5 お E会社 2
「印刷」シートには予め決められているレイアウトがあります。 「データ」シートの一覧を「印刷」シートの下記のセルに差し込みたいです。
「データ」シート→「印刷」シート B列の氏名→C3 C列の会社名→C5
「データ」シートのD列に入力してある枚数が、必要部数です。 空欄になっている行は、出力されないようにしたいです。
検索して色々探したのですが、枚数指定までできるものが見つからず、こちらに投稿させていただきました。
よろしくお願い致します。
< 使用 Excel:Excel2013、使用 OS:Windows10 >
また、IF文で分岐して、D列がブランクでない時だけ、
PrintOutメソッドを使用して印刷します。
回答になっていますか?
(γ) 2021/09/02(木) 22:21
以前、調べたもの同士を組み合わせて作ったところ、作動しなかったことがありました。
'メイン処理
Public Sub MainProc()
Dim strNo As String
With ThisWorkbook.Sheets("差込データ一覧") Do While True
'従業員番号を保存 strNo = .Range("A5")
'従業員番号が空なら、ループを抜ける If strNo = "" Then Exit Do
'A5:C5をコピーし、A2:C2に貼り付け .Range("A5:C5").Copy .Range("A2:C2")
'5行目を削除する(上にセルを上げる) .Range("A5:C5").Delete xlShiftUp
'ひな形シートを印刷する ThisWorkbook.Sheets("ひな形").PrintOut
Loop
'A2:C2セルを空にする .Range("A2:C2") = "" End With
MsgBox "完了" End Sub (あ) 2021/09/02(木) 23:09
(γ) 2021/09/02(木) 23:28
【差込データ一覧】のレイアウト
____A_____ ____B_____ ____C_____ ____D_____ 1 No. 氏名 会社名 枚数 2 ←この行を【ひな形】シートが数式で参照している 3 4 No. 氏名 会社名 枚数 5 1 あ A会社 1 6 2 い B会社 7 3 う C会社 5 8 4 え D会社 3 9 5 お E会社 2
そして、既にγさんからコメントがあるように、差し込み印刷でデータを削除するようなコードはあまり見かけません。
単純に5行目〜(A列の)最終行までを順番に見ていきD列に値があれば2行目にコピペすることを考えればよいでしょう。
Sub さんぷる() Dim 行 As Long
Stop 'ブレークポイントの代わり
With ThisWorkbook.Sheets("差込データ一覧") For 行 = 5 To .Cells(.Rows.Count, "A").End(xlUp).Row If .Cells(行, "D").Value <> "" Then .Cells(行, "A").Resize(, 3).Copy .Range("A2") ' ThisWorkbook.Sheets("ひな形").PrintOut Copies:=.Cells(行, "D").Value .Cells(行, "E").Value = "印刷済" End If Next .Range("A2:C2").ClearContents End With
MsgBox "完了" End Sub
(もこな2) 2021/09/03(金) 11:34
回答ありがとうございます。
載せさせていただいたコードは、参考にしたコードをそのままコピーしただけなので、このコードを参考に自分の設定したいものに修正したいと考えておりました。
もこな2様が記載してくださったレイアウトの1〜3行目までは、私の作成した一覧にはない状態です。
説明不足で申し訳ありません。
(あ) 2021/09/03(金) 12:43
ならば、まずレイアウトを合わせるか、コードを合わせるかしないとダメなのは流石にわかりますよね?
そのうえで、ネット検索したり質問掲示板で提示のあったコードについて何をやっているか研究してみてはどうですか?
研究には【ステップ実行】という方法を使うと便利ですよ。
【ステップ実行】 https://www.239-programing.com/excel-vba/basic/basic023.html http://plus1excel.web.fc2.com/learning/l301/t405.html
また、以下も知っておいて損は無いと思います。
【イミディエイトウィンドウ】 https://www.239-programing.com/excel-vba/basic/basic024.html https://excel-ubara.com/excelvba1/EXCELVBA486.html
【ローカルウィンドウ】 https://excel-ubara.com/excelvba4/EXCEL266.html http://excelvba.pc-users.net/fol8/8_2.html
【ブレークポイント】 https://www.239-programing.com/excel-vba/basic/basic022.html https://www.tipsfound.com/vba/01010
(もこな2) 2021/09/03(金) 13:07
# 既にご指摘いただいたとおりですが、せっかく書いておいたので、投稿しておきます。 前の投稿の訂正です。 IF .Range("D2") > 0 Then ThisWorkbook.Sheets("ひな形").PrintOut(Copies:=.Range("D2")) と書いたが、 IF .Range("D2") > 0 Then ThisWorkbook.Sheets("ひな形").PrintOut Copies:=.Range("D2") としてください。(カッコは不要。あるとエラーです)
さて、質問はどこかネット上の記事をそのままコピーしただけですかね。 シート名の修正もしていないし、 そもそもあなたの提示した「データ」形式と、コードは、全く対応していませんよ。 随分な"省エネ質問"ですね。
そのコードでは、印刷指令を出す都度、一覧のデータを削除していく方式を取っていますが、 何を印刷したかあとに残りませんよね。 対象一覧はそのまま残し、逆に、印刷日時を残すくらいがいいんじゃないですか?
以下に参考コードを示します。 (5行目から2行目に移すなどということをせず、 2行目以降を順次、印刷シートに直接書き込む方式にしています。)
Sub 差込印刷() Dim ws As Worksheet Dim sName As String, sCompany As String, nCopies As Long Dim k As Long
Set ws = ThisWorkbook.Sheets("印刷") With ThisWorkbook.Sheets("データ") .Columns("E:F").ClearContents '印刷履歴をいったん消去 For k = 2 To .Cells(Rows.Count, "A").End(xlUp).Row sName = .Cells(k, "B").Value sCompany = .Cells(k, "C").Value nCopies = .Cells(k, "D").Value If nCopies > 0 Then ws.Range("C3") = sName '印刷シートに直接書き込む ws.Range("C5") = sCompany 'ws.PrintOut copies:=nCopies ws.PrintPreview .Cells(k, "E") = "印刷済" .Cells(k, "F") = Now() '印刷日時 End If Next End With End Sub (注) ・なお、一覧と印刷シートの対応関係をコードに持ち込んでいますが、 項目数が多い場合、メンテナンスしにくいという見方があるかもしれない。 その点では、質問にあるような方式でもよいですが、"削除"は絶対にやめたほうがいい。 削除はコストがかかる動作ですし、少なくともコピー方式にすべき。 ・また、印刷シートの項目は、=Index(一覧の対象範囲、行番号指定のセル、列番号)と 言った式を埋め込み、マクロで行番号指定のセルを更新していく方式も考えられます。 (余談) >以前、調べたもの同士を組み合わせて作ったところ、作動しなかったことがありました。 だから何ですか? 直球を返すなら、今回のように、今のデータのレイアウトと違う前提のコードであれば、正常動作しないのはあたり前です。 まったく同じ前提のものをネットで探す努力よりも、コードを読む力をつけることのほうが大事でしょう。 (γ) 2021/09/03(金) 14:50
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.