hiko-blog

VBA業務改善

MENU

フォルダ内ファイル名に作成日を付け加える・作成日がついている場合は更新日に変更

On Error Resume Next

Set objFSO = CreateObject("Scripting.FileSystemObject")

' スクリプトのフルパスを取得
scriptPath = WScript.ScriptFullName

' スクリプトが存在するディレクトリを取得
scriptFolder = objFSO.GetParentFolderName(scriptPath)

' フォルダ内のすべてのファイルに対して処理
ProcessFilesInFolder scriptFolder

' エラーチェック
If Err.Number <> 0 Then
    WScript.Echo "エラーが発生しました: " & Err.Description
End If

On Error GoTo 0

Sub ProcessFilesInFolder(folderPath)
    Set objFolder = objFSO.GetFolder(folderPath)

    ' フォルダ内の各ファイルに対して処理
    Dim anyFilesProcessed
    anyFilesProcessed = False

    For Each objFile In objFolder.Files
        ' ファイルの更新日時を取得
        lastModifiedDate = objFile.DateLastModified

        ' 更新日時のフォーマットを "yyyymmdd" 形式に変換
        formattedLastModifiedDate = Year(lastModifiedDate) & Right("0" & Month(lastModifiedDate), 2) & Right("0" & Day(lastModifiedDate), 2)

        ' 新しいファイル名を作成
        newFileName = UpdateDateInFileName(objFile.Name, formattedLastModifiedDate)

        ' ファイルをリネーム
        If newFileName <> objFile.Name Then
            objFile.Name = newFileName
            anyFilesProcessed = True
            ' メッセージボックスに表示
            ' MsgBox "ファイル名が変更されました: " & objFile.Path
        End If
    Next

    ' 対象のファイルがない場合のメッセージ表示
    If Not anyFilesProcessed Then
        ' MsgBox "対象のファイルが見つかりませんでした。"
    End If

    ' サブフォルダも再帰的に処理
    For Each objSubFolder In objFolder.SubFolders
        ProcessFilesInFolder objSubFolder.Path
    Next
End Sub

Function UpdateDateInFileName(fileName, lastModifiedDate)
    Dim fileExtension, baseFileName, newFileName
    fileExtension = objFSO.GetExtensionName(fileName)
    baseFileName = objFSO.GetBaseName(fileName)

    ' ファイル名から既存の日付を検索
    Dim dateStartPosition
    dateStartPosition = InStr(baseFileName, "_")

    If dateStartPosition > 0 Then
        ' 既存の日付箇所を上書き
        baseFileName = Left(baseFileName, dateStartPosition - 1) & "_" & lastModifiedDate
    Else
        ' 既存の日付がない場合は追加
        baseFileName = baseFileName & "_" & lastModifiedDate
    End If

    ' 新しいファイル名を作成
    newFileName = baseFileName & "." & fileExtension

    UpdateDateInFileName = newFileName
End Function