[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件分岐の印刷マクロについて』(シンゴ)
マクロ初心者ですが、以前の掲示板をみて改良して作成しようとしています。
例えば、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セルが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
(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
そうじゃなくて、自分でがんばってみたいけど、どこから手を付けていいのかわからないのであれば、以下のヒントが参考になるかもです。
ヒント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
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.