Excel VBAで特定の文字列を含むファイル名を一括置換する方法

この記事では、Excel VBAを使用して、特定の文字列を含むファイル名を一括置換する方法について詳しく解説します。初心者でも理解しやすいように具体的なコード例とその解説、さらには応用例までを詳しく解説します。

目次

Excel VBAの基本

Excel VBA(Visual Basic for Applications)は、Microsoft Excelに組み込まれたプログラミング言語です。これを用いると、単純作業の自動化だけでなく、高度なデータ分析やレポート作成も可能になります。

そもそも、どこにVBAコードを書いて、どう実行すれば良いのか分からない場合は、以下の記事をご参照ください。

Excel VBAとファイル名の一括置換

Excel VBAは、Excel内のマクロ言語として利用され、多岐にわたる業務自動化や処理を行うことができます。今回は、特定の文字列を含むファイル名を一括で置換するという処理にフォーカスしてみましょう。


Sub ReplaceFileNames()
    Dim FolderPath As String
    Dim FileName As String
    Dim NewFileName As String
    Dim TargetString As String
    Dim ReplaceString As String
    
    ' 置換対象の文字列と置換後の文字列
    TargetString = "Target"
    ReplaceString = "Replaced"
    
    ' 対象のフォルダパス
    FolderPath = "C:\path\to\your\folder\"
    FileName = Dir(FolderPath & "*.*")
    
    ' ファイル名の置換処理
    Do While FileName <> ""
        If InStr(FileName, TargetString) > 0 Then
            NewFileName = Replace(FileName, TargetString, ReplaceString)
            Name FolderPath & FileName As FolderPath & NewFileName
        End If
        FileName = Dir
    Loop
End Sub

コードの詳細解説

このVBAコードは、指定したフォルダ内の全てのファイルに対して、特定の文字列(TargetString)を含むファイル名を、別の文字列(ReplaceString)に置換します。

– **FolderPath**: 処理対象となるフォルダのパスを指定します。
– **FileName**: 置換対象のファイル名を一時的に格納するための変数です。
– **TargetString**: 置換対象の文字列を指定します。
– **ReplaceString**: 置換後の文字列を指定します。
– `InStr`関数は、第一引数の文字列内に第二引数の文字列が存在する場合、その位置を返す関数です。
– `Replace`関数は、文字列内の特定の部分を別の文字列に置換する関数です。
– `Name`文は、ファイルの名前を変更するために使用されます。

応用例1: 複数の文字列の一括置換


Sub MultipleReplaceFileNames()
    Dim FolderPath As String
    Dim FileName As String
    Dim NewFileName As String
    Dim Replacements As Variant
    Dim i As Integer
    
    Replacements = Array("Target1|Replaced1", "Target2|Replaced2", "Target3|Replaced3")
    
    FolderPath = "C:\path\to\your\folder\"
    FileName = Dir(FolderPath & "*.*")
    
    Do While FileName <> ""
        NewFileName = FileName
        For i = LBound(Replacements) To UBound(Replacements)
            Dim Parts() As String
            Parts = Split(Replacements(i), "|")
            NewFileName = Replace(NewFileName, Parts(0), Parts(1))
        Next i
        If NewFileName <> FileName Then
            Name FolderPath & FileName As FolderPath & NewFileName
        End If
        FileName = Dir
    Loop
End Sub

解説

`Replacements` 配列には、置換対象と置換後の文字列を”|”で区切った文字列を要素として持ちます。この配列の各要素に対して、`Split`関数を使用して分割し、それを基に置換を行います。

応用例2: 拡張子ごとの置換


Sub ReplaceByExtension()
    Dim FolderPath As String
    Dim FileName As String
    Dim NewFileName As String
    Dim Ext As String
    Dim TargetString As String
    Dim ReplaceString As String
    
    TargetString = "Target"
    ReplaceString = "Replaced"
    Ext = ".txt" ' 例: .txtファイルのみ置換
    
    FolderPath = "C:\path\to\your\folder\"
    FileName = Dir(FolderPath & "*" & Ext)
    
    Do While FileName <> ""
        If InStr(FileName, TargetString) > 0 Then
            NewFileName = Replace(FileName, TargetString, ReplaceString)
            Name FolderPath & FileName As FolderPath & NewFileName
        End If
        FileName = Dir
    Loop
End Sub

解説

特定の拡張子のみを対象にした置換を行う場合は、`Dir`関数の引数に拡張子を指定します。

応用例3: 日付ベースのファイル名変更


Sub ReplaceWithDate()
    Dim FolderPath As String
    Dim FileName As String
    Dim NewFileName As String
    Dim DateString As String
    
    DateString = Format(Date, "yyyyMMdd")
    
    FolderPath = "C:\path\to\your\folder\"
    FileName = Dir(FolderPath & "*.*")
    
    Do While FileName <> ""
        NewFileName = DateString & "_" & FileName
        Name FolderPath & FileName As FolderPath & NewFileName
        FileName = Dir
    Loop
End Sub

解説

`Format`関数を使用して、現在の日付を”yyyyMMdd”

の形式の文字列として取得します。その文字列を元に、ファイル名の先頭に日付を追加しています。

まとめ

Excel VBAを利用することで、簡単に特定の文字列を含むファイル名を一括置換する処理が実現できます。今回紹介した基本的なコードや応用例を参考に、さまざまなシチュエーションに適用してみてください。

VBAも良いけどパワークエリも良い

VBAの解説をしてきましたが、VBAは正直煩雑でメンテナンス性が悪いです。最近はモダンExcelと呼ばれるパワークエリやパワーピボットへのシフトが進んできています。本サイトでもパワークエリの特集をしており、サンプルデータを含む全11回の学習コンテンツでパワークエリを習得することができます。

クリックするとパワークエリの全11講座が表示されます。

パワーピボットの記事はありません。興味がある場合は、書籍で学んでみてください

コメント

コメントする

目次