1

dd:mm:yy:hh:mm:ssVBA を使用して、ファイルに保存されている日付を、VBA を使用してファイルを処理する Excel での並べ替えに使用できる形式に変換したいと考えています。コンパクトなものが見つかりません。テキストを列に変換してから、分離された値を日付と時刻に結合しようとしましたが、これは面倒で、大きなデータ ファイルでは時間がかかります。

誰でも使用できる簡単な方法を知っていますか??

4

6 に答える 6

2

多分これは範囲内の日付を変換するためにA1:A10

[A1:A10]=[IF({1},TEXT(SUBSTITUTE(A1:A10,":",""),"00\/00\/00  00\:00\:00"))]
于 2012-08-29T22:09:08.630 に答える
1

以下はいかがでしょうか

Option Explicit

Sub test()
Dim dtStr As String
Dim dtArr() As String
Dim rebuildDt As String
Dim dtDte As Date
Dim dtStr2 As String


dtStr = "29:08:12:23:37:04"
dtArr = Split(dtStr, ":")
rebuildDt = dtArr(0) & "/" & dtArr(1) & "/" & dtArr(2) _
    & " " & dtArr(3) & ":" & dtArr(4) & ":" & dtArr(5)

dtDte = CDate(rebuildDt)
dtStr2 = Format(dtDte, "dd/mm/yy hh:mm:ss")
Debug.Print dtStr2

End Sub
于 2012-08-29T22:45:30.547 に答える
0

関数を使用splitして文字列を解析できます。これは、(ここで仮定すると)dd:mm:yy:hh:mm:ss 最初の 3 つが日付で、最後の 3 つが時刻であるためです。

于 2012-08-29T22:20:34.000 に答える
0

VBA を使用せず、Excel 式のみを使用する方法

=DATE(2000+MID(A1,7,2),MID(A1,4,2),LEFT(A1,2))+TIMEVALUE(RIGHT(A1,8))

たとえば、午前 1 時は 01:00:00 として表現されると仮定しました。つまり、読み取りゼロをどこにもドロップせず、常に 6 つの要素のそれぞれに対して 2 文字です。

于 2012-08-30T05:50:44.443 に答える
0

簡単な方法は、以下のコードを使用して

  1. DateLastModified特定のフォルダ内のすべてのファイルを配列に読み込む
  2. 配列を一時ワークシートにダンプしてソートする
  3. ソートされた配列を保存します(Y下の変数に)

コード

Sub GetFiles()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim strFolder As String
Dim strFileName As String
Dim lngCnt As Long
Dim X()
Dim Y
Dim ws As Worksheet

With Application
.ScreenUpdating = False
.DisplayAlerts = False
.EnableEvents = False
End With

strFolder = "c:\temp"
strFileName = Dir(strFolder & "\*.*")

Set objFSO = CreateObject("scripting.filesystemobject")
Set objFolder = objFSO.getfolder(strFolder)

ReDim X(1 To objFolder.Files.Count, 1 To 2)

For Each objFile In objFolder.Files
lngCnt = lngCnt + 1
X(lngCnt, 1) = objFile.Name
X(lngCnt, 2) = objFile.datelastmodified
Next

Set ws = Sheets.Add
ws.[a1].Resize(UBound(X, 1), 2) = X
ws.Range("A:B").Sort ws.Range("B1"), xlDescending
Y = ws.[a1].Resize(UBound(X, 1), 2)
ws.Delete

With Application
.ScreenUpdating = True
.DisplayAlerts = True
.EnableEvents = True
End With

End Sub
于 2012-08-30T02:23:44.850 に答える
-1

簡単な VBA 関数を次に示します。

Function ConvertDateFormat(dateInOldFormat As String)
    Dim d As Date
    Dim ss() As String
    ss = Split(dateInOldFormat, ":")
    d = DateSerial(CInt(ss(2)), CInt(ss(1)), CInt(ss(0))) _
        + TimeSerial(CInt(ss(3)), CInt(ss(4)), CInt(ss(5)))
    ConvertDateFormat = Format(d, "dd/mm/yy hh:mm:ss")
End Function

使用法:

s = ConvertDateFormat("30:08:12:08:52:11")
'returns "30/08/12 08:52:11"

ここでは、 2000年問題に対処することさえ考慮しません... この関数の内部では、年「12」は西暦 12 年を意味すると想定していますが、とにかく 2 桁の年を持つ最終結果に違いはありません。 .

于 2012-08-30T07:01:40.390 に答える