Excel VBA質問箱 IV

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

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


60402 / 76732 ←次へ | 前へ→

【20969】Re:フォルダー(該当月21日〜翌月20日サイクル)のファイル作成について
発言  Asaki  - 04/12/29(水) 11:11 -

引用なし
パスワード
   >dt2 = DateSerial(Year(dt2), Month(dt2) + CLng(Day(dt1) <> Day(dt2)), Day(dt2))
もうちょっと分かりやすく書くと↓のようになります。
If Day(dt1) <> Day(dt2) Then
  dt2 = DateSerial(Year(dt2), Month(dt2) - 1, Day(dt2))
End If

例えば、1/31のひと月後は
>dt2 = DateSerial(Year(dt1), Month(dt1) + 1, Day(dt1))
で計算すると、勝手に(気を利かせて?) 3/2 となります。
このような場合は、月の部分だけを見ると、ふた月後になっていますから、
月の部分を再度 -1 してやらなければ正しい結果が得られません。
このような現象が起こる場合は、必ず
Day(dt1) <> Day(dt2) … 今の例なら 31 <> 2
が成立しますから(↑の式が True になる)、これをLong型に変換して
CLng(Day(dt1) <> Day(dt2)) = -1
よって、元の日付と変換後の日付の日にちの部分が異なる場合は、月の部分を -1 する
という意味になります。

ちなみに、12/31 の ひと月後は、正しく 1/31 と算出されますから、-1 するのに年またぎの考慮は不要です。


このような書き方は、ある種のテクニックと考えてよいと思いますが、
↓のようなサンプルで、少しは理解の助けになるでしょうか?
(エラー処理していません)
Sub ex1()
  Dim a      As Long
  Dim b      As Long
  a = Application.InputBox("整数を入力してください", "変数 a を決定", Type:=1)
  b = Application.InputBox("整数を入力してください", "変数 b を決定", Type:=1)
  MsgBox "a = b ?" & vbCrLf & (a = b) & " --> " & CLng(a = b)
End Sub
1 hits

【20830】フォルダー(該当月21日〜翌月20日サイクル)のファイル作成について YN61 04/12/21(火) 19:12 質問
【20832】Re:フォルダー(該当月21日〜翌月20日サイ... Asaki 04/12/21(火) 20:32 回答
【20833】Re:フォルダー(該当月21日〜翌月20日サイ... Hirofumi 04/12/21(火) 20:37 回答
【20836】Re:フォルダー(該当月21日〜翌月20日サイ... Asaki 04/12/21(火) 21:25 回答
【20837】Re:フォルダー(該当月21日〜翌月20日サイ... Asaki 04/12/21(火) 21:49 発言
【20838】Re:フォルダー(該当月21日〜翌月20日サイ... YN61 04/12/21(火) 22:39 質問
【20840】Re:フォルダー(該当月21日〜翌月20日サイ... YN61 04/12/21(火) 23:41 質問
【20841】Re:フォルダー(該当月21日〜翌月20日サイ... かみちゃん 04/12/22(水) 0:30 発言
【20842】Re:フォルダー(該当月21日〜翌月20日サイ... YN61 04/12/22(水) 7:16 質問
【20843】Re:フォルダー(該当月21日〜翌月20日サイ... Asaki 04/12/22(水) 9:20 回答
【20851】Re:フォルダー(該当月21日〜翌月20日サイ... YN61 04/12/22(水) 19:29 お礼
【20906】Re:フォルダー(該当月21日〜翌月20日サイ... Asaki 04/12/24(金) 9:45 回答
【20939】Re:フォルダー(該当月21日〜翌月20日サイ... YN61 04/12/26(日) 20:52 質問
【20943】Re:フォルダー(該当月21日〜翌月20日サイ... Asaki 04/12/27(月) 10:00 回答
【20951】Re:フォルダー(該当月21日〜翌月20日サイ... YN61 04/12/27(月) 20:00 お礼
【20953】Re:フォルダー(該当月21日〜翌月20日サイ... Asaki 04/12/28(火) 9:32 回答
【20959】Re:フォルダー(該当月21日〜翌月20日サイ... YN61 04/12/28(火) 21:02 お礼
【20969】Re:フォルダー(該当月21日〜翌月20日サイ... Asaki 04/12/29(水) 11:11 発言
【21135】Re:フォルダー(該当月21日〜翌月20日サイ... YN61 05/1/12(水) 18:31 質問
【21144】Re:フォルダー(該当月21日〜翌月20日サイ... かみちゃん 05/1/13(木) 6:44 回答
【21178】Re:フォルダー(該当月21日〜翌月20日サイ... YN61 05/1/13(木) 20:48 お礼

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