[[20180709193216]] 『条件分岐の印刷マクロについて』(シンゴ) ページの最後に飛ぶ

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

 

『条件分岐の印刷マクロについて』(シンゴ)

マクロ初心者ですが、以前の掲示板をみて改良して作成しようとしています。
例えば、H3セルからI3セルまでの部数(5枚)の印刷を自動化したいと思っています。
H3セルが1とし、I3セルが5とした場合(5枚)で、1・3・5枚目のときは、I7セルの関数計算結果が、●になるようにしてあります。
しかし、連続して印刷される途中の2・4までもI7セルが、●ではなくても"上部"シート(=●の場合のパターン)が印刷されてしまいます。
もし、1のときのみI7セルの関数計算結果が、●でない場合はにしたら、すべて、"下部"シート(=●でない場合のパターン)が印刷されてしまいます。

本来、1・3・5は、"上部"、2・4は、"下部"がという具合、条件分岐して印刷してほしいのですが・・・?
どこが間違っているのででしょうか?

Sub 連続印刷()

    Dim f As Long, t As Long
    Dim x As Long

    With Sheets("印刷シート")
        f = .Range("H3").Value
        t = .Range("I3").Value

        If Range("I7").Value = "●" Then
        For x = f To t
            Range("H3").Value = x
            Sheets(Array("上部")).PrintOut Copies:=1, Collate:=True
        Next
        Range("AH3").Value = f
        Else
        For x = f To t
            Range("H3").Value = x
            Sheets(Array("下部")).PrintOut Copies:=1, Collate:=True
        Next
        Range("AH3").Value = f
        End If

    End With

 End Sub

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


H3、I3が、どんな値のとき、どのシートどう印刷したいのか(ページ数、部数)???
複数例を挙げて、教えていただけますか

↓これだと、何のことか全く理解できません。

>H3セルが1とし、I3セルが5とした場合(5枚)で、1・3・5枚目のときは、

(マナ) 2018/07/09(月) 21:07


とりあえずインデントの位置が私には見づらかったので付けなおしてみました。
また、説明のため行番号をつけてみました。
 01    Sub 連続印刷()
 02        Dim f As Long, t As Long
 03        Dim x As Long
 04    
 05        With Sheets("印刷シート")
 06            f = .Range("H3").Value
 07            t = .Range("I3").Value
 08        
 09            If Range("I7").Value = "●" Then
 10                For x = f To t
 11                    Range("H3").Value = x
 12                    Sheets(Array("上部")).PrintOut Copies:=1, Collate:=True
 13                Next
 14                Range("AH3").Value = f
 15            Else
 16                For x = f To t
 17                    Range("H3").Value = x
 18                    Sheets(Array("下部")).PrintOut Copies:=1, Collate:=True
 19                Next
 20                Range("AH3").Value = f
 21            End If
 21        End With
 22    End Sub

(もこな2) 2018/07/10(火) 07:52


気になる箇所として
 【01】11(16)行目 「H3」セルはどのシートのことを言いたいのか
 【02】12(18)行目 Sheets(Array("上部"))としているが、1シートしかないのでSheets("上部")と同義
 【03】12(18)行目 Copies:=1, Collate:=True いずれも規定値なので省略してOK
 【04】14(20)行目 「AH3」セルはどのシートのことを言いたいのか

というところは手を入れた方がいいんじゃないかと思います。

以下、勝手な予想ですが、

 (1)印刷用のフォーマットが「上部」、「下部」の2種類あって、
 (2)奇数ページは上部、偶数ページは下部のフォーマットで印刷したくて、
 (3)さらに、「上部」、「下部」それぞれのH3セルにページ番号を入力するとVLOOKUP関数などで
    印刷したい内容が参照される

って、なってたりしませんか?
もし、上記予想があってれば、こんな感じでも良いと思います。

 ※「AH3」セルはどのシートのことを言っているのかわかりませんが、
  少なくとも印刷シートのH3セルを見てるだけなので、マクロの中で
  操作する必要ないですよね。(なので外しました。)

    Sub サンプル()
        Dim 開始 As Long, 終了 As Long
        Dim i As Long
        Dim sh As Worksheet

        With Sheets("印刷シート")
            開始 = .Range("H3").Value
            終了 = .Range("I3").Value
        End With

        For i = 開始 To 終了 Step 1
            If i Mod 2 Then
                Set sh = Worksheets("下部")
            Else
                Set sh = Worksheets("上部")
            End If

            With sh
                .Range("H3").Value = i
                .PrintPreview
                '.PrintOut ’印刷しちゃうと紙がもったいないので印刷プレビューに変更
            End With
        Next i

    End Sub

