ニック、私はあなたのための解決策を見つけたと思います:)
私のサンプルデータを使って実演させてください。
デフォルトでは、Excel にはDateTime
セル形式がありません。これは、1 つのセル内に日付と時刻を格納できないことを意味します。データの表示に関しては、Excel は最も認識しやすい形式 (日付) のみを使用しようとしているようです。時間は引き続き保存されますが、セルが日付形式にフォーマットされ、時間が失われる/削除されます。
以下のスクリーンショットを見てください:
ご覧のとおり、セルに表示されたデータは通常の日付のように見えます。しかし、数式バーを見ると、時間は存在しますが、表示されていません。
あなたのコードの最後に、次のDebug.Print
行を追加しました:
Debug.print Range("B6").Value & vbCrlf & Range("B6").Value2
the results I have
25/06/2013 16:00:27
41450.6669791667
gotExcelのセルに表示されているものは、参照されているものとは正確には異なります
次のステップは、セルを反復処理して書式設定と表示内容を変更する関数を作成することでした。両方を
達成するために、1 つのセルで、セルを としてフォーマットすることにしました。
date
time
Text
Private Sub FormatDateAndTime(ByRef sheet As Worksheet, start As Long, column As String)
Dim i As Long, rng As Range
For i = start To sheet.Range(column & Rows.Count).End(xlUp).Row
Set rng = sheet.Range(column & i)
Dim str As String
str = Split(rng.Value, " ")(0) & " " & Split(rng.Value, " ")(1)
rng.NumberFormat = "@"
rng = str
Set rng = Nothing
Next i
End Sub
このFormatDateAndTime()
関数は 3 つのパラメータを取ります:
- アクティブ シート
- 開始行
- 日付を含む列関数を呼び出すには、コード
の の直前にこの行を追加しますEnd Sub
// Copy Data to Excel
theSheet.Range("A6").CopyFromRecordset objMyRecordset
// this is the line you want to add
FormatDateAndTime sheet:=theSheet, start:=6, column:="A"
End Sub
注: 結果を示すためにサンプルで他のパラメーターを送信しましたが、上記はあなたの場合に機能します
わかりました、コードを実行した後、次のような結果が得られるはずです
注: 違いを示すために、サンプルの列に対してのみこれを実行しました。B
注:B
これを列と列の両方で実行しましたC
あなたの完全なソリューション:
Sub Populate_Sheet(theSheet As Worksheet)
'Declare variables'
Dim objMyConn As ADODB.Connection
Dim objMyCmd As ADODB.Command
Dim objMyRecordset As ADODB.Recordset
Set objMyConn = New ADODB.Connection
Set objMyCmd = New ADODB.Command
Set objMyRecordset = New ADODB.Recordset
Dim executeThisSQLStatement As String
'Dim target As Worksheet
'Set target = theSheet
executeThisSQLStatement = "SELECT CAST(DateHour_CPT AS TIMESTAMP) FROM EnergyData_v"
'Open Connection'
objMyConn.ConnectionString = "driver={SQLServer};Data Source=DataMart;User ID=acctname.value;Password=mypass.value;"
objMyConn.Open
'Set and Excecute SQL Command'
Set objMyCmd.ActiveConnection = objMyConn
objMyCmd.CommandText = executeThisSQLStatement
objMyCmd.CommandType = adCmdText
'Open Recordset'
Set objMyRecordset.Source = objMyCmd
objMyRecordset.Open
'Copy Data to Excel'
Range("A6").CopyFromRecordset objMyRecordset
FormatDateAndTime sheet:=theSheet, start:=6, column:="A"
End Sub
Private Sub FormatDateAndTime(ByRef sheet As Worksheet, start As Long, column As String)
Dim i As Long, rng As Range
For i = start To sheet.Range(column & Rows.Count).End(xlUp).Row
Set rng = sheet.Range(column & i)
Dim str As String
str = Split(rng.Value, " ")(0) & " " & Split(rng.Value, " ")(1)
rng.NumberFormat = "@"
rng = str
Set rng = Nothing
Next i
End Sub
この回答が役に立った場合は、承認および/または賛成票を投じてください! :) ありがとう、そして幸運を祈ります