[[20180317215235]] 『sheet1の表に○を付けたsheetのみ印刷したい。』(AN) ページの最後に飛ぶ

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

 

『sheet1の表に○を付けたsheetのみ印刷したい。』(AN)

過去ログを探したのですが
見つからなかったため、新たに質問させて頂きます。

書類のデータが入ったシートが15個ほどあり、
それぞれのシートの名前は(書類名にすると長いので)「1」〜「15」となっています。
sheet1には書類名の一覧と、その左側に○を入力するための枠を設けてあります。
印刷したい書類名の左に○をつけて、印刷ボタン(今回のマクロを登録したボタン)を押すと、
○がついた書類のシートのみ印刷されるようにしたい という状態です。
(使用する予定の方々はエクセルをほとんど使用した事がないため、このようなものを用意する事になりました。)
自分で調べながらIF文を使って、出来たには出来たのですが、
『A2に○がある時は、「1」のシートを印刷』×15個といった感じの、
非常に長々しい状態で、(今回VBAを調べる中で、余計なものを省いた綺麗なものを
作りたいという欲が出てきてしまって。笑)なんとか簡素化?出来ないものかと思い、相談させていただきました。
分かりにくい文章で申し訳ありません。
何卒ご教示のほど、よろしくお願いいたします。
(一応は使用出来ているので急ぐ質問ではありませんが、『●●を使えばいいんじゃない』くらいの助言でも頂けたら嬉しいです。)

< 使用 Excel:Excel2013、使用 OS:Windows7 >


>自分で調べながらIF文を使って、出来たには出来たのですが、

それを提示していただけますか

(マナ) 2018/03/17(土) 22:58


早速のお返事ありがとうございます!
そうですよね、見てみないことにはって感じですよね(T-T)
そちらが入っているパソコンが職場のものなのですが、セキュリティの都合上?でネットに繋がらないようになっていまして、休憩時間や自宅でスマホで調べて、メモして、仕事中に打ち込むという形で作ったものでして…お恥ずかしながら、今、どんなものかを提示するのは難しいです…(>_<)申し訳ありません。。
(AN) 2018/03/17(土) 23:06

うろ覚えて申し訳ありません(>_<)

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


For〜Nextを使います。
 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


>印刷するシートをselectしていなくても、selectされてしまう(?)ことはあるのでしょうか…?

ないと思いますが、断言できるほどの知識も経験もありません。

(マナ) 2018/03/19(月) 22:47


マナ様
お返事くださりありがとうございます(;;)
「ねーよ」くらい言われる覚悟でおりましたが、うぅ、なんともお優しい。。
気にしないことにします…。
この度は本当にありがとうございました!!
(AN) 2018/03/19(月) 23:01

>印刷するシートをselectしていなくても、selectされてしまう(?)ことはあるのでしょうか…?

横からですけど・・・
私も勉強中なので絶対そうだとは言えないですけど、マクロからも、手動操作からもSelectする操作をしなければ、Selectされないとおもいます。というか勝手にそうなったら困りますよね。

>どうしてもシートが動いてしまうので、入れていたのですが、すっかり忘れておりました。
別に対象シートをアクティブにしなくても印刷できたかとおもうので、できればselectする操作は排除したほうがよいとおもいます。(無駄な動きをさせて処理を重くする必要がない)

(もこな2) 2018/03/20(火) 00:01


もこな2様
コメントありがとうございます!
そうですよね、、一体何が原因なのでしょう…。
このコード以外にはSubとEndSubしか入っておりませんし、
sheet1にボタンを配置しているで、始めはsheet1がアクティブ?なのです。
そして、(私の推測ですが)シートが動いてしまうと、A列に○がないので、印刷がストップしてしまうようなのです。
色々と検索してみたのですが、皆目検討もつかず…(;;)
初心者の私にはシートをsheet1に戻すくらいしか対策が思い付きません…(;;)

(AN) 2018/03/20(火) 00:17


>このコード以外にはSubとEndSubしか入っておりませんし
どのコードでしょう・・・・

ノートPCなどでモニタが小さいとちょっと大変かもしれないですが、ExcelのウィンドウとVBE(エディタ)のウィンドウを左右に並べてからステップ実行してみて、シートがどこで切り替わっているのかステップ実行しながら調べてみるとよいかもですね。

また、配置されてるボタンが「フォームコントロール」なのか「ActiveXコントロール」なのか分かりませんが、後者であれば、コードをシートモジュールに記述しているのでしょうから、「シートが動いてしまうと、A列に○がないので〜 」っていうのはあんまり心配するところではないかも・・・

(もこな2) 2018/03/20(火) 00:42


もこな2様
おはようこざいます。

〉どのコードでしょう・・・・ 
分かりにく文章で申し訳ありません(;;)
元々のコードが、

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


そうなるとウーン...謎ですね。
後で私もテストしてみます。
(もこな2) 2018/03/20(火) 07:38

テストしてみたので結果を投稿。
また、フォームコントロールでボタン作ってるってことなので、標準モジュールにコード書いてると推測してちょっと付け足し。

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

もこな2様
こんにちは。
ステップ実行してみましたところ、ステップ実行では、正常に動作いたしました!
(余談。ステップ実行を初めて使用したのですが面白いですね!For〜Nextを循環する様子など、おぉ〜(゜o゜)となりました。笑)
テストまでして下さってありがとうございます(;;)や、優しい…。
そちらのコードで午後試してみます!

ろっくん様
こんにちは。
調べて下さってありがとうございます(;;)!私では見つけられなかった記事です!
printoutだけでも、一瞬アクティブになってしまうということですね…?
その瞬間に何かつっかえてしまうのでしょうか…。
休憩時間が終わるため後ほどゆっくり拝見させて頂きます!
(AN) 2018/03/20(火) 13:13


もこな2様
ご教授頂いたコードで実行してみました!
最後まで印刷は出来たのですが、sheet1ではなく最後に印刷した書式のシートが表示されて終了してしまいました…(;;)ご尽力頂きましたのに申し訳ありません。。
でも途中で止まらずに○をつけた書式を印刷し終えることが出来ましたのですごい進歩です!
またParentというものを初めて目にしました。検索したところ、親オブジェクトを取得してくれるのですね…面白い!
ご協力くださりありがとうございました(;;)

ろっくん様
記事拝見いたしました!そちらに書かれている通り印刷の瞬間にシートがアクティブになることが原因のような気がします…。非表示のシートの印刷についてもとても勉強になりました。サイトを教えてくださりありがとうございました(;;)!

(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.