[[20200122120739]] 『特定セルが”0”の場合印刷しない連続印刷のやり』(マクロ初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『特定セルが”0”の場合印刷しない連続印刷のやり方を教えてください』(マクロ初心者)

1シートの中に30日分(1日1ページ仕様)があるのですが、特定のセルに入力がない場合はその日の分(該当ページ)を印刷しないマクロはどのようにすればいいですか?
特定セルに入力がない場合は、ページごとに右上のセルに「0」が表示されるようになっています。

< 使用 Excel:unknown、使用 OS:Windows10 >


 何がどうなっているのかわかりませんが、分かる範囲での回答ならこんな具合ではないでしょうか?

    Sub test()
        Dim 行 As Long
        Const 列 As String = "D"
        Const 行範囲 As Long = 10
        For 行 = 1 To 311 Step 行範囲
            If Cells(行, 列).Value = 0 Then
                '印刷しない
            Else
                Range(Cells(行, 列), Cells(行 + 行範囲 - 1, "A")).PrintOut
            End If
        Next 行
    End Sub

(稲葉) 2020/01/22(水) 12:36


 こんにちは ^^
既に適切なアドバイスが提示されていますが、。。。とりあえず。。。^^;
いろいろ方法はあるとおもいますが。。。
わたしなら。。。印刷設定は別シートにでも
好きなようにフォーマットして、別シートには
30日分を30行で(一日分を1行に全て納めます(列は有るだけいくらでも?)格納しておき
順に1行ずつ読んで条件が合えば必要な物を必要なだけ印刷用シートへ転記して印刷
を日数分繰り返すと思います。
でわでわ、頑張ってくださいね。。。m(_ _)m
(隠居じーさん) 2020/01/22(水) 12:51

稲葉さん
すみません(;゚Д゚)
説明が足りない中、返信していただいてありがとうございます。

1シートの中に、1日1ページの日誌を横に6ページ、縦に5ページの計30ページあります。
1ページの内訳は、横にA〜Fの6列、縦に38行あり、入力する日と入力しない日があります。
入力がない日は各ページのF1に相当する場所(右上)が「0」となる様にしてあります。
その中で、入力が終わっているページのみ印刷したいです。

ちなみに、先ほど教えていただいたマクロの物に、★の部分を5回いれるとですか?

★ Dim 行 As Long

        Const 列 As String = "D"
        Const 行範囲 As Long = 10
        For 行 = 1 To 311 Step 行範囲
            If Cells(行, 列).Value = 0 Then
                '印刷しない
            Else
                Range(Cells(行, 列), Cells(行 + 行範囲 - 1, "A")).PrintOut
            End If
        Next 行

 Sub test()
        Dim 行 As Long
        Const 列 As String = "D"
        Const 行範囲 As Long = 10
        For 行 = 1 To 311 Step 行範囲
            If Cells(行, 列).Value = 0 Then
                '印刷しない
            Else
                Range(Cells(行, 列), Cells(行 + 行範囲 - 1, "A")).PrintOut
            End If
        Next 行
   ★×縦に5ページ分
   End Sub

(マクロ初心者) 2020/01/22(水) 13:47


隠居じーさん
ありがとうございます。

たとえば、
入力する事項を一覧にして1シートにし、別シートに表を作って、vlookup関数で反映されるようにして、
下記のようなマクロで行うということでしょうか?

Sub 連続印刷()

    Dim i As Integer
    Dim LastRow As Integer

    Worksheets("表").Select

    With Worksheets("一覧")
        LastRow = .Range("A65536").End(xlUp).Row
        For i = 2 To LastRow
            Range("F1").Value = .Range("A" & i).Value
            ActiveSheet.PrintOut
        Next
    End With
End Sub

(マクロ初心者) 2020/01/22(水) 14:00


 あ!はい (#^^#) そんな感じです
要らない分は条件文で排除しますです。
んな感じの方が私は扱いやすい様に
感じますです。。。ま!一案ですので
ご考察の何かの足しにでもなれば幸甚です。
m(_ _)m
(隠居じーさん) 2020/01/22(水) 14:20

隠居じーさん
ありがとうございます。

これをさらに両面印刷にすることって可能ですか?
(マクロ初心者) 2020/01/23(木) 10:27


 おはよ〜ございます。 ^^
あの〜両面印刷って。。。そのぉ。。。
例えば30日分ですと、表に1日の情報、裏に
2日の情報、二枚目の用紙の表に3日分二枚
目の用紙の裏に4日分。。。繰り返し最後ま
でとか、との理解で、宜しいでしょうか。
(隠居じーさん) 2020/01/23(木) 10:35

 >>(隠居じーさん) 2020/01/23(木) 10:35
の理解で良いのでしたら。。。奇数の日を先に全て印刷して
あと、用紙を裏返して、偶数の日を印刷します。マクロを二
つに分けても良いですし、Msgbox 何かで一時停止させても
可能なのでは無いでしょうか両面印刷対応プリンターに関し
ては扱ったことが御座いませんので他の方の回答をお待ちく
ださいませ。悪しからずご了承ください。。。m(_ _)m
でわでわ。
(隠居じーさん) 2020/01/23(木) 10:56

 追伸
印刷しない日もあるのでしたら
印刷するものだけををどこかに
格納して、昇順に並び替え、て
同じようにすれば良いかと、。
。。。かなりアナログ的で。。
済みません。。m(_ _)m
(隠居じーさん) 2020/01/23(木) 11:04

 こんにちは ^^ ちょっとつくってみました。
何かの足しにでも。役立たずでしたらゴミ箱ポイ
してくださいね。m(_ _)m
でわでわ
'***************************************************************************************
'* 新規BOOKにてお願いいたします。
'* 左から一番目、と二番目のシートが処理対象の為全ての情報は更新されます。
'* マクロ実行中は面倒でも強制中断はしないほうが良いかと思います。手当たり
'* 次第にコード実行が自動で中断される現象が惹起する危険があります。。w(◎o×)w
'***************************************************************************************
Option Explicit
Sub OneInstanceMain()
    StartSet
    DummyDaterMaker
    PrintLayerMake
    MyBothPrint
End Sub
Private Sub StartSet()
    If Worksheets.Count < 2 Then
        Worksheets.Add Worksheets(Worksheets.Count)
        Worksheets(2).Range("C:E").ColumnWidth = 12
    End If
End Sub
Private Sub DummyDaterMaker()
    Dim Y             As Long
    Dim D             As Date
    Dim Mary
    Rnd -6: Y = 2
    Mary = Array("A", "B", "C", "D", "E", "F")
    D = DateSerial(2020, 1, 1)
    With Worksheets(1)
        .UsedRange.Clear
        .Cells(1).Resize(1, 5) = Array("日付", "店名", "商品名", "個数", "金額")
        Do Until Y >= 31 + 2
            .Cells(Y, 1) = D
            .Cells(Y, 1).NumberFormatLocal = "m/d"
            .Cells(Y, 2) = "越後屋-" & Mary(Int((5 - 0 + 1) * Rnd + 0))
            .Cells(Y, 3) = "うどん"
            .Cells(Y, 4) = Int((300 - 1 + 1) * Rnd + 1)
            .Cells(Y, 5) = .Cells(Y, 4) * 250
            Y = Y + 1
            D = D + 1
            DoEvents
        Loop
    End With
    Erase Mary
End Sub
Private Sub PrintLayerMake()
    With Worksheets(2)
        .UsedRange.Clear
        .Cells(2, 2) = "ご 案 内"
        .Cells(5, 3) = "日  付"
        .Cells(6, 3) = "店  名"
        .Cells(7, 3) = "商  品"
        .Cells(8, 3) = "個  数"
        .Cells(9, 3) = "金  額"
    End With
End Sub
Private Sub MyBothPrint()
    Dim Base          As Variant
    Dim I             As Long
    Dim J             As Long
    With Worksheets(1)
        Base = .Cells(1).CurrentRegion
    End With
    With Worksheets(2)
        For I = 2 To UBound(Base, 1)
            If I Mod 2 = 0 Then
                .Cells(5, 5) = Base(I, 1)
                .Cells(6, 5) = Base(I, 2)
                .Cells(7, 5) = Base(I, 3)
                .Cells(8, 5) = Base(I, 4)
                .Cells(9, 5) = Base(I, 5)
                .PrintPreview
            End If
        Next
        MsgBox "用紙を上下裏表確認後クリックしてください。"
        For I = 2 To UBound(Base, 1)
            If I Mod 2 <> 0 Then
                .Cells(5, 5) = Base(I, 1)
                .Cells(6, 5) = Base(I, 2)
                .Cells(7, 5) = Base(I, 3)
                .Cells(8, 5) = Base(I, 4)
                .Cells(9, 5) = Base(I, 5)
                .PrintPreview
            End If
        Next
    End With
    Erase Base
End Sub
(隠居じーさん) 2020/01/23(木) 15:38

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.