下記のVBAの中に
To Printsheet 3,6
From Printsheet 3,9
Toがブランクの場合は ~From
Fromがブランクの場合は To~
が印刷出来るように変更する構文を教えてください。
Printsheet 6,47 をキーにDataSheetからVLOOKUPで
値を返すようになっています。
Sub 一括出力()
' 一括出力 Macro
'
Dim PrintSheet As Worksheet
Dim DataSheet As Worksheet
Dim r As Long
Set PrintSheet = Worksheets("A)")
Set DataSheet = Worksheets("B)")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
r = 9
Do While DataSheet.Cells(r, 2).Value <> ""
If DataSheet.Cells(r, 1).Value >= 1 And DataSheet.Cells(r, 1).Value <> "" Then
PrintSheet.Cells(6, 47).Value = DataSheet.Cells(r, 1).Value
PrintSheet.Calculate
PrintSheet.PrintOut
' Debug.Print r, DataSheet.Cells(r, 1).Value
r = r + 1
Else
r = r + 1
End If
Loop
DataSheet.Select
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox ("印刷が終了しました … " & (PrintSheet.Cells(6, 47).Value) & " 件印刷しました。")
End Sub
最初に
Set PrintSheet = Worksheets("A)")
Set DataSheet = Worksheets("B)")
で ) が 入ってるのは シート名が そのようになっていれば 問題ないです。
Printsheet 6,47 をキーにDataSheetからVLOOKUPで
値を返すようになっています。
これが どういう意味なのか 推測しかねるので
PrintSheet.Cells(6, 47).Value = DataSheet.Cells(r, 1).Value
が正しいのか 判断がつきません。
また 何度も この処理を 行うと PrintSheet.Cells(6, 47).Value の値が
最後にセットしたものに なってしまうので
MsgBox ("印刷が終了しました … " & (PrintSheet.Cells(6, 47).Value) & " 件印刷しました。")
で出力される件数が 正しいものでは ないと思われます。
合計ならば
PrintSheet.Cells(6, 47).Value = DataSheet.Cells(r, 1).Value
の部分を
PrintSheet.Cells(6, 47).Value = PrintSheet.Cells(6, 47).Value + DataSheet.Cells(r, 1).Value
とやったほうがいいでしょう。
いま一つ状況が不明ですが、どの点が問題なのでしょうか。
質問はすぐに閉じる必要はありませんので、解決するまで一つの質問で進めては
どうでしょうか。
不明な点はコメントで状況を確認したいので、有効にお願いします。
一応、こちらで想定する内容をコード上のコメントに記載しました。
こちらの内容を確認してみて、実際と異なる部分がありましたらコメントください。
Sub 一括出力() ' 一括出力 Macro ' Dim PrintSheet As Worksheet Dim DataSheet As Worksheet Dim r As Long Set PrintSheet = Worksheets("A)") Set DataSheet = Worksheets("B)") Application.ScreenUpdating = False Dim cnt As Long '--- 開始行を設定 Dim startRow As Long startRow = 9 '--- 9行目を仮設定 If Not IsEmpty(PrintSheet.Cells(3, 6).Value) Then '--- "A)" シートの "F3" If IsNumeric(PrintSheet.Cells(3, 6).Value) Then startRow = PrintSheet.Cells(3, 6).Value End If End If '--- 終了行を設定 Dim endRow As Long endRow = PrintSheet.Range("B" & Rows.Count).End(xlUp).Row '--- B 列のデータの最終行を仮設定 If Not IsEmpty(PrintSheet.Cells(3, 9).Value) Then '--- "A)" シートの "I3" If IsNumeric(PrintSheet.Cells(3, 9).Value) Then endRow = PrintSheet.Cells(3, 9).Value End If End If MsgBox startRow & "行目~" & endRow & "行目まで処理します。" For r = startRow To endRow '--- "B)"シートのB列にデータがなかったら途中で終了 If DataSheet.Cells(r, "B").Value = "" Then Exit For '--- A列の r 行目に1以上の数値があったら処理 If DataSheet.Cells(r, "A").Value >= 1 And DataSheet.Cells(r, "A").Value <> "" Then PrintSheet.Cells(6, 47).Value = DataSheet.Cells(r, "A").Value PrintSheet.Calculate '--- とりあえずプレビュー PrintSheet.PrintPreview '--- PrintSheet.PrintOut cnt = cnt + 1 End If Next DataSheet.Activate Application.ScreenUpdating = True MsgBox "印刷が終了しました。" & vbNewLine & cnt & " 件印刷しました。" End Sub
MOOkさん
回答ありがとうございました。
(送信したつもりが出来ていなくて、遅くなってすみません)
MOOKさんは毎回親切にご回答頂いたりお心配りを頂き、大変感謝しております。
また、私の質問が分かりにくくてすみません。
neuromancer_shoさんのVBAでうまく印刷出来ました。
ただ、ダイアログボックスに印刷枚数がちゃんと出ないので
いろいろな方の答えを試して見ましたがダメなようでした。
質問者さんはFromとToの意味を逆に覚えていらっしゃるとすれば、こうだと思います。
Sub 一括出力()
' 一括出力 Macro
'
Dim PrintSheet As Worksheet
Dim DataSheet As Worksheet
Dim r As Long, FromValue As Long, ToValue As Long
Set PrintSheet = Worksheets("A)")
Set DataSheet = Worksheets("B)")
If PrintSheet.Cells(3, 6) = "" Then
FromValue = 1
Else
FromValue = PrintSheet.Cells(3, 6)
End If
If PrintSheet.Cells(3, 9) = "" Then
ToValue = 99999
Else
ToValue = PrintSheet.Cells(3, 9)
End If
Application.ScreenUpdating = False
Application.DisplayAlerts = False
r = 9
Do While DataSheet.Cells(r, 2).Value <> ""
If DataSheet.Cells(r, 1).Value >= FromValue And DataSheet.Cells(r, 1).Value <= ToValue Then
PrintSheet.Cells(6, 47).Value = DataSheet.Cells(r, 1).Value
PrintSheet.Calculate
PrintSheet.PrintOut
' Debug.Print r, DataSheet.Cells(r, 1).Value
r = r + 1
Else
r = r + 1
End If
Loop
DataSheet.Select
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox ("印刷が終了しました … " & (PrintSheet.Cells(6, 47).Value) & " 件印刷しました。")
End Sub
回答ありがとうございました。
おかげさまでneuromancer_shoさんのVBAでうまく印刷出来ました。
ただ、ダイアログボックスに印刷枚数がちゃんと出ないので
いろいろな方の答えを試して見ましたがダメなようでした。
コメントが有効でないので、こちらで失礼します。
不明な点があるのですが、質問内にある下記の行はどういう意味で記述されているのでしょうか。
r=9
こちらの理解は「データは9行目から始まっている」だったのですが、neuromancer_sho さんので期待通りで
あったということは、1行目からが対象データでしょうか。
であれば先の回答の16行目の
startRow = 9 '--- 9行目を仮設定
を
startRow = 1 '--- 1行目を仮設定
に、25行目の
endRow = PrintSheet.Range("B" & Rows.Count).End(xlUp).Row '--- B 列のデータの最終行を仮設定
を
endRow = DataSheet.Range("B" & Rows.Count).End(xlUp).Row '--- B 列のデータの最終行を仮設定
にして、試してみていただけますか?
印刷枚数は実際の処理をカウントしているので、そちらでどうか確認いただけるでしょうか。
マクロの内容をご自身で多少なりとも手直しできるればよいのですが、何も手を入れずに期待通りの動作を
するものを提示するためには、細かな修正のためのやり取りが必要です。
その意味でもコメントを有効にしていただいた方がよいかと思います。
印刷枚数をちゃんと出したければ、最後のところを
MsgBox ("印刷が終了しました … " & r-9 & " 件印刷しました。")
としてください。
お返事遅くなってごめんなさい。
回答ありがとうございました。
今回は、neuromancer_shoさんのVBAでうまく印刷出来ました。
ただ、ダイアログボックスに印刷枚数がちゃんと出ないので
いろいろな方の答えを試して見ましたがダメなようでした。