Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


67710 / 76733 ←次へ | 前へ→

【13575】Re:VBAでの曜日の取得
回答  Hirofumi E-MAIL  - 04/5/7(金) 21:06 -

引用なし
パスワード
   こんなのも有るよ
Excelのユーザー定義関数としても使えます
第1引数のvntDateには、調べたい月が含まれる日付を指定
 例 2004年の5月を調べたいなら、2004/05/01〜2004/05/31を指定
第2引数は、調べたい曜日を番号で指定
 日曜=1、月曜=2、、土曜=7とする
第3引数は、調べたい週を番号で指定
戻り値は、シリアル値が帰ります

例えば、5月の第2月曜が何日かを出すなら

= TheFirstWeek("2004/05/01", 2, 2)

とします

Public Function TheFirstWeek(ByVal vntDate As Variant, _
          ByVal lngDayNum As Long, _
          Optional lngNum As Long = 1) As Variant

'  月の第何曜日が何日かを取得
'          vntDate  :知りたい月が含まれる日付(例 2004/5/1)
'                年、月だけが有効
'          lngDayNum :日曜=1、月曜=2、、土曜=7
'          lngNum   :第何週目

  Dim i As Long
  Dim lngYear As Long
  Dim lngMonth As Long
  
  TheFirstWeek = ""
  '日付と認められない場合
  If Not IsDate(vntDate) Then
    Exit Function
  End If
  
  '曜日番号を計算上の番号に変換
  lngDayNum = lngDayNum Mod 7
  '年を取得
  lngYear = Year(vntDate)
  '月を取得
  lngMonth = Month(vntDate)
  '月初を取得
  vntDate = DateSerial(lngYear, lngMonth, 1)
  '第1週の指定曜日の日付を取得
  vntDate = vntDate + ((7 - (vntDate Mod 7) + lngDayNum) Mod 7)
  '指定の週の日付を取得
  vntDate = vntDate + 7 * (lngNum - 1)
  '月内に入る場合は戻り値とする
  If vntDate >= DateSerial(lngYear, lngMonth, 1) _
      Or vntDate >= DateSerial(lngYear, lngMonth + 1, 0) Then
    TheFirstWeek = vntDate
  End If
  
End Function

3 hits

【13558】VBAでの曜日の取得 strm 04/5/7(金) 13:23 質問
【13560】Re:VBAでの曜日の取得 IROC 04/5/7(金) 13:30 回答
【13561】Re:VBAでの曜日の取得 strm 04/5/7(金) 14:23 質問
【13562】Re:VBAでの曜日の取得 Asaki 04/5/7(金) 14:34 回答
【13565】Re:VBAでの曜日の取得 strm 04/5/7(金) 15:00 質問
【13566】Re:VBAでの曜日の取得 Jaka 04/5/7(金) 15:06 発言
【13575】Re:VBAでの曜日の取得 Hirofumi 04/5/7(金) 21:06 回答
【14040】Re:VBAでの曜日の取得 strm 04/5/18(火) 22:32 お礼

67710 / 76733 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free