• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:土曜・日曜・祝日に罫線を引く VBA)

土曜・日曜・祝日に罫線を引くVB​A

このQ&Aのポイント
  • 条件付き書式を使い、土曜・日曜・祝日に自動的にB列~N列までセルに色がつくように設定してあります。
  • 色がついたセル(土・日・祝)のB列~N列に、セルの真ん中を通る赤い線をマクロを使って引きたいと思っています。
  • よろしくお願いいたします。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.5

>祝日は、違うシートに書き出して、条件に=COUNTIF(シート名!$B$2:$B$72,$A6)=1 >(B2:B72まで祝日等のデータあり)を入れています。 Dim c As Range '前回の直線を削除 ActiveSheet.Lines.Delete For Each c In Range("B6:B36")   If Weekday(c.Offset(, -1).Value) = 7 Or _       Weekday(c.Offset(, -1).Value) = 1 Or _       Application.CountIf(Worksheets("シート名").Range("B2:B72"), c.Offset(, -1)) = 1 Then     With ActiveSheet.Shapes.AddLine(c.Left, c.Top + c.Height / 2, c.Offset(, 13).Left, c.Top + c.Height / 2)       .Line.ForeColor.SchemeColor = 10     End With   End If Next

AkB373
質問者

お礼

何度も何度も助けていただきありがとうございます。 参考にして、勉強させていただきます。

その他の回答 (4)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

>条件付き書式には、 >=WEEKDAY($A6)=7や=WEEKDAY($A6)=1 などが入っているのですが、 >(A6からA36までに2013/12/28などの情報があります)この式を直接入れてしまってよろしいのでしょうか? Dim c As Range '前回の直線を削除 ActiveSheet.Lines.Delete For Each c In Range("B6:B36")   If Weekday(c.Offset(, -1).Value) = 7 Or Weekday(c.Offset(, -1).Value) = 1 Then     With ActiveSheet.Shapes.AddLine(c.Left, c.Top + c.Height / 2, c.Offset(, 13).Left, c.Top + c.Height / 2)       .Line.ForeColor.SchemeColor = 10     End With   End If Next If Weekday(c.Offset(, -1).Value) = 7 Or Weekday(c.Offset(, -1).Value) = 1 Then これに祝日の判定を加える必要がありますが 祝日の判定は、どのようにされていますか

AkB373
質問者

お礼

ご回答ありがとうございます。

AkB373
質問者

補足

お世話になります。 祝日は、違うシートに書き出して、条件に=COUNTIF(シート名!$B$2:$B$72,$A6)=1(B2:B72まで祝日等のデータあり)を入れています。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! 横からお邪魔します。 オートシェイプを挿入するマクロはNo.1さんが的確なコードを載せていらっしゃいますので・・・ もしお使いのExcelが2010以降のバージョンであれば 「DisplayFormatオブジェクト」というものが追加されているようですので、 条件付き書式で色がついているセルを判別できます。 おそらく、月が変わるたびにマクロを実行する必要があると思いますので、 一旦オートシェイプを削除する必要あるのでは? 余計なお世話かもしれませんが・・・ Dim myShp As Object For Each myShp In ActiveSheet.Shapes myShp.Delete Next myShp を追加して、一旦表示されているオートシェイプを消してしまいます。 次に >If c.DisplayFormat.Interior.ColorIndex <> xlNone Then あとはNo.2さんのコードそのまま で条件付き書式で色がついているセルにオートシェイプが表示されると思います。 ※ Excel2007までの場合はすでに回答されているように IF の条件に 条件付き書式の条件を細かく設定してやる必要があると思います。 どうも失礼しました。m(_ _)m

AkB373
質問者

お礼

ご回答ありがとうございます。 使っているのが、2007なので、2010以降を使うときは、参考にさせていただきます。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

#1です。 >条件付き書式を使い、・・・・セルに色がつくように If c.Interior.ColorIndex <> xlNone Then ↑これでは、条件付き書式で付けられた色は判別できないです。 ここに、条件付き書式の数式を記載してください。

AkB373
質問者

お礼

ご回答ありがとうございました。

AkB373
質問者

補足

ご回答ありがとうございます。 条件付き書式には、 =WEEKDAY($A6)=7や=WEEKDAY($A6)=1 などが入っているのですが、(A6からA36までに2013/12/28などの情報があります)この式を直接入れてしまってよろしいのでしょうか?

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

こんばんは、参考に Dim c As Range '前回の直線を削除 ActiveSheet.Lines.Delete For Each c In Range("B1:B31")   If c.Interior.ColorIndex <> xlNone Then     With ActiveSheet.Shapes.AddLine(c.Left, c.Top + c.Height / 2, c.Offset(, 13).Left, c.Top + c.Height / 2)       .Line.ForeColor.SchemeColor = 10     End With   End If Next

AkB373
質問者

お礼

ご回答ありがとうございました。

関連するQ&A