Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Microsoft 365)
日付の中の「年」のみをクエリを使用して今年にを置き換えたい
投稿日時: 23/04/03 13:26:08
投稿者: ちむタイガー

いつもお世話になっております。
データを取り込んだ際に自動で修正したいので、クエリで修正する方法を探しています。
年月日の年の部分だけを置き替える方法を教えてください。
 
下記のように年が2023や2022や2021のように混在しています。
 
2023/4/1
2023/4/1
2022/4/2
2023/4/1
2021/4/2
2020/4/5
 
これを下記のように今年の西暦に修正したいのです。
 
2023/4/1
2023/4/1
2023/4/2
2023/4/1
2023/4/2
2023/4/5
 
ご教授よろしくお願いいたします。

回答
投稿日時: 23/04/03 14:28:35
投稿者: taitani
投稿者のウェブサイトに移動

クエリのデザインビューで、置き換えたい日付フィールドを選択し、クエリデザインツールバーの「式」をクリックして、
NewDate: Format(Date, "yyyy") & "/" & Format([日付フィールド名], "m/d")
とか?
 
VBA なら。
’---------------------

Sub ReplaceYear()
    Dim rs As Recordset
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM テーブル名")
    
    Dim yearStr As String
    Dim yearNum As Integer
    Dim newDate As Date
    
    Do While Not rs.EOF
        yearStr = Format(rs("日付フィールド"), "yyyy")
        yearNum = Val(yearStr)
        newDate = DateSerial(Year(Date), Month(rs("日付フィールド")), Day(rs("日付フィールド")))
        rs.Edit
        rs("日付フィールド") = newDate
        rs.Update
        rs.MoveNext
    Loop
    
    rs.Close
    Set rs = Nothing
End Sub

回答
投稿日時: 23/04/03 15:07:11
投稿者: sk

ちむタイガー さんの引用:
年月日の年の部分だけを置き替える

ちむタイガー さんの引用:
これを下記のように今年の西暦に修正したいのです。

元の日付が閏年の 2 月 29 日である場合に関しては
「年だけ置き換える」というわけにはいかない
( 2023 年 2 月に 29 日はない)と思われますが、
そういった場合はどのようになさりたいのでしょうか。
 
taitani さんの引用:
newDate = DateSerial(Year(Date), Month(rs("日付フィールド")), Day(rs("日付フィールド")))

この場合、例えば Month 関数と Day 関数に渡されている
日付/時刻型フィールドの値が 2020/02/29 だと、
DateSerial 関数の戻り値は 2023/03/01 になります。

回答
投稿日時: 23/04/03 15:20:13
投稿者: taitani
投稿者のウェブサイトに移動

sk さん
ご指摘ありがとうございます。

投稿日時: 23/04/03 15:26:02
投稿者: ちむタイガー

taitani様
 
早速のご教授ありがとうございます。
解決いたしました!ありがとうございました!
 
 
SK様
 
ご教授ありがとうございます。
確かに2月29日のことは失念しておりました。
 
>DateSerial 関数の戻り値は 2023/03/01 になります。
 
この場合は3月1日で問題ないので大丈夫です。
ありがとうございました!