重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こちらで 質問して 平日の関数 を追加したおかげで、とても助かっています。
そこで、休日の関数を使いたいのですが、そんな関数はあるのでしょうか



N7に1が入ると A7が 8/12になる
N8に1が入ると A8が 8/12になる

にしたいのですが、
どんな関数を下記にに追加すればいいのでしょうか?



ちなみに アドインには 分析ツールと分析ツール VBA  両方共チェックがあります。

シートには、下記のコードが入っています。
ご存知のかた教えていただければ助かります。


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim h As Range
On Error Resume Next
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 "平日"
Cells(h.Row, "A") = Application.Run("ATPVBAEN.XLA!WorkDay", Cells(h.Row, "A"), 1)
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

「休日の関数を動かしたい」の質問画像

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/08/03 13:13

> 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になるという意味です。

補足日時:2012/08/02 23:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!