1362207095 Excelについて質問です。


[発送状況]列が「発送前」のとき、
[受付日]列の日付から6営業日過ぎたら、[受付日]列を赤いセルにしてアラートを表示させたい。

条件として、
・[発送状況]列が「発送前」のとき
・6営業日のカウントは、
 カレンダーと同じく土日祝日を除いた平日
・アラートの解除に関しては、手段を考えていないですが、
 いいアイデア等ありましたら教えていただきたいです。

ソースでの回答を希望します。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/03/02 15:51:35
  • 終了:2013/03/03 00:56:34

ベストアンサー

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982013/03/02 16:23:58

ポイント500pt

祝日を求める関数はありませんので 自分で用意しないといけません。

とりあえず E列の3行目から祝日の日付を入れてください。

2013/2/11
というように年月日で。
春分の日とか 毎年 変わりますし、ハッピーマンデー対応や
年末年始の祝日じゃない営業休みなどの日付も 入れます。

Sub チェック()
Dim b As Long
Dim c As Long
Dim at As Date

'現在の日付から 6日前の日付を取得する。

at = Date
b = Cells(Rows.Count, "E").End(xlUp).Row

For a = 1 To 6
    at = at - 1
    While 祝日チェック(at, b)
    Wend
Next a


b = Cells(Rows.Count, "C").End(xlUp).Row
For c = 3 To b
    If Cells(c, "B") = "発送前" And Cells(c, "C") <= at Then
        Cells(c, "C").Interior.ColorIndex = 3
        Cells(c, "C").Interior.Pattern = xlSolid
    End If
Next c


End Sub

Function 祝日チェック(at As Date, b As Long) As Boolean
    Dim c As Long
    If Format(at, "aaa") = "日" Then
        at = at - 2
        祝日チェック = True
        Exit Function
    End If
    
    If Format(at, "aaa") = "土" Then
        at = at - 1
        祝日チェック = True
        Exit Function
    End If

    For c = 3 To b
        If at = Cells(c, "E") Then
            at = at - 1
            祝日チェック = True
            Exit Function
        End If
    Next c

    祝日チェック = False
End Function


Sub アラート解除()
Dim b As Long
Dim c As Long

    b = Cells(Rows.Count, "C").End(xlUp).Row
    For c = 3 To b
            Cells(c, "C").Interior.ColorIndex = xlNone
    Next c
End Sub



何日前というのは
For a = 1 To 6
の 6の値を変更してもらえればいいです。

他1件のコメントを見る
id:taknt

アラートを解除するときは アラート解除を実行してください。

2013/03/02 16:35:08
id:japan-nan

大変ありがとうございました!
おかげさまで希望通りのツールとなりました。

2013/03/03 00:56:24

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません