目安箱 IV

目安箱投稿のルールはこちらをごらんください。
ご意見は電子メールで承っています。
「目安箱」は質問禁止です。技術的な質問はそれぞれの質問箱へどうぞ。

迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
233 / 262 ←次へ | 前へ→

【37】不特定な祝日を求めるエクセル関数とマクロ関数。
Excel  Jaka  - 03/10/28(火) 11:29 -

引用なし
パスワード
   不特定な祝日を求めるエクセル関数とマクロ関数。


検索曜日Noは、下記として。
日 月 火 水 木 金 土
1 2 3 4 5 6 7


基本(日にちだけです。)
=IF(検索曜日No>=WEEKDAY(DATE(年,月,1),1),検索曜日No-WEEKDAY(DATE(年,月,1),1)+((検索週-1)*7)+1,8-WEEKDAY(DATE(年,月,1),1)+((検索週-1)*7)+検索曜日No)

注)単純に足し算しているだけなので、存在しない2003年8月の第6土曜日は、36となってしまいますが、年、月、週、曜日が固定ならこれで十分だと思います。

1月の第2月曜日(成人の日)
=DATE(2003,1,IF(2>=WEEKDAY(DATE(2003,1,1),1),2-WEEKDAY(DATE(2003,1,1),1)+((2-1)*7)+1,8-WEEKDAY(DATE(2003,1,1),1)+((2-1)*7)+2))

7月の第3月曜日(海の日)
=DATE(2003,7,IF(2>=WEEKDAY(DATE(2003,7,1),1),2-WEEKDAY(DATE(2003,7,1),1)+((3-1)*7)+1,8-WEEKDAY(DATE(2003,7,1),1)+((3-1)*7)+2))

9月の第3月曜日(敬老の日)
=DATE(2003,9,IF(2>=WEEKDAY(DATE(2003,9,1),1),2-WEEKDAY(DATE(2003,9,1),1)+((3-1)*7)+1,8-WEEKDAY(DATE(2003,9,1),1)+((3-1)*7)+2))

10月の第2月曜日(体育の日)
=DATE(2003,10,IF(2>=WEEKDAY(DATE(2003,10,1),1),2-WEEKDAY(DATE(2003,10,1),1)+((2-1)*7)+1,8-WEEKDAY(DATE(2003,10,1),1)+((2-1)*7)+2))


存在しないデータを記入し、存在しない日付を返したくない時にエラーを返したいなら。

基本
=DATEVALUE(年 & "/" & 月 & "/" & IF(検索曜日No>=WEEKDAY(DATE(年,月,1),1),検索曜日No-WEEKDAY(DATE(年,月,1),1)+((検索週-1)*7)+1,8-WEEKDAY(DATE(年,月,1),1)+((検索週-1)*7)+検索曜日No))

例 セルにデータを記入して、2003年3月の第5、日曜日の年月日を求める。

 A    B    C    D
1 年   検索月  検索週  検索曜日
2 2003   3     5     1

=DATEVALUE($A$2 & "/" & $B$2 & "/" & IF($D$2>=WEEKDAY(DATE($A$2,$B$2,1),1),$D$2-WEEKDAY(DATE($A$2,$B$2,1),1)+(($C$2-1)*7)+1,8-WEEKDAY(DATE($A$2,$B$2,1),1)+(($C$2-1)*7)+$D$2))


・マクロ版エクセル関数(日にちだけ返します。)
(単純に回してるだけです。)

Function SarCWeek関数(年, 月, 検索週, 曜日)
  Dim DCnt As Long, DM As String, DD As String, FCFDM As String
  Application.Volatile
  FCFDM = Format(CDate(年 & "/" & 月 + 1 & "/" & 1) - 1, "d")
  For i = 1 To FCFDM
    bby = Format(CDate(年 & "/" & 月 & "/" & i), "aaa")
    If Format(CDate(年 & "/" & 月 & "/" & i), "aaa") = 曜日 Then
      DCnt = DCnt + 1
      If 検索週 = DCnt Then
       SarCWeek関数 = i
       Exit Function
      End If
    End If
  Next
  SarCWeek関数 = CVErr(xlErrValue)
End Function


PS
春分、秋分の日は、堪忍してください。
地中の自転までの計算はちょっと...
独断と偏見で、取合えず目安箱に載せます。

8,544 hits

【37】不特定な祝日を求めるエクセル関数とマクロ関数。 Jaka 03/10/28(火) 11:29 Excel[未読]
【38】文中間違い訂正。 Jaka 03/10/29(水) 12:14 Excel[未読]
【59】[管理者削除] [未読]
【88】一応、全部?の祝日です。 Jaka 05/2/28(月) 11:27 Excel[未読]
【89】Re:一応、全部?の祝日です。 ponpon 05/3/6(日) 20:53 Excel[未読]
【138】祝日表作成時の振替休日について Jaka 06/2/21(火) 13:50 Excel[未読]
【146】カレンダーコントロールみたなような・・・。 Jaka 06/5/22(月) 12:55 Excel[未読]
【147】標準モジュールのコード Jaka 06/5/22(月) 12:56 Excel[未読]
【173】7×7マスのカレンダー Jaka 06/12/26(火) 10:16 Excel[未読]
【182】祝祭日も入れてみた。 Jaka 07/1/9(火) 9:53 Excel[未読]
【187】↑の注意点。 Jaka 07/1/31(水) 10:46 Excel[未読]
【220】修正点 Jaka 07/12/5(水) 12:44 Excel[未読]
【221】祝日表をまとめてみた。 Jaka 07/12/6(木) 9:45 Excel[未読]
【227】Re:祝日表をまとめてみた。 VBWASURETA 08/1/24(木) 9:57 全般[未読]
【267】表に位置について。 Jaka 11/2/14(月) 16:59 Excel[未読]

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
233 / 262 ←次へ | 前へ→
ページ:  ┃  記事番号:   
0
(SS)C-BOARD v3.8 is Free