dd:mm:yy:hh:mm:ss
VBA を使用して、ファイルに保存されている日付を、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 桁の年を持つ最終結果に違いはありません。 .