dd:mm:yy:hh:mm:ssVBA を使用して、ファイルに保存されている日付を、VBA を使用してファイルを処理する Excel での並べ替えに使用できる形式に変換したいと考えています。コンパクトなものが見つかりません。テキストを列に変換してから、分離された値を日付と時刻に結合しようとしましたが、これは面倒で、大きなデータ ファイルでは時間がかかります。
誰でも使用できる簡単な方法を知っていますか??
多分これは範囲内の日付を変換するためにA1:A10:
[A1:A10]=[IF({1},TEXT(SUBSTITUTE(A1:A10,":",""),"00\/00\/00 00\:00\:00"))]
以下はいかがでしょうか
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
関数を使用splitして文字列を解析できます。これは、(ここで仮定すると)dd:mm:yy:hh:mm:ss 最初の 3 つが日付で、最後の 3 つが時刻であるためです。
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 文字です。
簡単な方法は、以下のコードを使用して
DateLastModified特定のフォルダ内のすべてのファイルを配列に読み込む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
簡単な 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 桁の年を持つ最終結果に違いはありません。 .