• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:休日の関数を動かしたい)

休日の関数を動かしたい

このQ&Aのポイント
  • 休日の関数を使いたいのですが、どんな関数を追加すればいいのでしょうか?
  • シートには、特定のセルが変更された場合に、指定した条件に応じて他のセルの値を変更するコードが入っています。
  • アドインには分析ツールと分析ツールVBAの両方がチェックされています。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.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

ryujixryuj
質問者

お礼

回答ありがとうございました 動作確認取れました 助かりました 完璧です

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> N7に1が入ると A7が 8/12になる > N8に1が入ると A8が 8/12になる 8/12、今年は日曜日ですよね。 「どういう理由で8/12なのか」をもっと詳しく教えてください。

ryujixryuj
質問者

補足

説明が不足していました N列に0以上の数字が入力されたらA列の日付を変えたい B列の 毎日は +1日後 B列の 毎週は +7日後 B列の 休日は 月~金を飛ばして 次の土日 つまり N7に1が入力されると  A7が 8/12になるという意味です。