VBAでフォルダを移動させるMoveFolder、ファイルを移動させるMoveFileメソッドの使い方:VBA/マクロ便利Tips
業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、フォルダを移動させるMoveFolderメソッド、ファイルを移動させるMoveFileメソッドの使い方などについて。
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
新しいScripting.FileSyetemObjectのインスタンスを作成してfsoで参照する(2行目)。文字列型のsourceFolderとdestinationFolder変数を宣言する(3〜4行目)。
sourceFolderに移動元のフォルダを指定し、destinationFolderに移動先のフォルダを指定する(6〜7行目)。
MoveFolderメソッドで指定したフォルダを、指定したフォルダ内に移動させる(9行目)。
オブジェクト変数をNothingでクリアする(10行目)。
実行すると、図1のように表示される。
ワイルドカードを使って、複数のファイルを一度に移動させる
次にワイルドカードを使って、複数のフォルダを一度に移動させてみよう。リスト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
コードの解説は、ほとんどリスト1と同じだ。移動する元のフォルダを指定する際にワイルドカード(*)を使っている(6行目)。
実行すると図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
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のファイルはなくなり、「J:\ExcelVBA_FileSystemObject」フォルダに移動している(図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
ほとんどリスト3と変わらないが、6行目で、移動させるファイル名にワイルドカード(*)を使っている。
実行結果は図5のように「J:\ExcelVBA_FileSystemObject」フォルダに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 © ITmedia, Inc. All Rights Reserved.
関連記事
- どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとは
Accessを通じて、初心者がリレーショナルデータベースやSQLの基本を学び、データベースを使った簡単なシステムの作り方を習得する本連載。初回はデータベースの基本を理解し、Accessを使い始めてみよう。 - スクショをExcelに張り付けるのに役立つ4つのテクニック
システム開発におけるソフトウェアテスト(結合テスト〜システムテスト)において重要視されるエビデンス(作業記録)。前後編の2回にわたって、エビデンスとしてスクリーンショットをキャプチャし、テスト仕様書や納品書に張り付けていく作業を自動化するためのVBA/マクロのテクニックを紹介する。後編は、画像ファイルをシートに張り付け、Excel 2013のメニューからスクショを直に張り付け、画像を縮小し、指定した時間にマクロを実行する方法を解説。 - [Esc]キーによるExcel VBAの実行中断を防止する
ExcelではVBA(Visual Basic for Applications)によってさまざまな処理を自動的に実行できる。しかし、VBAの実行中にユーザーが[Esc]キーあるいは[Ctrl]+[Break]キーを押すと、自動処理が止まってしまう。止めたくない場合は、Application.EnableCancelKeyプロパティの設定を変更する。 - Windows TIPSディレクトリ > プラットフォーム別 > Office > Excel