VBAは基本的にエクセルを操作するものですが、フォルダを操作したりファイルを操作したりもできたりします。
今回はその中で、ファイル名の変更について解説しようと思います!
どういう時に使えるかというと、例えば会社ごとデータのファイルをダウンロードして、ダウンロードしたファイルの名前を会社名に変える必要があるときに使いました。
あとは、もともとあるファイル名を一気に変えたい時なんかにも使えます。手作業で変えるのは大変なので^^;
それでは解説行ってみましょう♪
ファイルを操作するための準備
ファイルを操作するためには、ファイルやフォルダを操作するためのオブジェクトを準備する必要があります。オブジェクト=”操作する対象”みたいなイメージです。
ファイルを操作するのに必要なコードはこんな感じになります。
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
'ファイル名を変更
FSO.GetFile(filePath).Name = newFileName
Set FSO = Nothing
「ファイル名を変更」と書いてある1文以外は共通なので、コピペして使いまわしができます。
ちなみにFSO.GetFile(filePath).NameのGetFileのところをGetFolderに変えるとフォルダーも操作できちゃいます。他にもいろいろできることはあるのですが、Microsoftのページにメソッドの一覧がありますのでそちらを見てもらえると参考になると思います(^^)/
一例を挙げると、ファイルやフォルダの作成/削除、ファイルのコピー、ファイルの移動などができます。
サンプルコード1
それでは実際のサンプルコードです。
Sub Sample1()
Dim FSO As Object
Dim filePath As String
Dim newFileName As String
'変更前のファイルのパス
filePath = Range("E4") & "\" & Range("E3") & ".csv"
'変更後のファイル名
newFileName = "A社.csv"
Set FSO = CreateObject("Scripting.FileSystemObject")
'ファイル名を変更
FSO.GetFile(filePath).Name = newFileName
Set FSO = Nothing
End Sub
FSO.GetFile(filePath).Name = newFileName
について簡単に解説します。
GetFileで操作したいファイルを取得します。()の中のfilepathが取得したいファイルの指定になります。
今回だと
こんなかんじでダウンロードフォルダに入っている(E4セルの情報)downloadという名前のファイル(E3セルの情報)を組み合わせて、指定したいファイルの文字列を作成しています。
‘変更前のファイルのパス
filePath = Range(“E4”) & “\” & Range(“E3”) & “.csv”
↑この部分ですね。
取得したファイルに対して何をするかというのが.Nameのところになります。
ファイルの名前を ”=” の後の文字列に置き換えるという指示になります。
サンプルコード2
サンプルコード1だと1このファイル名しか変更できないので、複数のダウンロードしたファイルの名前を一気に変更するコードに変更します。
こんな感じでB列に会社名が入っていて、これらの会社名のファイルを順にダウンロードしたという仮定でダウンロードフォルダにファイルが入っている状態でファイル名を変更していきます。
また、ダウンロードしたファイル名は(2)、(3)、(4)、、、という名前になっていると仮定しています。
Sub sample2()
Dim i As Long, LastRow As Long
LastRow = Cells(Rows.Count, 2).End(xlUp).Row
'ダウンロードしたファイル名を変更
For i = 3 To LastRow
Call RemaneFiles2(Cells(i, 2), i - 2)
Next i
End Sub
Sub RemaneFiles2(Name As String, Num As Long)
Dim FSO As Object
Dim filePath As String
Dim newFileName As String
'変更前のファイルのパス:番号によってファイル名が変わる
If Num = 1 Then
filePath = Range("E4") & "\" & Range("E3") & ".csv"
Else
filePath = Range("E4") & "\" & Range("E3") & " (" & Num & ").csv"
End If
'変更後のファイル名
newFileName = Name & ".csv"
Set FSO = CreateObject("Scripting.FileSystemObject")
'ファイル名を変更
FSO.GetFile(filePath).Name = newFileName
Set FSO = Nothing
End Sub
サンプル1と変わっているところは、For文を使って変更前のファイル名と変更後のファイル名を変えているところになります。
これでファイル数が増えても対応可能になります。
ダウンロードフォルダ名や変更前のファイル名、変更後のファイル名をお使いの環境に合わせて使ってみてください!
解説動画
動画にて解説をしております。実際の画面を見ながらの方がわかりやすいと思いますので、ぜひこちらも見てみてください。
お問い合わせ、お仕事のご依頼などがありましたら下記のお問い合わせフォームからご連絡ください。
お問い合わせフォーム
VBAの作成であれば3万円ほどから、自分で使うVBAの書き方で詰まっている方のお手伝いであれば5,000円ほどから承ります。
コメント