[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『sheet1の表に○を付けたsheetのみ印刷したい。』(AN)
過去ログを探したのですが
見つからなかったため、新たに質問させて頂きます。
書類のデータが入ったシートが15個ほどあり、
それぞれのシートの名前は(書類名にすると長いので)「1」〜「15」となっています。
sheet1には書類名の一覧と、その左側に○を入力するための枠を設けてあります。
印刷したい書類名の左に○をつけて、印刷ボタン(今回のマクロを登録したボタン)を押すと、
○がついた書類のシートのみ印刷されるようにしたい という状態です。
(使用する予定の方々はエクセルをほとんど使用した事がないため、このようなものを用意する事になりました。)
自分で調べながらIF文を使って、出来たには出来たのですが、
『A2に○がある時は、「1」のシートを印刷』×15個といった感じの、
非常に長々しい状態で、(今回VBAを調べる中で、余計なものを省いた綺麗なものを
作りたいという欲が出てきてしまって。笑)なんとか簡素化?出来ないものかと思い、相談させていただきました。
分かりにくい文章で申し訳ありません。
何卒ご教示のほど、よろしくお願いいたします。
(一応は使用出来ているので急ぐ質問ではありませんが、『●●を使えばいいんじゃない』くらいの助言でも頂けたら嬉しいです。)
< 使用 Excel:Excel2013、使用 OS:Windows7 >
それを提示していただけますか
(マナ) 2018/03/17(土) 22:58
IF Range("A2") = "○" Then
Sheet("1").PrintOut End If
IF Range("A3") = "○" Then
Sheet("2").PrintOut End If
こんな形で15回続く感じです…。
(AN) 2018/03/17(土) 23:19
Option Explicit
Sub test() Dim i As Long
For i = 2 To 16 If Cells(i, 1).Value = "○" Then Sheets(CStr(i - 1)).PrintOut End If Next
End Sub
(マナ) 2018/03/17(土) 23:27
(AN) 2018/03/17(土) 23:36
もう一点、もしお分かりになりましたら教えて頂きたいのですが、
今回、3つの書類に○を入れて印刷したところ、2つ印刷し終わったところで、印刷が止まってしまい、画面には、2つ目に印刷した書式のシートが表示されていました。
ので、Nextの前にsheet1をselectしてみたら正常に動いたのですが、
印刷するシートをselectしていなくても、selectされてしまう(?)ことはあるのでしょうか…?
ちなみに教えて頂く前のものも、PrintOut後にsheet1をselectしていました。↓
(どうしてもシートが動いてしまうので、入れていたのですが、すっかり忘れておりました。申し訳ありません;;)
IF Range("A2").value = "○" Then
Sheets("1").PrintOut
Sheets("sheet1").select
End If
何か原因になりそうなものがありましたら、助言頂けましたら幸いです。
(動いてればいいじゃんという話なのですが、どうも気になってしまって…。)
よろしくお願いいたします(;;)
(AN) 2018/03/19(月) 22:09
ないと思いますが、断言できるほどの知識も経験もありません。
(マナ) 2018/03/19(月) 22:47
横からですけど・・・
私も勉強中なので絶対そうだとは言えないですけど、マクロからも、手動操作からもSelectする操作をしなければ、Selectされないとおもいます。というか勝手にそうなったら困りますよね。
>どうしてもシートが動いてしまうので、入れていたのですが、すっかり忘れておりました。
別に対象シートをアクティブにしなくても印刷できたかとおもうので、できればselectする操作は排除したほうがよいとおもいます。(無駄な動きをさせて処理を重くする必要がない)
(もこな2) 2018/03/20(火) 00:01
(AN) 2018/03/20(火) 00:17
ノートPCなどでモニタが小さいとちょっと大変かもしれないですが、ExcelのウィンドウとVBE(エディタ)のウィンドウを左右に並べてからステップ実行してみて、シートがどこで切り替わっているのかステップ実行しながら調べてみるとよいかもですね。
また、配置されてるボタンが「フォームコントロール」なのか「ActiveXコントロール」なのか分かりませんが、後者であれば、コードをシートモジュールに記述しているのでしょうから、「シートが動いてしまうと、A列に○がないので〜 」っていうのはあんまり心配するところではないかも・・・
(もこな2) 2018/03/20(火) 00:42
〉どのコードでしょう・・・・
分かりにく文章で申し訳ありません(;;)
元々のコードが、
IF Range("A2").value = "○" Then
Sheets("1").PrintOut
End If
IF Range("A3").value = "○" Then
Sheets("2").PrintOut
End If
IF Range("A4").value = "○" Then
Sheets("3").PrintOut
End If
…以降A16まで同じ形で続きます。
というもので、現在はマナ様のコードを使用させて頂いております。
両者ともで、同じように途中で印刷が止まる現象が起こりました。
(いずれも"sheet1"以外が表示(アクティブになって?)されて、画面が止まりました…。)
・・・・・・・・
助言くださりありがとうございます(;;)ステップ実行…!やってみます!
(ちなみにボタンはフォームコントロールで作成しました。)
(AN) 2018/03/20(火) 06:29
Sub Sample()
Dim i As Long With ThisWorkbook.Worksheets("Sheet1") For i = 2 To 5 If .Cells(i, 1).Value = "〇" Then .Parent.Sheets(CStr(i - 1)).PrintOut End If Next i End With End Sub
特にこのマクロだけでは、ほかのシートに切り替わったりしませんね・・・
(テスト環境:Excel2013、Windows7)
(もこな2) 2018/03/20(火) 10:14
実際には試していないのですが、下記リンクの記事によりますと アクティブが切り替わることがあるようですね。 http://officetanaka.net/excel/vba/sheet/sheet08.htm (ろっくん) 2018/03/20(火) 10:33
ろっくん様
こんにちは。
調べて下さってありがとうございます(;;)!私では見つけられなかった記事です!
printoutだけでも、一瞬アクティブになってしまうということですね…?
その瞬間に何かつっかえてしまうのでしょうか…。
休憩時間が終わるため後ほどゆっくり拝見させて頂きます!
(AN) 2018/03/20(火) 13:13
ろっくん様
記事拝見いたしました!そちらに書かれている通り印刷の瞬間にシートがアクティブになることが原因のような気がします…。非表示のシートの印刷についてもとても勉強になりました。サイトを教えてくださりありがとうございました(;;)!
(AN) 2018/03/20(火) 19:31
このスレは完走ですか? 私の環境(Wondows10&Excel2007)では(判定基準は下記のとおり変えていますが)、 (マナ) 2018/03/17(土) 23:27でも (もこな2) 2018/03/20(火) 10:14でも 全く同様に正常に終了し、動作にも違いは見られません。 途中で停止するとか、最後にSheet1以外を表示して完了するということもありません。 印刷中に各シートが順に表示はされますが、最後にはSheet1を表示して完了します。 (他のシートが表示されて終了した場合にも最後の書類も印刷されていますか?)
私が気になるのは、印刷するものに「○」を判定基準にされていることです。 私は今回のような場合には、<>""(空白以外)を判定基準にします。 これによって入力を簡単にすることもできます。 どうしても="○"を使用したい場合には If .Cells(i, 1).Value = "*〇*" Then とか、入力規制のリスト入力をお勧めします。 私は記号(○)を判定基準に使うことは好まないということもありますが、 一度判定基準を変更してみられてはいかがでしょうか。 ( NN ) 2018/03/20(火) 22:17
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.