- ベストアンサー
休日の関数を動かしたい
- 休日の関数を使いたいのですが、どんな関数を追加すればいいのでしょうか?
- シートには、特定のセルが変更された場合に、指定した条件に応じて他のセルの値を変更するコードが入っています。
- アドインには分析ツールと分析ツールVBAの両方がチェックされています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
休日の関数が特に用意されているわけではありません。 次のようにすることで平日の場合でも日曜日や土曜日さらには別に指定した祝日などを避けた日付が表示されるように、また、休日の場合では日曜日や銅曜日の日付が表示されるようにするためには次のようなマクロにすることが必要でしょう。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim h As Range On Error Resume Next i = 0 For Each h In Application.Intersect(Target, Range("N:N")) If h > 0 Then Select Case Cells(h.Row, "B") Case "毎日" Cells(h.Row, "A") = Cells(h.Row, "A") + 1 Case "平日" myDate1 = Cells(h.Row, "A") Do i = i + 1 myDate = myDate1 + i myWeekday = Weekday(Date:=myDate) myHolyday = WorksheetFunction.CountIf(Worksheets("Sheet2").Range("A:A"), myDate) Loop Until myWeekday <> 1 And myWeekday <> 7 And myHolyday = 0 '日曜日と土曜日以外さらにシート2のA列での休日を含まない日を選んでいます。 Cells(h.Row, "A") = myDate Case "休日" myDate1 = Cells(h.Row, "A") Do i = i + 1 myDate = myDate1 + i myWeekday = Weekday(Date:=myDate) Loop Until myWeekday = 1 Or myWeekday = 7 '日曜日又はの場合の日付を選んでいます。 Cells(h.Row, "A") = myDate Case "毎週" Cells(h.Row, "A") = Cells(h.Row, "A") + 7 Case "隔週" Cells(h.Row, "A") = Cells(h.Row, "A") + 14 Case "毎月" Cells(h.Row, "A") = DateAdd("M", 1, Cells(h.Row, "A")) Case "隔月" Cells(h.Row, "A") = DateAdd("M", 2, Cells(h.Row, "A")) End Select End If Next For Each h In Application.Intersect(Target, Range("B:B")) If StrConv(h, vbNarrow) = "-" Then Cells(h.Row, "A").ClearContents End If Next End Sub
その他の回答 (1)
- bin-chan
- ベストアンサー率33% (1403/4213)
> N7に1が入ると A7が 8/12になる > N8に1が入ると A8が 8/12になる 8/12、今年は日曜日ですよね。 「どういう理由で8/12なのか」をもっと詳しく教えてください。
補足
説明が不足していました N列に0以上の数字が入力されたらA列の日付を変えたい B列の 毎日は +1日後 B列の 毎週は +7日後 B列の 休日は 月~金を飛ばして 次の土日 つまり N7に1が入力されると A7が 8/12になるという意味です。
お礼
回答ありがとうございました 動作確認取れました 助かりました 完璧です