ここから本文です

アクセスで一番近い月末を求めたいです。 DateSerialで月末は求めれますが、今月...

まろんさん

2018/1/214:55:10

アクセスで一番近い月末を求めたいです。
DateSerialで月末は求めれますが、今月末を含め、今日から近い月末を求めたいです。

12/28→12月31日
1/3→12月31日
1/17→1月31日

よろしくお願いします。

閲覧数:
141
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

hat********さん

2018/1/216:08:39

4/15だと、ちょうど真ん中ですが、3/31か4/30のどちらになりますか。

4/30だとすると、下記のような関数で。

Public Function NearEndOfMonth(ByVal D As Date) As Date

NearEndOfMonth = DateSerial(Year(D), Month(D) + 1, 0)
If NearEndOfMonth - D > Day(D) Then
NearEndOfMonth = D - Day(D)
End If

End Function

3/31なら、Ifの比較部分を下記にしてください。
If NearEndOfMonth - D >= Day(D) Then

  • hat********さん

    2018/1/216:16:18

    補足
    今日を基準にする場合は、下記のようにします。
    NearEndOfMonth(Date())


    自作関数を作成せずにやるなら下記のようになります。

    IIf(DateSerial(Year(Date()), Month(Date()) + 1, 0)-Date()>Day(Date()),Date() - Day(Date()),DateSerial(Year(Date()), Month(Date()) + 1, 0))

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

con********さん

2018/1/216:20:06

Public Function GetNearlyMonthEnd(datDate As Date) As Date
'指定された日付に最も近い日付を返す
Dim intYear As Integer
Dim intMonth As Integer
Dim datThisMonthEnd As Date
Dim datPrevMonthEnd As Date

intYear = Year(datDate)
intMonth = Month(datDate)

datThisMonthEnd = DateSerial(intYear, (intMonth + 1 Mod 12), 1) - 1
datPrevMonthEnd = DateSerial(intYear, intMonth, 1) - 1

If datDate - datPrevMonthEnd < datThisMonthEnd - datDate Then
GetNearlyMonthEnd = datPrevMonthEnd
Else
GetNearlyMonthEnd = datThisMonthEnd
End If

End Function

ユーザ定義関数で対応することになるのでしょうね。
上記コードを標準モジュールに記述してください。
なお、今月末までと前月末までが同じ場合、今月末を返します。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる