Excel VBA FileSystemObject(2)ファイルのコピー・移動ほか

Excel マクロ、VBA

スポンサーリンク

はじめに:VBAでファイルのコピー・移動などを行う

前回の記事で、Excel VBAのFileSystemObjectというものにちょっと言及した。
今回はそれに絡め、ファイルのコピー・移動などの処理をVBAで記述する方法を扱う。

ただ、VBAでファイルのコピー・移動などを行う記述は、正解は1つではない。
大きく、次の3つに分けられると言える。

FileSystemObjectを全く使わない方法

単にNameとかFileCopyとかの処理を記述して、FileSystemObjectを使う面倒な処理を経由しないものだ。

お手軽なので、ワイルドカードを使うとか凝った処理をしなくて良いなら、基本的にこの方法を使えば良いだろう。

FileSystemObjectを使う方法

ワイルドカードを使えるとか、上書き保存するかどうかを指定できるとか、ちょっとしたオプションが使えるので、そういうことをしたいときはFileSystemObjectを使う方法で良いだろう。

FileSystemObject―Fileオブジェクトを使う方法

ワイルドカードとか使えないし、FileSystemObjectを使う方法の下位互換ではないかと思う。

自分で好んで使う必要はないと思うが、書かれたのを見て何となく分かる程度になっとけば良いかなと。


さて次項からは、ファイルのコピー・移動など各種処理について、お手軽な順に
(1)FileSystemObjectを全く使わない方法
(2)FileSystemObjectを使う方法
(3)FileSystemObject―Fileオブジェクトを使う方法
の各記述方法を示していく。

厳密に言えば、処理を掛ける前にDir関数などで、対象とするファイルが存在するのかチェックを掛ける記述も入れるべきなのだが、そういうのは省略してソースコードを記述する。

ファイル名を変更する

Name

Name (元のファイル名のフルパス)  As  (変更後のファイル名のフルパス)
  • Asを使うのがポイント。このNameは、後述するがファイル移動にも使える。

File.Name

File.Name = (変更後のファイル名)
  • (変更後のファイル名)は、フルパスではなく、「普通のファイル.xls」のように、単なるファイル名で指定する。

ファイルを移動する

Nameの変形

一番最初に紹介したNameについて、別フォルダに移動したことをもって、それをファイル名変更の一種とみなす方法だ。

Nameは本来
Name
 (元のファイル名のフルパス)  As  (変更後のファイル名のフルパス)
と記述するが、これを

Name (元のファイル名のフルパス)  As  (移動後のファイル名のフルパス)

とすれば良い。

FileSystemObject.MoveFile

FSO.MoveFile (元のファイル名のフルパス)  (変更後のファイル名のフルパス)
  • (変更後のファイル名のフルパス)について、既に同名ファイルが存在する場合はエラーになる。
  • ワイルドカードを使って、拡張子とかファイル名に「○という文字を含む」条件を指定して、それに合致するものを全て移動するという処理もできる。

File.Move

File.Move (変更後のフォルダのパス)
  • ワイルドカードとか使えないし、特にこちらの記述を使う必要はないだろう。

ファイルをコピーする(ファイル名そのまま、コピー先のフォルダを指定する)

FileSystemObject.CopyFile

FSO.CopyFile (元のファイル名のフルパス)  (変更後のフォルダのパス)
  • ワイルドカードを使って、拡張子とかファイル名に「○という文字を含む」条件を指定して、それに合致するものを全てコピーするという処理もできる。
  • 最後の引数にoverwritefilesというのを指定して、同名ファイルがあったら上書きするかどうかも指定できる。
    これは通常は省略してよいだろう。省略した場合はTrue扱いで、上書きされることになる。

File.Copy

File.Copy (変更後のフォルダのパス)

ファイルをコピーする(ファイル名をフルパスで指定)

FileCopy

FileCopy (元のファイル名のフルパス)  (変更後のファイル名のフルパス)
  • (変更後のファイル名のフルパス)は、フォルダのパスだけ示しても駄目。必ずファイルのフルパスで指定する。
  • (変更後のファイル名のフルパス)について、既に同名ファイルが存在する場合は、上書き保存される。

FileSystemObject.CopyFile

FSO.CopyFile (元のファイル名のフルパス)  (変更後のファイル名のフルパス)
  • ワイルドカードを使って、拡張子とかファイル名に「○という文字を含む」条件を指定して、それに合致するものを全てコピーするという処理もできる。
  • 最後の引数にoverwritefilesというのを指定して、同名ファイルがあったら上書きするかどうかも指定できる。
    これは通常は省略してよいだろう。省略した場合はTrue扱いで、上書きされることになる。

File.Copy

File.Copy (変更後のファイル名のフルパス)
  • ワイルドカードとか使えないし、特にこちらの記述を使う必要はないだろう。
  • 最後の引数にoverwritefilesというのを指定して、同名ファイルがあったら上書きするかどうかも指定できる。
    これは通常は省略してよいだろう。省略した場合はTrue扱いで、上書きされることになる。

ファイルを削除する

Kill

Kill  (削除するファイル名のフルパス)
  • (削除するファイル名のフルパス)には、ワイルドカードも使える。

FileSystemObject.DeleteFile

FSO.DeleteFile  (削除するファイル名のフルパス)
  • 最後の引数Forceを、省略せずTrueを明示指定した方が良いかもしれない。そうすれば読み取り専用ファイルも削除されるようになる。

File.Delete

File.Delete  (削除するファイル名のフルパス)
  • ワイルドカードとか使えないし、特にこちらの記述を使う必要はないだろう。
  • 最後の引数Forceを、省略せずTrueを明示指定した方が良いかもしれない。そうすれば読み取り専用ファイルも削除されるようになる。

スポンサーリンク