2

MS Access のテーブルに CSV ファイルをインポートしています。ただし、フォルダー内には同じ拡張子のファイルが多数あり、名前には「mm_dd_yyyy」形式の日付が含まれています。

例: 2 つの CSV ファイルがあるとします。

  • my_music_02_10_2013_01_58_07_PM.csv
  • my_music_02_11_2013_03_04_07_PM.csv

両方のファイルは同じフォルダーmyfolderにあります。ファイル名に最新の日付が含まれるファイルをインポートしたい。

ここに私のコードの短いスニペットがあります:

strPath = "F:\myfolder\"
strFile = Dir(strPath & "my_music" & "*.csv")

どの「my_music*.csv」が最新かを判断するにはどうすればよいですか?

4

1 に答える 1

1

重要なのは、各ファイル名から日付/時刻を抽出して、それらを比較して最新のものを見つけることだと思います。

以下に含まれる機能をテストするイミディエイトウィンドウセッションを次に示します。有効な日付を表す文字列が見つからない場合、関数はnullを返します。

? DateFromFilename("my_music_02_10_2013_01_58_07_PM.csv")
2/10/2013 1:58:07 PM 
? DateFromFilename("my_music_no_date_here.csv")
Null

Public Function DateFromFilename(ByVal pFileName As String) As Variant
    Dim strBaseName As String
    Dim strDate As String
    Dim strPieces() As String
    Dim varReturn As Variant

    varReturn = Null
    strBaseName = Split(pFileName, ".")(0)
    'Debug.Print "strBaseName: " & strBaseName
    strPieces = Split(strBaseName, "_")
    If UBound(strPieces) = 8 Then
        strDate = strPieces(4) & "-" & strPieces(2) & _
            "-" & strPieces(3) & " " & strPieces(5) & ":" & _
            strPieces(6) & ":" & strPieces(7) & " " & strPieces(8)
    End If
    'Debug.Print "strDate: " & strDate
    If IsDate(strDate) Then
        varReturn = CDate(strDate)
    End If
    DateFromFilename = varReturn
End Function
于 2013-02-10T13:12:31.443 に答える