実現したいこと
複数シートへのCopyFromRecordsetによる貼り付け時の日時の書式設定をyyyy/mm/dd hh:mm:ssの形式にしたい。
発生している問題・分からないこと
最終ページはyyyy/mm/dd hh:mm:ssの書式に出来るが、途中のページはyyyy/mm/ddの書式になってしまう。
該当のソースコード
VBA
1Sub testcode() 2 3 Dim tSheet As Worksheet 4 Dim tRs As Object 5 Set tRs = CreateObject("ADODB.Recordset") 6 tRs.Fields.Append "aa", 135 ' 135:adDBTimeStamp 7 tRs.Open 8 tRs.AddNew 9 tRs.Fields("aa").Value = #5/5/2025 3:14:21 PM# 10 tRs.Update 11 tRs.AddNew 12 tRs.Fields("aa").Value = #5/5/2025 11:12:21 AM# 13 tRs.Update 14 tRs.MoveFirst 15 Set tSheet = ThisWorkbook.Sheets.Add 16 tSheet.Cells(1, 1).Value = "aa" 17 Call tSheet.Cells(2, 1).CopyFromRecordset(tRs) 18 tSheet.Columns(1).NumberFormatLocal = "yyyy/mm/dd hh:mm:ss;@" 19 tRs.MoveFirst 20 Set tSheet = ThisWorkbook.Sheets.Add 21 tSheet.Cells(1, 1).Value = "aa" 22 Call tSheet.Cells(2, 1).CopyFromRecordset(tRs) 23 tSheet.Columns(1).NumberFormatLocal = "yyyy/mm/dd hh:mm:ss;@" 24 tRs.Close 25 26End Sub
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
copilotに聞いても解決しませんでした。
補足
OfficeのバージョンはMicrosoft365です。
上述の方法が上手くいかなかったので、今は以下のコードにしようかなと思っています。
VBA
1 Sub testcode2() 2 3 4 Dim tSheet As Worksheet 5 Dim tRs As Object 6 Set tRs = CreateObject("ADODB.Recordset") 7 8 tRs.Fields.Append "aa", 135 ' 135:adDBTimeStamp 9 tRs.Open 10 tRs.AddNew 11 tRs.Fields("aa").Value = #5/5/2025 3:14:21 PM# 12 tRs.Update 13 tRs.AddNew 14 tRs.Fields("aa").Value = #5/5/2025 3:14:21 PM# 15 tRs.Update 16 17 Set tSheet = ThisWorkbook.Sheets.Add 18 Dim tQt As QueryTable 19 Set tQt = tSheet.QueryTables.Add(Connection:=tRs, Destination:=tSheet.Cells(1, 1)) 20 tQt.Refresh 21 tQt.Delete 22 tRs.Close 23 tSheet.Columns(1).NumberFormatLocal = "yyyy/mm/dd hh:mm:ss;@" 24 25 26 tRs.Fields.Append "aa", 135 ' 135:adDBTimeStamp 27 tRs.Open 28 tRs.AddNew 29 tRs.Fields("aa").Value = #5/5/2025 3:14:21 PM# 30 tRs.Update 31 tRs.AddNew 32 tRs.Fields("aa").Value = #5/5/2025 3:14:21 PM# 33 tRs.Update 34 35 Set tSheet = ThisWorkbook.Sheets.Add 36 Set tQt = tSheet.QueryTables.Add(Connection:=tRs, Destination:=tSheet.Cells(1, 1)) 37 tQt.Refresh 38 tQt.Delete 39 tSheet.Columns(1).NumberFormatLocal = "yyyy/mm/dd hh:mm:ss;@" 40 41End Sub 42
こっちで出来そうだからいいんですが
初めの方のやり方も解決したいなという事での質問です。
また、実際にはSQLSERVERへ接続して結果のRecordSetをシートに貼り付けるという内容です。
問題となる事象が再現しているので、提示のコードでの質問となっています。
--追記--
解決しましたが、以下のような場合でも1シート目を日付型にしてしまうことがわかったので
蛇足ですが追記しておきます。
VBA
1Sub testcode() 2 3 Dim tSheet As Worksheet 4 Dim tRs As Object 5 6 Set tRs = CreateObject("ADODB.Recordset") 7 tRs.Fields.Append "aa", 5 '5:adDouble 8 tRs.Open 9 tRs.AddNew 10 tRs.Fields("aa").Value = 1.11 11 tRs.Update 12 tRs.AddNew 13 tRs.Fields("aa").Value = 2.25 14 tRs.Update 15 tRs.AddNew 16 tRs.Fields("aa").Value = 3.25 17 tRs.Update 18 tRs.MoveFirst 19 Set tSheet = ThisWorkbook.Sheets.Add 20 tSheet.Cells(1, 1).Value = "aa" 21 Call tSheet.Cells(2, 1).CopyFromRecordset(tRs) 22 tRs.Close 23 24 Set tRs = CreateObject("ADODB.Recordset") 25 tRs.Fields.Append "aa", 135 ' 135:adDBTimeStamp 26 tRs.Open 27 tRs.AddNew 28 tRs.Fields("aa").Value = #5/5/2025 3:14:21 PM# 29 tRs.Update 30 tRs.AddNew 31 tRs.Fields("aa").Value = #5/5/2025 11:12:21 AM# 32 tRs.Update 33 tRs.MoveFirst 34 35 Set tSheet = ThisWorkbook.Sheets.Add 36 tSheet.Cells(1, 1).Value = "aa" 37 Call tSheet.Cells(2, 1).CopyFromRecordset(tRs) 38 tRs.Close 39 40End Sub
日付型でないデータであっても2シート目の出力の日付型の所を1シート目で書式変更してしまうようです。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2025/03/21 21:25 編集
2025/03/24 06:39