[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件分岐の印刷マクロについて』(シンゴ)
マクロ初心者ですが、以前の掲示板をみて改良して作成しようとしています。
例えば、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.