プロが教えるわが家の防犯対策術!

「INPUT」という変数に年月日が代入されている場合
例えば月曜日の場合休日と記載させるプログラムを作成しようとした時に
===================================
If Weekday(INPUT) = vbMonday Then
 休日とする表示させる構文
End If
===================================
という構文ができると思うのですが
もし第4月曜日のみ休日と記載させる場合は
===================================
If Weekday(INPUT) = vbMonday Then
   If 【第4月曜日なら】 Then
    休日と表示させる構文
   End If
End If
===================================
と判定させるようにしたいのですが
どのように第4月曜日と判定させる構文を入力すればいいのでしょうか

A 回答 (3件)

こんにちは



日付の日数で判断すればよろしいかと。

週の数え方が、通常の日曜始まりのカレンダーでよいとするなら、第一週の月曜日という可能性があるのは1日か2日だけです。
第二週は、3~9日となるので、同様に、日付が17~23日なら第四週と判断できるのではないでしょうか?
    • good
    • 0

> 第4月曜日と判定させる構文


例えば今年の9月を対象にした場合だと、9月28日が第4月曜日に
なるのでしょうか?
翌日9月29日は第5火曜日となるような曜日が現れる回数なのか、
日曜開始で第〇週目のような9月21日が第4月曜日となる週数での
判定なのかで、求めるものが違います。

第〇週目のようなものなら、WEEKNUM関数やDatePart関数など
年の何週目を求めるもので、月始めの週と指定日の週を計算をして
出すことが可能だと思います。
DatePart関数なら曜日も第〇週も指定できますよ。
https://www.relief.jp/docs/excel-vba-function-da …
http://kosapi.com/post-2352/
    • good
    • 0

daiXyoubi(date1)はdate1の曜日がその月の何回目の出現なのかを返す関数として作成しました。

(一行なので関数にする必要もないけど・・・)
つまり、その日が月曜日であることが判明している場合、「第○月曜日」にあたるか「○」のに入る数を返すと言うことです。
ご質問者のご希望が「第4月曜日」の判定なら、この関数が4に等しいことを条件にすればよい訳です。A1セルに判定すべき日付が入力されている(ご質問者の例では変数INPUT)とした例を以下に示します。

Sub sumple()
Dim date1 As Date
date1 = Cells(1, 1).Value
If Weekday(date1) = vbMonday Then
  If daiXyoubi(date1) = 4 Then
    MsgBox "第4月曜日です"
  End If
End If
End Sub

Function daiXyoubi(date1)
  daiXyoubi = WorksheetFunction.RoundUp(Day(date1) / 7, 0)
End Function
    • good
    • 0

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