VBA

【ExcelVBA】10行で書ける!フォルダ構成のみをコピーするマクロ

 

ねぇもりさん、昔の記事で、フォルダの構成をコピーする方法教えてくれたよね
もり
もり
コマンドプロンプトを使う方法だったね
【Windows】ファイルはコピーせずにフォルダ構成のみをコピーする方法Windowsでフォルダ構成のみをコピーする方法を紹介しています。 作業に使うのはコマンドプロンプトのみです。プログラミング不要でお手軽に作業可能です。...

 

この黒い画面、なんだか抵抗あるんだよね。他の方法ないかなぁ?
もり
もり
それならVBAでツールを作っちゃおう!

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

【イメージ】

Windowsでフォルダ構成のみをコピーする方法

フォルダコピーのxcopyコマンド

Windowsには、「xcopyコマンド」という、フォルダコピーのコマンドがあります。

通常はコマンドプロンプトで実行するのですが、

 

なんだか黒い画面って難しそうだなぁ…?

 

って思いますよね。そこで!

 

もり
もり
黒い画面をさわらずに、VBAで実行する方法を紹介するよ!

 

VBAのここが嬉しい!
  1. 人間がマクロをポチッと実行するだけでOK!
  2. Excelシートのデータを元にフォルダコピーするので、一度マクロを作れば誰でも作業できる!
    (Excelシートの値を書き換えるだけ)

それでは作っていきましょう!

フォルダ構成のみをコピーするマクロ

以下、このフォルダ名で解説していきます。ご自身の環境に置き換えてお読みください。

  • コピーフォルダ:第1四半期
  • コピーフォルダ:第2四半期

 

「第1四半期」フォルダの配下は赤枠のような構成になっており、各フォルダの中にはファイルが存在しています。

 

「第1四半期」フォルダをコピーして「第2四半期」フォルダを作成します。

コピー先フォルダを作成する

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

xcopyのコピー先フォルダを作成する

 

ここで作成した「第2四半期」フォルダの中身はからっぽで大丈夫です。

Excelシートにフォルダパスを入力する

Excelシートにフォルダパスを入力します。※フルパスです

  • B1セル:コピーフルパス
  • B2セル:コピーフルパス
VBAでxcopyする

【フォルダのフルパスをコピーする方法】

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

エクスプローラーのフォルダパスをコピーする方法
もり
もり
ここからExcelのエディタを開くよ!

VBEの参照設定(Windows Script Host Object Model)

「Windows Script Host Object Model」というライブラリを参照します。

フォルダ構成のみをコピーするコード

下記のコードを標準モジュールに貼り付けます。

え!こんな短いコードでできるんだ!

 

実はこれ、「人間が黒い画面にコマンドを入力する」作業を、人間の代わりにVBAで実行してるだけなんです。

 

マクロの操作に詳しくない人でも使えるように、ボタンを付けておくと親切ですね。

xcopyコマンドをフォームコントロールで実行

マクロを実行してみる

操作イメージです。画面左側がコピー先の「第2四半期」で、中身はからっぽですね。

マクロを実行すると、一瞬だけ黒い画面が現れます。これがコマンドプロンプトです。

 

VBAでコマンドプロンプトを操作しているのがわかりますね!

参考:コードの解説

もり
もり
ここはちょっと難しいから、あまり気にしなくていいよ~

xcopyコマンドの使い方

Windowsでフォルダをコピーするxcopyコマンドの文法です。

  • /t = フォルダのみをコピーする(ファイルはコピーしない)
  • /e = ファイルが存在しなくてもフォルダをコピーする

/e オプションを付けると、コピー元の「空フォルダ」もコピーします。元々ファイルが存在しない「空フォルダ」のコピーが不要ならば、/e オプションは外しましょう。

Runメソッドでコマンドを実行

 

環境変数 %ComSpec% を確認してみます。コマンドプロンプトを起動する実行ファイルのフルパスですね。

Runメソッドで「コマンドプロンプトを起動&コマンドを実行」の処理をしていることがわかります。

まとめ

ExcelVBAで「フォルダ構成のみをコピーする方法」を紹介しました。

一度マクロを作っておけば、Excelシートの値を書き換えるだけでOK!VBA・コマンドなどがわからなくても、誰でも使えます。

ルーチンワークなどで、「フォルダの構成だけをコピーしたい!フォルダ内のファイルはコピー不要!」という方は、ぜひこのツールを使ってみてくださいね。

 

こちらのVBAカテゴリもぜひご覧ください!