0

Oracle データベースからキャプチャされた .csv ファイルがあります。.csv ファイルの日付は、Oracle の内部形式です (私は Oracle に詳しくないので、それが何と呼ばれているかはわかりません)。のように見えます16474

DBへのアクセスに使用するアプリでその日付を見ると、日付は2/6/2013です。

ただし、.csv ファイルを Excel にインポートし、列を短い日付として書式設定すると、日付が次のように表示されます。2/6/1945

ランダム サンプリングを行ったところ、月/日は常に正しいように見えますが、年は 68 年ずれています。これは、Oracle の「時間の始まり」が Excel の「時間の始まり」とは異なるためであると想定しています。

OracleデータをExcelにインポートするときに日付が正しく表示されるようにこれを修正する方法はありますか?

Oracle側には何もアクセスできません..csvファイルとExcelだけです。また、それが役立つ場合は、最終的に Excel ファイルを Access にインポートしています。

これまでのところ、Excel で Oracle の日付を Short Date として書式設定し、日付列 (J) の横に列を挿入して、次を使用しました。

=DATE(YEAR(J1)+68,MONTH(J1),DAY(J1))

うるう年を考慮して、それが100%正確かどうかはわかりません

編集:このコードでできると思います:

Public Sub ReplaceData()

    Dim RangeCell As Range

    For Each RangeCell In Selection

        If IsNumeric(RangeCell.Value) Then
            lngDate = CLng(RangeCell.Value)
            RangeCell.Value = DateAdd("d", lngDate - 1, "1/1/1968")
        End If

    Next RangeCell

End Sub
4

1 に答える 1

2

Oracle は 1968 年 1 月 1 日に始まるようです。私は DB の専門家ではありませんが、その数字は私が行った他の読書ではおなじみのように聞こえると思います。

上記の 1968 年 1 月 1 日という仮定が真である場合に、Oracle の日付を Excel の日付に変換するルーチンの例を次に示します。

Sub OracleToExcelCSVDates()
Dim rng as Range 'range of cells containing dates'
Dim cl as Range
Dim strDate As String 'date received from Oracle'
Dim lngDate As Long
Dim newDate As Date 'Converted date'

Set rng = Range("J1:J1000") '< modify this for the number of rows you use in col J'

For each cl in rng 'Iterate over the rng you defined above.'
    'Capture the date from Oracle'
    strDate = cl.Value
    If Not Trim(strDate) = vbNullString Then 'ignore blanks'
        'convert to Long data type'
        lngDate = CLng(strDate)

        'Add the # of days (lngDate) to Oracles base date of 1/1/1968'
        newDate = DateAdd("d", lngDate - 1, "1/1/1968")

        'Overwrite the cell value with the new converted date:'
        cl.Value = newDate
    End If

End Sub

Excel の日付に関する詳細情報:

Excel は、シリアル日付を「1900 年 1 月 0 日からの日数に 24 時間制の ddddd.tttttt を加えた日数を表す数値。これをシリアル日付またはシリアル日付/時刻と呼びます」として格納します。

http://www.cpearson.com/excel/datetime

于 2013-03-28T14:45:34.400 に答える