連載
» 2017年05月02日 05時00分 UPDATE

VBA/マクロ便利Tips:VBAでフォルダを移動させるMoveFolder、ファイルを移動させるMoveFileメソッドの使い方

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、フォルダを移動させるMoveFolderメソッド、ファイルを移動させるMoveFileメソッドの使い方などについて。

[薬師寺国安,PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 10 64bit+Anniversary Update、Excel 2016


 TIPS「FileSystemObjectを使うための準備――ファイル/フォルダをコピーするには」では、ファイルシステムへアクセスするメソッドなどを提供するFileSystemObjectやMicrosoft Scripting Runtimeの参照設定などを紹介したが、今回は、フォルダやファイルの移動について解説する。

フォルダを移動させるMoveFolderメソッド

 フォルダの移動には、MoveFolderメソッドを使用する。1つまたは複数のフォルダを別の場所に移動させることができる。書式は下記のようになる。

MoveFolderメソッドの書式

{fso}.MoveFolder {source}, {destination}


 {fso}は必須だ。FileSystemObjectオブジェクトの名前を指定する。

 {source}は必須だ。移動させるフォルダのパスを指定する。source引数として指定する文字列では、パスの最後の構成要素に限ってワイルドカード文字を使用できる。

 {destination}も必須だ。フォルダの移動先のパスを指定する。destination引数には、ワイルドカード文字を使用できない。

 VBEを起動して、「挿入」メニューから「標準モジュール」を選択して、Module1を作成する。新規にModuleを作成した場合は「Microsoft Scripting Runtimeの参照設定」を行うことを忘れないでほしい。

1つのファイルを移動させる

 まずは、1つのフォルダの移動から見ていこう。リスト1のコードを記述する。

Sub 1つのフォルダを移動させる
  Dim fso As New Scripting.FileSystemObject
  Dim sourceFolder  As String
  Dim destinationFolder As String
 
  sourceFolder="K:\ExcelVBA_MoveFolder"
  destinationFolder="K:\ExcelVBA_Test\backup\"
 
  fso.MoveFolder sourceFolder,destinationFolder
  Set fso=Nothing
End Sub
リスト1 1つのフォルダを移動させるコード

 新しいScripting.FileSyetemObjectのインスタンスを作成してfsoで参照する(2行目)。文字列型のsourceFolderとdestinationFolder変数を宣言する(3〜4行目)。

 sourceFolderに移動元のフォルダを指定し、destinationFolderに移動先のフォルダを指定する(6〜7行目)。

 MoveFolderメソッドで指定したフォルダを、指定したフォルダ内に移動させる(9行目)。

 オブジェクト変数をNothingでクリアする(10行目)。

 実行すると、図1のように表示される。

図1 「K:\ExcelVBA_Test\backup」フォルダ内に「ExcelVBA_MoveFolder」が移動した

ワイルドカードを使って、複数のファイルを一度に移動させる

 次にワイルドカードを使って、複数のフォルダを一度に移動させてみよう。リスト2のコードを参考にしてほしい。

Sub 複数のフォルダを移動させる()
  Dim fso As New Scripting.FileSystemObject
  Dim sourceFolder  As String
  Dim destinationFolder As String
 
  sourceFolder = "K:\Excel2016VBA_*"
  destinationFolder = "K:\ExcelVBA_Test\backup\"
 
  fso.MoveFolder sourceFolder, destinationFolder
  Set fso = Nothing
End Sub
リスト2 複数のフォルダを一気に移動させるコード

 コードの解説は、ほとんどリスト1と同じだ。移動する元のフォルダを指定する際にワイルドカード(*)を使っている(6行目)。

 実行すると図2のような表示になる。

図2 複数のフォルダが一気に移動した

ファイルを移動させるMoveFileメソッド

 ファイルの移動にはMoveFileメソッドを使用する。1つでも、複数のファイルでも、その置き場所を移動させることができる。

MoveFileメソッドの書式

{fso}.MoveFile {source}, {destination}


 {fso}は必須だ。FileSystemObject オブジェクトの名前を指定する。

 {source}も必須だ。移動させるファイルのパスを指定する。source引数の文字列では、最後のパスコンポーネントにおいてのみ、ワイルドカード文字を使用できる。

 {destination}も必須だ。ファイルの移動先のパスを指定する。destination引数ではワイルドカード文字は使用不可だ。

1つのファイルを移動させる

 まず、1つのファイルを移動させるコードを書いてみよう。リスト3のコードを参考にしてほしい。

Sub 1つのファイルを移動させる()
  Dim fso As New Scripting.FileSystemObject
  Dim sourceFile As String
  Dim destinationFile As String
 
  sourceFile="K:\ExcelVBA_TextFiles\FileSystemObject_SourceFile.txt"
  destinationFile="J:\ExcelVBA_FileSystemObject\"
 
  fso.MoveFile sourceFile,destinationFile
  Set fso=Nothing
End Sub
リスト3 1つのファイルを移動させるコード

 Scripting.FileSystemObjectのインスタンスを作成し、変数fsoで参照する(2行目)。

 String型の変数sourceFileとdestinationFileを宣言する(3から4行目)。

 変数sourceFileに移動させるファイルをフルパスで格納する(6行目)。

 変数destinationFileに移動元を指定する(7行目)。

 MoveFileメソッドで、ファイルを指定したフォルダに移動させる(9行目)。

 オブジェクトの変数をNothingでクリアしておく(10行目)。

 移動元の「K:\ExcelVBA_TextFiles\FileSystemObject_SourceFile.txt」は図3のように存在している。

図3 移動元のテキストファイルが存在している

 リスト3を実行すると、図3のファイルはなくなり、「J:\ExcelVBA_FileSystemObject」フォルダに移動している(図4)。

図4 テキストファイルが移動した

ワイルドカードを使って、複数のファイルを一度に移動させる

 次にワイルドカードを使って、複数のファイルを一度に移動させてみよう。リスト4のコードを参考にしてほしい。

Sub 複数のファイルを移動させる()
 Dim fso As New Scripting.FileSystemObject
 Dim sourceFile As String
 Dim destinationFile As String
 
 sourceFile = "I:\XML_Files\*.xml"
 destinationFile = "J:\ExcelVBA_FileSystemObject\"
 
 fso.MoveFile sourceFile, destinationFile
 Set fso = Nothing
End Sub
リスト4 複数のファイルを移動させるコード

 ほとんどリスト3と変わらないが、6行目で、移動させるファイル名にワイルドカード(*)を使っている。

 実行結果は図5のように「J:\ExcelVBA_FileSystemObject」フォルダにXMLファイルが移動しているのが分かる。

図5 XMLファイルが移動した

次回は、テキストやCSVファイルを開いて、その中身をExcelシートに読み込む方法

 今回は、これで終わりだ。

 ファイルやフォルダの移動は実際の業務でも役に立つのではないかと思う。ファイルやフォルダを別な移動させたい場合などは、シート上にボタンを配置しておいて、マクロと関連付けると、必要なファイルやフォルダが一瞬で、指定したフォルダに移動できる。ぜひ、実際の業務でも使ってみてほしい。

 次回は、テキストやCSVファイルを開いて、その中身をExcelシートに読み込む方法を紹介する。

著者紹介

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。

1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。

1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。

2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。

Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。

Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。

Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。

Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。

Microsoft MVP for Development Platforms - Windows Platform Development (Oct 2014-Sep 2015)。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。