ある月の第3月曜日は何日か?をできるだけ早く求めるには?


頭が飽和  2005-09-29 01:20:50  No: 125800

VB6です。
カレンダーを作っています。
その月の、第2、第3月曜日が何日かを求める関数を作っています。
が、ループ処理で一つ一つ確認するコードしか浮かびません。
一発で求められるような関数がありましたらご教授願います。


あすとな〜じ  2005-09-29 01:46:06  No: 125801

月初日の曜日を求めて、そこからゴリゴリやってみると・・・

Dim str1stDay as String
Dim datToday as Date
Dim intWeek as Integer
Dim 2ndMonday as integer
Dim 3rdMonday as integer

str1stDay = "2005/09/01"    '←これは決め打ちではなくきちんと取得するほうが良いですね
datToday = DateValue(str1stDay)
intWeek = Weekday(datToday)

Select Case intWeek
    Case 1    '日曜日
        '第2月曜
  2ndMonday = intweek + 8
        '第3月曜
  3rdMonday = intweek + 15
    Case 2    '月曜日
        '第2月曜
  2ndMonday = intweek + 7
        '第3月曜
  3rdMonday = intweek + 14
    Case 3    '火曜日
        '第2月曜
  2ndMonday = intweek + 13
        '第3月曜
  3rdMonday = intweek + 20
    Case 4    '水曜日
        '第2月曜
  2ndMonday = intweek + 12
        '第3月曜
  3rdMonday = intweek + 19
    Case 5    '木曜日
        '第2月曜
  2ndMonday = intweek + 11
        '第3月曜
  3rdMonday = intweek + 18
    Case 6    '金曜日
        '第2月曜
  2ndMonday = intweek + 10
        '第3月曜
  3rdMonday = intweek + 17
    Case 7    '土曜日
        '第2月曜
  2ndMonday = intweek + 9
        '第3月曜
  3rdMonday = intweek + 16
End Select

こんな感じかなぁ?(全然スマートじゃないなぁ・・・)


あすとな〜じ  2005-09-29 01:51:30  No: 125802

うわ・・・インデントが滅茶苦茶だorz
見づらくてスミマセン


ちょこ㌧  2005-09-29 02:09:59  No: 125803

Dim intWeek As Integer
    Dim objDate As Date
    
    objDate = "2005/09/01"
    intWeek = Weekday(objDate)
    
    If intWeek <= 2 Then
        intWeek = 10 - intWeek
    Else
        intWeek = 17 - intWeek
    End If
    
    Debug.Print intWeek & "日が第2月曜日"
    Debug.Print intWeek + 7 & "日が第3月曜日"


ちょこ㌧  2005-09-29 02:15:35  No: 125804

debug.print objDate + intWeek - 1
でyyyy/mm/ddの形で出力されます。


GOD  2005-09-29 02:39:55  No: 125805

文字列型を日付型に直すのはかなりの時間が掛かるのでDateSerialを用いて
xxxx/xx/01を作ったほうが早いですね。
ちょこ㌧ さんのプログラムを改造すると↓見たいな感じ。

'呼び出し側の例えとして Test(2005,9) とする。

Private Sub Test(lngYear As Long, lngMonth As Long)
    Dim intWeek As Integer

    intWeek = Weekday(DateSerial(lngYear, lngMonth, 1))

    If intWeek <= 2 Then
        intWeek = 10 - intWeek
    Else
        intWeek = 17 - intWeek
    End If
    Debug.Print intWeek & "日が第2月曜日"
    Debug.Print intWeek + 7 & "日が第3月曜日"
End Sub


花ちゃん  2005-09-29 02:42:57  No: 125806

下記ではいかが。

Debug.Print ((9 - Weekday("2005/09")) Mod 7) + 1    '第一月曜日
Debug.Print ((9 - Weekday("2005/09")) Mod 7) + 8    '第二月曜日
Debug.Print ((9 - Weekday("2005/09")) Mod 7) + 15   '第三月曜日


特攻隊長まるるう  2005-09-29 04:16:02  No: 125807

皆さんのコードを参考にさせて頂き、曜日指定型の関数作ってみました。
Private Sub Command1_Click()
    Dim intWeek As Integer
    Dim objDate As Date
    Dim strWork As String
    objDate = Me.Text1.Text '2005/09/1
    intWeek = WeekDaysFirst(objDate, vbMonday)
    strWork = Format(DateSerial(Year(objDate), Month(objDate), intWeek), "aaaa")
    Debug.Print intWeek + 7 & "日が第2" & strWork
    Debug.Print intWeek + 14 & "日が第3" & strWork
End Sub
Private Function WeekDaysFirst(DateX As Date, WeekX As VbDayOfWeek) As Integer
    Dim intWeek As Integer
    If WeekX = vbUseSystemDayOfWeek Then WeekX = vbSunday
    intWeek = Weekday(DateSerial(Year(DateX), Month(DateX), 1))
    WeekDaysFirst = ((7 + WeekX - intWeek) Mod 7) + 1
End Function


ちょこ㌧  2005-09-29 07:09:23  No: 125808

>特攻隊長まるるう
お疲れ様です。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200509/05090150.txt
こっちの記事に私も興味あるんですが分かりかねますか?


ちょこ㌧  2005-09-29 07:10:50  No: 125809

さん付け忘れ、言葉足らずで申し訳ないです。
訂正致します。

>特攻隊長まるるうさん
お疲れ様です。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200509/05090150.txt
こちらの質問にも興味があるのですが分かりかねますでしょうか?


特攻隊長まるるう  2005-09-29 18:18:51  No: 125810

はい、分かりかねます。
ボクには興味の無い分野ですので。

それに質問掲示板で回答者を名指しするのは
どんなに丁寧な言葉を使ったところで回答を
強要する事になります。常識的な考え方が
できる人は普通しません。

だいたいこのスレッドに関係ない話題ですよね?。
こーゆー自分勝手な行動をしなくて済むように
ボクはメアドを公開してますので、どうぞ
ご利用下さい。


あすとな〜じ  2005-10-01 01:29:59  No: 125811

ところで、頭が飽和さんの問題は解決したのでしょうか?
気になります。


ぬるぽ^^  2005-10-02 15:16:47  No: 125812

>特攻隊長まるるう [E-Mail] 2005/09/29(木) 09:18:51
>はい、分かりかねます。
>ボクには興味の無い分野ですので。
>
>それに質問掲示板で回答者を名指しするのは
>どんなに丁寧な言葉を使ったところで回答を
>強要する事になります。常識的な考え方が
>できる人は普通しません。
>
>だいたいこのスレッドに関係ない話題ですよね?。
>こーゆー自分勝手な行動をしなくて済むように
>ボクはメアドを公開してますので、どうぞ
>ご利用下さい。


名無し  2005-10-02 17:51:18  No: 125813

何が言いたいんだろうか。


ガッ  2005-10-02 19:05:19  No: 125814

> ぬるぽ^^
ん…呼びました?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加