[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.