• ベストアンサー

【Excel】印刷前の設定に戻す

Excel2003を使用しています。 4シート(9ページ)を作業グループにして、印刷前にセルの塗りつぶしを解除して印刷。印刷終了後、セルの塗りつぶしを元の設定に戻す。 というマクロを作りたく、とりあえず、「新しいマクロの記録」でやってみました。 Sheets(Array("SheetA", "SheetB", "SheetC", "SheetD")).Select Sheets("SheetA").Activate で、コードが始まっていました。(SheetA,B,C,Dはシート名とします) このシート名の部分をシート名ではなく、シート番号で指定したいのですが、どのようにすればいいでしょうか?(単にシート番号に変更しても、エラーが出てしまいましたので。。。) マクロ勉強中でして、『Array』というのも今回初めて目にしました。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

選択シートのセルの塗りつぶし部分も白黒印刷したいのであれば、「ファイル」→「ページ設定」→「シート」で「白黒印刷」にチェックをつけておけば良いように思います。 マクロでするなら、以下になると思います。 Sub Macro3() ActiveSheet.PageSetup.BlackAndWhite = True ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveSheet.PageSetup.BlackAndWhite = False End Sub

rx-z5815
質問者

お礼

回答ありがとうございます。 >選択シートのセルの塗りつぶし部分も白黒印刷したいのであれば、「ファイル」→「ページ設定」→「シート」で「白黒印刷」にチェックをつけておけば良いように思います。 確かにこれで良さそうです。 プリンター側の設定で「白黒印刷」を選択しても、塗りつぶし部分が薄いグレーに印刷されていたので、一旦塗りつぶしを解除して…という操作を印刷前に行っていました。シート側で「白黒印刷」に設定しておけば、プレビューを見る限り大丈夫のようでした。 ありがとうございました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。Wendy02です。 >コードを少しいじって何度か試してみましたが、うまくいかず。。。 >どのようにしたらいいのでしょうか?よろしければ教えてください。 まだ、良く、配列変数について、お分かりになっていないようですね。 Array 関数の代わりに、ぜひ、覚えてください。VBAでは、配列は必須です。それは、ワークシートに数値や文字を置く代わりに、変数の中に擬似的なセルを置けるようなイメージになります。使い方は、ワークシートの配列よりもやさしいです。ここで、ワークシート関数で、VBA側の配列を特別に扱う関数がいくつか出てきます。代表は、MATCH() です。また、少し難しいのですが、INDEX()なども、特別な使い方をします。これに変わるちょうどよい関数が、VBAにはありません。 Sub TestArraySheet2() Dim i As Integer Dim j As Integer Dim ar() As Variant ReDim ar(3) '添え字の初期値は、0 For i = 4 To 7  ar(j) = i ' Worksheets(i).Name  j = j + 1 '別においたほうが分かりやすい  If i > Worksheets.Count Then Exit Sub Next i  Worksheets(ar()).Select End Sub

rx-z5815
質問者

お礼

再度の回答ありがとうございます。 回答を見たら、「あぁ、そうか…」という具合でして、まだまだ勉強不足のようです。お手数をおかけして申し訳ありません。 ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 >シート番号で指定したいのですが 私としては、シート番号は、暗黙的な順番でしかありません。だから、個人で良く分かっているものにしか使えないという欠点があります。意外に失敗することが多いです。 安全を期するなら、 >Sheets(Array("SheetA", "SheetB", "SheetC", "SheetD")).Select こういうリテラル文字列で代入するのが良いですが、この方法は、記録マクロに登場するコードで、特に、VBAのコーディングでは、通常使いません。入力に面倒だからです。 もしも、VBAとして、キメウチでなくコードで書くのでしたら、以下のようになります。Worksheet インデックスでも、名前でも、どちらでも同じです。もしも、名前で入れるときはに Instr 関数などで、選択除外項目を作ってあげたりします。一見、面倒のようには見えますが、このほうがはっきりしています。 Sub TestArraySheet1() Dim i As Integer Dim ar() As Variant ReDim ar(3) '初期値は、0 だてから、4の場合は、4-1 となります。 If Worksheets.Count < 4 Then Exit Sub For i = 1 To Worksheets.Count  ar(i - 1) = i ' Worksheets(i).Name Next i  Worksheets(ar()).Select End Sub

rx-z5815
質問者

お礼

Wendy02 さん、こんばんは。 回答ありがとうございます。 教えていただいたコードで試してみたのですが、作業グループに設定する4シートはシート番号でいうと、Sheet4,Sheet5,Sheet6,Sheet7 になっています。 コードを少しいじって何度か試してみましたが、うまくいかず。。。 どのようにしたらいいのでしょうか?よろしければ教えてください。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

単純に左から4つめまでのシートを作業グループにするのでいいのでしょうか? Sheets(Array(1, 2, 3, 4)).Select Sheets(1).Activate でよいかと思います。

rx-z5815
質問者

お礼

回答ありがとうございます。 今回は、単純に左から4つ目までというわけではなかったのですが、教えていただいた書き方がヒントになり、再度試してみたところ、シート番号で指定することができました。 ありがとうございました。

関連するQ&A

専門家に質問してみよう