
ExcelVBAを使って、「フォルダ構成のみをコピー」する方法を紹介します。
※フォルダ内のファイルはコピーしません
【イメージ】

Contents
フォルダコピーのxcopyコマンド
Windowsには、「xcopyコマンド」という、フォルダコピーのコマンドがあります。
通常はコマンドプロンプトで実行するのですが、

って思いますよね。そこで!
- 人間がマクロをポチッと実行するだけでOK!
- Excelシートのデータを元にフォルダコピーするので、一度マクロを作れば誰でも作業できる!
(Excelシートの値を書き換えるだけ)
それでは作っていきましょう!
フォルダ構成のみをコピーするマクロ
以下、このフォルダ名で解説していきます。ご自身の環境に置き換えてお読みください。
- コピー元フォルダ:第1四半期
- コピー先フォルダ:第2四半期
「第1四半期」フォルダの配下は赤枠のような構成になっており、各フォルダの中にはファイルが存在しています。

「第1四半期」フォルダをコピーして「第2四半期」フォルダを作成します。
コピー先フォルダを作成する
まず、コピー先の「第2四半期」フォルダを新規作成します。これは手作業です。

ここで作成した「第2四半期」フォルダの中身はからっぽで大丈夫です。
Excelシートにフォルダパスを入力する
Excelシートにフォルダパスを入力します。※フルパスです
- B1セル:コピー元のフルパス
- B2セル:コピー先のフルパス

【フォルダのフルパスをコピーする方法】
エクスプローラーが最前面になっている状態で Alt + D を押すと、アドレスバーが選択モードになります。Ctrl + C でコピーします。

VBEの参照設定(Windows Script Host Object Model)
「Windows Script Host Object Model」というライブラリを参照します。

フォルダ構成のみをコピーするコード
下記のコードを標準モジュールに貼り付けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub cmd_xcopy() 'コマンドプロンプトのオブジェクト Dim wsh As IWshRuntimeLibrary.WshShell Set wsh = New IWshRuntimeLibrary.WshShell Dim OriginalFolderPath As String, NewFolderPath As String OriginalFolderPath = Range("B1").Value NewFolderPath = Range("B2").Value '実行コマンドを作る Dim command As String command = "xcopy /t /e " & OriginalFolderPath & " " & NewFolderPath 'コマンドを実行 wsh.Run "%ComSpec% /c " & command End Sub |
実はこれ、「人間が黒い画面にコマンドを入力する」作業を、人間の代わりにVBAで実行してるだけなんです。
マクロの操作に詳しくない人でも使えるように、ボタンを付けておくと親切ですね。

マクロを実行してみる
操作イメージです。画面左側がコピー先の「第2四半期」で、中身はからっぽですね。
マクロを実行すると、一瞬だけ黒い画面が現れます。これがコマンドプロンプトです。
VBAでコマンドプロンプトを操作しているのがわかりますね!
参考:コードの解説
xcopyコマンドの使い方
Windowsでフォルダをコピーするxcopyコマンドの文法です。
- /t = フォルダのみをコピーする(ファイルはコピーしない)
- /e = ファイルが存在しなくてもフォルダをコピーする
1 |
xcopy /t /e コピー元フォルダ コピー先フォルダ |
/e オプションを付けると、コピー元の「空フォルダ」もコピーします。元々ファイルが存在しない「空フォルダ」のコピーが不要ならば、/e オプションは外しましょう。
Runメソッドでコマンドを実行
1 |
wsh.Run "%ComSpec% /c " & command |
環境変数 %ComSpec% を確認してみます。コマンドプロンプトを起動する実行ファイルのフルパスですね。

Runメソッドで「コマンドプロンプトを起動&コマンドを実行」の処理をしていることがわかります。
まとめ
ExcelVBAで「フォルダ構成のみをコピーする方法」を紹介しました。
一度マクロを作っておけば、Excelシートの値を書き換えるだけでOK!VBA・コマンドなどがわからなくても、誰でも使えます。
ルーチンワークなどで、「フォルダの構成だけをコピーしたい!フォルダ内のファイルはコピー不要!」という方は、ぜひこのツールを使ってみてくださいね。
こちらのVBAカテゴリもぜひご覧ください!