• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 塗りつぶしルール)

VBAで表の塗りつぶしを制御する方法

このQ&Aのポイント
  • VBAを使用して、表の特定のセルに数値を入力すると、その横のセルの背景を塗りつぶすことができます。例えば、I9セルに数値を入力すると、J9セルからY9セルまで(4日間)を塗りつぶすことができます。
  • しかし、休日のセルを飛ばして残りの日にちを指定したい場合は、V9から始めることができます。具体的には、I9セルに数値を入力した場合、U9セルまでは通常の塗りつぶしを行い、V9からY9セルまでの休日を飛ばして、AD9セルから始めることができます。
  • 日付と曜日を塗りつぶしている色はColorIndex = 38です。また、祝日の場合でも同じColorIndex = 38で塗りつぶします。したがって、月火を塗りつぶし、水曜日は空けて木金を塗りつぶす場合なども対応可能です。

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

  • ベストアンサー
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

> 関係あるかわかりませんが、2行目の日付が入っているセルはF列からI列まで、J列からM列まで・・・、といった感じで4列ずつで結合されています。 > これが原因なのでしょうか? これです……。 結合セルは右上のセルだけが塗りつぶされている扱いになります。 必ず4列づつ結合されていると言う前提でコードを修正しました。 nCol = Target.Column + 1 nCount = 0 Do While nCount < 16   If Cells(2, nCol).Interior.ColorIndex <> 38 Then     If nCount = 0 Then       Set MyRange = Range(Cells(Target.Row, nCol), Cells(Target.Row, nCol + 3))     Else       Set MyRange = Union(MyRange, Range(Cells(Target.Row, nCol), Cells(Target.Row, nCol + 3)))     End If     nCount = nCount + 4   End If   nCol = nCol + 4 Loop

yyrd0421
質問者

お礼

ありがとうございます。 頂いたコードで望み通りの操作が行えました。 本当にありがとうございました。

その他の回答 (2)

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.3

訂正 誤:結合セルは右上のセルだけが塗りつぶされている扱いになります 正:結合セルは左上のセルだけが塗りつぶされている扱いになります

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

図が細かすぎて良く見えないのですが、2行目がColoeIndex=38なら色を塗らないって事で良いんでしょうか。 こんな感じでどうでしょう。元のコードの一部を以下の様に書き換えてください。 Set MyRange = Range(.Cells(Target.Row, Target.Column + 1), _ .Cells(Target.Row, Target.Column + 16)) ↓ nCol = Target.Column + 1 nCount = 0 '2行目がColorIndex=38では無いセルを16個 MyRangeにセット Do While nCount < 16   If Cells(2, nCol).Interior.ColorIndex <> 38 Then     If nCount = 0 Then       Set MyRange = Cells(Target.Row, nCol)     Else       Set MyRange = Union(MyRange, Cells(Target.Row, nCol))     End If     nCount = nCount + 1   End If   nCol = nCol + 1 Loop

yyrd0421
質問者

補足

図が見ずらい件、申し訳ございません。 頂いたコードを試してみました。 実行すると土曜のR9セルと日曜のV9セルは塗りつぶされなかったのですが 土曜日のS9からU9と日曜のW9からY9セルが塗りつぶされてしまいました。 関係あるかわかりませんが、2行目の日付が入っているセルはF列からI列まで、J列からM列まで・・・、といった感じで4列ずつで結合されています。 これが原因なのでしょうか?

関連するQ&A

専門家に質問してみよう