アプリ版:「スタンプのみでお礼する」機能のリリースについて

もしエクセルのシート名に'いらない'と入っていたらそのシートは印刷しないで他はすべて印刷するというvba を組んでいるのですがどのようにしたらいいか教えてください。

質問者からの補足コメント

  • Sub insatu(intA As String)
    Dim f As String
    Dim wb As Workbook
    Dim wscnt As Long
    Dim i As Long
    Set wb = Workbooks.Open(intA)
    wscnt = wb.Worksheets.Count
    For i = 1 To Sheets.Count
    If Sheets(i).Visible = True Then
    wb.Worksheets(i).PrintOut
    Exit For
    End If
    Next i
    wb.Close
    Set wb = Nothing
    End Sub

      補足日時:2018/03/06 14:59
  • Sub test1()
    insatu ("ファイルパス名")

    End Sub

    ここまでは作っています

      補足日時:2018/03/06 15:00

A 回答 (6件)

こんにちは。


こういう話ではないのでしょうか?

Sub Main()
Call insatu("TestFile.xlsx")
End Sub

Sub insatu(strA As String)
 Dim i As Long
 With Workbooks.Open(strA)
  .Activate
   For i = 1 To .Worksheets.Count
    If Not .Worksheets(i).Name Like "*いらない*" Then
     .Worksheets(i).Select False
    End If
   Next i
   ActiveWindow.SelectedSheets.PrintPreview
  ' 'ActiveWindow.SelectedSheets.PrintOut ' 大丈夫だとわかったら、上と入れ替えてください。
   Application.Wait Now + TimeSerial(0, 0, 10) '終了の前に待ちを入れました。
   .Close False
 End With
End Sub
    • good
    • 1
この回答へのお礼

終了の前の待ちを抜かしたら自分がやりたかったコードそのものです!ありがとうございました!★

お礼日時:2018/03/07 13:34

No.2・4です。



>ちなみにいらないのシートも全て印刷されちゃうってことです

ん~~~
シート名が「いらない」そのもの、または
「いらない」が含まれる場合でもそのシートが印刷されてしまいますか?
今一度シート名を確認してみてください。

No.2の最後に記載したようにコード変更しても印刷されてしまいますか?m(_ _)m
    • good
    • 0
この回答へのお礼

練習用に作ったシート名が間違ってるだけでした^^;上手く完成しました!ありがとうございます!

お礼日時:2018/03/07 13:25

No.2です。



>全シート印刷されちゃいました

はい。質問文に
>シート名に'いらない'と入っていたらそのシートは印刷しないで他はすべて印刷する・・・

となっていますので、「いらない」以外のシートはすべて印刷されます。

※ 余計なお世話かもしれませんが、一気に印刷するのではなく
>Worksheets(i).PrintPreview
としておけば印刷プレビューでマクロが止まりますので
確認して手動で印刷する方が紙の無駄がないと思います。m(_ _)m
    • good
    • 0
この回答へのお礼

プレビュー使ってみたらとても便利ですね!ありがとうございます!★ちなみにいらないのシートも全て印刷されちゃうってことです(~_~;)

お礼日時:2018/03/07 09:45

No1です



>いらない というシートを印刷しない指示の仕方がわからないです
i番目のシート名は、wb.Worksheets(i).Name で得られます(文字列型)
この中に「いらない」が含まれているかどうかを調べる方法はいろいろありますが、一例として
 wb.Worksheets(i).Name Like "*いらない*"
で調べることが可能です。
含まれている場合は、TRUEに、含まれていなければ、FALSEになります。
これを利用して、含まれていない場合に印刷するようになさればよいのでは?

>visibleの文書は不要なのですか?
処理の内容によるので、私には要/不要の判断はできません。
 wb.Worksheets(i).Visible = True
上記は、当該シートが表示状態である(=非表示に設定されていない)という意味になります。
通常、非表示のシートを利用することはそれほど多くはないと想像しますので、もしかすると不要かもと妄想した次第です。
    • good
    • 0
この回答へのお礼

とてもわかりやすいです!ありがとうございます★

お礼日時:2018/03/07 09:56

こんにちは!



>シート名に'いらない'と入っていたら・・・

シート名そのものが「いらない」の場合は
>If Worksheets(i).Name <> "いらない" Then

「いらない」がシート名に含まれている場合は
>If InStr(Worksheets(i).Name, "いらない") = 0 Then

としてみてはどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

elseにして文書を付け加えてみたけど全シート印刷されちゃいました( ; ; )もう少し頑張ってみますね!

お礼日時:2018/03/06 16:36

こんにちは



ご提示のコードは各シートに対して、
 .Visible = True
であれば印刷するような、雰囲気にはなっていますので、この条件に『シート名に'いらない'と入っていない』という条件を追加すればよろしいかと。
(.Visibleの条件が不要なら、新しい条件に入れ替えればよいですね)
(↑)の「雰囲気」というのは、実際にはそうはなっていないけれど、構造的にはそれっぽい形になっているという意味です。(詳しくは「おまけ」を参照してください)

シート名に「いらない」という文字列が含まれているかどうかは
 wb.Worksheets(i).Name Like "*いらない*"
で判別することが可能ですので、これを利用して条件を作成すればよろしいかと。


<おまけ>
・変数wscntは値を代入してはいますが、以降使用していないので、無くても同じです。
・シートの指定に「Sheets(i)」としたり「wb.Worksheets(i)」を用いたりと混在していますが、統一しておいた方が良いです。(今回の場合は、wb.Worksheets(i)が良いでしょう)
・Exit Forがありますが、最初に印刷を行うと必ずこの処理を通るようになっています。
 結果的に、「最初の1シート目を印刷したら終了する」という処理になるので、「すべて印刷」にはなりません。
・問題はないのですが、intA As StringってintAという変数名からInteger型の変数を連想しやすいので、他の方が見る時や後日ご自身で見る時を考慮するなら、内容をイメージしやすい変数名を用いるようにした方がベターだと思います。(今回の場合なら、filePathとか)
    • good
    • 1
この回答へのお礼

ありがとうございます!おまけ部分はわかりやすくて訂正したのできたのですが、いらない というシートを印刷しない指示の仕方がわからないですm(_ _)mまたvisibleの文書は不要なのですか?

お礼日時:2018/03/06 16:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!