(もこな2) 2018/07/10(火) 11:14


マナさん・もなこ2さん、有難うごさいます。
もなこ2さんのご指摘が適格ではあったのですが、少し条件を変更させて下さい。

 (1)ファイルに準備されているシートとしては、「印刷」シートの他に、印刷対象のシートとして、
   「上部」シート、「下部」シート、「内視鏡」シート、「結果」シートの5種類あるとします。
 (2)条件に応じて、下記AorBのセットの組み合わせを合計で10セット印刷したいです。
     A 「上部」シート + 「内視鏡」シート +「結果」シート
     B 「下部」シート + 「内視鏡」シート +「結果」シート
 (3)印刷シート について
     ・A1〜A10セルまでに、1〜10の数字、B1・B58・B8セルには、●が入力された表があります。
     ・H3セルには、"1"、I3セルには、"10"を入力しておきます。(※10セット印刷するため)
 (4)AorBを印刷する分岐条件
        10セット印刷するうちの1・5・8番目(※B1・B5・B8セルを参照し)の印刷が実施される時は、
    Bのパターンのセットを印刷、その他の時は、Aのパターンの印刷をしたいと思います。
    

申し訳ありませんが、上記条件でのVBAの文章は、どのようになるのでしょうか?
どなたか、ご教示ください。
(シンゴ) 2018/07/11(水) 00:11


>上記条件でのVBAの文章は、どのようになるのでしょうか?
ちょっと意図がわかりませんけど、自分で試行錯誤せず丸投げされるのであれば、私は対応をする気が無いので他の回答者さんをお待ち下さい。

そうじゃなくて、自分でがんばってみたいけど、どこから手を付けていいのかわからないのであれば、以下のヒントが参考になるかもです。

 ヒント1:Aパターン、Bパターン どちらも 3つのシートを印刷したくて、
         そのうち「内視鏡」シート +「結果」シートは固定されているから、
          分岐が必要なのは「上部」なのか「下部」なのかというところだけ。

 ヒント2:印刷シートにリストができあがってるのだから、わざわざ開始番号と終了番号を別セルに入力しなくても、
          リストの1行目から最終行までを順番に処理すればOK

 ヒント3:ヒント2を擬似コードにするとこんな感じになりそう

    マクロはじめ
        「行番号用」の変数を宣言する
        「シート名用」の変数を宣言する

        With Worksheets("印刷シート")
            「行番号用」の変数に1からA列最終行までの行番号をいれながらループ処理をする
                条件分岐 はじめ 「もし、その行のB列が "●" だったら」
                    「シート名用」に "上部" って入れる
                そうじゃなかったら
                    「シート名用」に"下部"
                条件分岐 おわり

                Worksheets(「シート名用」).の"H3"セルに .Cells(行番号, "A").Value を入れる
                Worksheets(「シート名用」)を印刷する

                Worksheets("内視鏡")を印刷する
                Worksheets("結果")を印刷する
            次の行へ
        End With
    マクロおわり

 おまけ:ヒント2をもっと突き詰めると、印刷シートのB列に「A」か「B」が入力されているときは、
     そのパターンで印刷し、それ以外の時は印刷しないという制御のしかたもできそうですよね
(もこな2) 2018/07/11(水) 12:40

Sub main()
    Dim i As Long
    For i = Sheets("印刷").Range("H3").Value To Sheets("印刷").Range("I3").Value
        If Sheets("印刷").Range("B" & i).Value = "●" Then
            Sheets(Array("下部", "内視鏡", "結果")).PrintOut
        Else
            Sheets(Array("上部", "内視鏡", "結果")).PrintOut
        End If
    Next i
End Sub
(mm) 2018/07/11(水) 13:23

コメント返信:

[ 一覧(最新更新順) ]


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