[[20130911223408]] 『VBA シートの色指定印刷』(knvb) ページの最後に飛ぶ

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

 

『VBA シートの色指定印刷』(knvb)

 約80あるシートを、色別に分けています。
 使用している色は、『ローズ』『ベージュ』『薄い黄』『薄い緑』の4色です。
 そのシートをVBAを用いて色別に印刷したいです。
 シート数は色毎で異なります。
 現在は、shift+選択で指定して印刷をかけていますが、訳あってシートが色毎にまとまっておらず、
 いちいち探して印刷をかけるのが手間に感じるようになりました。

 こういった作業は可能でしょうか?
 過去ログで探すことが出来なかったので、質問させていただきました。
 よろしくお願い致します。 Excel2003

 いろいろやり方はあると思いますが、現在アクティブなシートと同じ色を選ぶマクロです。
 Sub SelectSameColorSheet()
    Dim ws As Worksheet
    For Each ws In Worksheets
        If ws.Tab.Color = ActiveSheet.Tab.Color Then ws.Select False
    Next
 End Sub
 (Mook)

 Mookさん

 早速のご回答ありがとうございます。
 なるほど。。こういう考え方、方法もあるのですね。
 本当に助かりました。ありがとうございました。
 (knvb)

 追加質問です。

 アクティブなシート色に関係なく、ローズ・ベージュ…などのように特定色毎に分けてマクロを組みたい場合は、
 どういったコードになるでしょうか?
 また、『印刷』までを含んだコードですと助かります。

 よろしくお願い致します。
 (knvb)

 色じゃなくて、印刷用のシートを1枚作って、シート名を入れて、それを元に印刷した方が楽では?
 それともシート名では判別付かない理由がありますか?

 (稲葉)


 運用がわからないので、文面に書かれている範囲ですけれど、こういうことでしょうか。
 (Mook)

 Sub Sample()
    Dim d
    Set d = CreateObject("Scripting.Dictionary")

    Dim c
    Dim ws As Worksheet
    For Each c In Array(123, 456, 789, 1234) '// 実際の色を調べて入れてください。
        For Each ws In Worksheets
            If ws.Tab.Color = c Then d(ws.Name) = 1
        Next
        Sheets(d.keys).PrintOut
        d.RemoveAll
    Next
 End Sub


 稲葉さん

 ご返信ありがとうございます。
 適切に返答出来ているかわかりませんが、汲み取っていただけたら幸いです。

 約80あるシート名は顧客名です。つまり80名分です。
 一枚一枚それぞれ情報が入力してあります。 
『月火』曜日担当の人を○色、『水木』曜日の人を△色。のようにパターン別で、分かり易いように色で区別しています。
 当日、その顧客情報が業務上必要なため、前日に、該当者の情報を印刷して準備しています。

 シートの並びですが、基本的にはパターン別に並べ印刷し易くしてありますが、全てが同色で並んではいません。
 また印刷者が当方だけならまだ問題ないのですが、あまり詳しくないスタッフもおり、shift+での選択もままならない場合があります。
 そのため、ボタン一つでパターン別に印刷出来たら…。と考えた訳です。

 質問に適した返答なのか不安ではありますが、
 よろしくお願い致します。
 (knvb)

 Mookさん

 先日に引き続きありがとうございます。
 今から試してみます。
 ありがとうございました。
 (knvb)

 Mookさん

 ご教授いただいたコードを試したところ、
 『実行時エラー'13' 型が一致しません。』と表示されはじかれてしまいました。
 デバッグを確認したところ、
 Sheets(d.keys).PrintOut部分が黄色で表示されています。

 当方のやり方に問題ありますでしょうか?
 以下、エラーの出たコードです。

 Sub Sample()
    Dim d
    Set d = CreateObject("Scripting.Dictionary")

    Dim c
    Dim ws As Worksheet
    For Each c In Array(38) '//
        For Each ws In Worksheets
            If ws.Tab.Color = c Then d(ws.Name) = 1
        Next
        Sheets(d.keys).PrintOut
        d.RemoveAll
    Next
 End Sub
 (knvb)

 横入り失礼します。

 コードを貼り付けたファイルの中のシートタブに、38という色がないんじゃないかな?
次のを標準モジュールに貼り付けて、38だと思っているシートをアクティブにして、
実行してみると数値は何番になってますか?

 Sub test()
 MsgBox (ActiveSheet.Tab.Color)
 End Sub

 この後、外出するので、勘違いだったら、すみませんが、スルーしてください。
 (usamiyu) 

 連投失礼します。

 そういえば、バージョン2003なんですね。だったら、colorプロパティじゃなくて、colorIndexプロパティの
方がわかりやすいかも。
もしかして38ってピンク色みたいなのを想定していましたか?colorIndexプロパティの38番はそんな感じの色ですけど。

 Mookさんのコードの  If ws.Tab.Color = c Then d(ws.Name) = 1  これを次のように差し替えるとどう
なりますか?           If ws.Tab.ColorIndex = c Then d(ws.Name) = 1       
                                 ~~~~~~~~~~~

 ちなみにcolorプロパティとcolorIndexプロパティの違いは次の参照先が参考になるかもしれません。
http://officetanaka.net/excel/vba/cell/cell04.htm

 (usamiyu)
   


 usamiyuさん

 返答が遅くなり申し訳ありません。
 また、ご回答いただきありがとうございます。

 ご教授いただいたコードで、数値確認致しました。結果、『13408767』と表示されました。
 その数値に修正したところ、問題なく印刷出来ました。

 usamiyuさんご指摘の通り、薄いピンク色(ローズ)を想定していました。
 colorプロパティとcolorIndexプロパティの違いとは…。
 素人で申し訳ないです。
 勉強させていただきました。

 ご指摘の通り、当初のcolorIndex値『38』のまま、
 If ws.Tab.Color を If ws.Tab.ColorIndex と差し替えたところ印刷可能でした。

 (knvb)

 Mookさん、稲葉さん、usamiyuさん

 本当にありがとうございました。
 まさに当方がイメージしていた通りのマクロです。
 お蔭で業務がスムーズに進みそうです。

 ありがとうございました。
 (knvb)

 単色の印刷なら色は For にする必要がないですね。
 対象のシートがない場合の処理もあった方が良さそうです。

 解決後ですが、対策版。
 (Mook)
 '//----------------------
 Sub Sample()
    PrintTabColorSheets 123456
 End Sub

 '//----------------------
 Sub Sample2()
    For Each c In Array(123000, 456000, 789000)
        PrintTabColorSheets c
    Next
 End Sub

 '//----------------------
 Sub PrintTabColorSheets(tabColor)
    Dim d
    Set d = CreateObject("Scripting.Dictionary")

    Dim ws As Worksheet
    For Each ws In Worksheets
        If ws.Tab.Color = tabColor Then d(ws.Name) = 1
    Next
    If d.Count = 0 Then
        MsgBox "指定された色のシートがありません"
    Else
        Sheets(d.keys).PrintOut
    End If
    Set d = Nothing
 End Sub

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.