EXCELマクロに詳しい方、何度も同じ質問ですみませんが、解決出来ないのでもう一度お聞きします。

下記の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

回答の条件
  • 1人2回まで
  • 登録:2008/07/16 15:20:42
  • 終了:2008/07/23 15:25:03

回答(5件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982008/07/16 17:56:31

ポイント27pt

最初に

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

とやったほうがいいでしょう。

id:mokachan

お返事遅くなってごめんなさい。

回答ありがとうございました。

今回は、neuromancer_shoさんのVBAでうまく印刷出来ました。

ただ、ダイアログボックスに印刷枚数がちゃんと出ないので

いろいろな方の答えを試して見ましたがダメなようでした。

2008/07/17 19:12:24
id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912008/07/16 17:30:07

ポイント27pt

いま一つ状況が不明ですが、どの点が問題なのでしょうか。

質問はすぐに閉じる必要はありませんので、解決するまで一つの質問で進めては

どうでしょうか。


不明な点はコメントで状況を確認したいので、有効にお願いします。


一応、こちらで想定する内容をコード上のコメントに記載しました。

こちらの内容を確認してみて、実際と異なる部分がありましたらコメントください。

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
id:mokachan

MOOkさん

回答ありがとうございました。

(送信したつもりが出来ていなくて、遅くなってすみません)

MOOKさんは毎回親切にご回答頂いたりお心配りを頂き、大変感謝しております。

また、私の質問が分かりにくくてすみません。

neuromancer_shoさんのVBAでうまく印刷出来ました。

ただ、ダイアログボックスに印刷枚数がちゃんと出ないので

いろいろな方の答えを試して見ましたがダメなようでした。

2008/07/17 19:11:13
id:neuromancer_sho No.3

neuromancer_sho回答回数28ベストアンサー獲得回数32008/07/17 01:50:28

ポイント26pt

質問者さんは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

id:mokachan

回答ありがとうございました。

おかげさまでneuromancer_shoさんのVBAでうまく印刷出来ました。

ただ、ダイアログボックスに印刷枚数がちゃんと出ないので

いろいろな方の答えを試して見ましたがダメなようでした。

2008/07/17 15:36:12
id:Mook No.4

Mook回答回数1312ベストアンサー獲得回数3912008/07/18 10:35:12

ポイント10pt

コメントが有効でないので、こちらで失礼します。


不明な点があるのですが、質問内にある下記の行はどういう意味で記述されているのでしょうか。

    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 列のデータの最終行を仮設定

にして、試してみていただけますか?

印刷枚数は実際の処理をカウントしているので、そちらでどうか確認いただけるでしょうか。


マクロの内容をご自身で多少なりとも手直しできるればよいのですが、何も手を入れずに期待通りの動作を

するものを提示するためには、細かな修正のためのやり取りが必要です。

その意味でもコメントを有効にしていただいた方がよいかと思います。

id:neuromancer_sho No.5

neuromancer_sho回答回数28ベストアンサー獲得回数32008/07/19 00:34:34

ポイント10pt

印刷枚数をちゃんと出したければ、最後のところを

MsgBox ("印刷が終了しました … " & r-9 & " 件印刷しました。")

としてください。

  • id:mokachan
    遅くなってすみません。
    MsgBox ("印刷が終了しました … " & r-9 & " 件印刷しました。")
    を早速試してみたいと思います。

    最後までありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません