フォルダーの作成(VBA研究会議事録_07)

VBA研究会で論じられた内容を記録する議事録の7本目(2023/02/25開催分)です。前回の議事録はコチラになります。

hirocom777.hatenadiary.org

前回はExcelAPI(https://excelapi.org/)をご紹介しました。なかなか便利なWebサービスですので利用してみてください。

今回はフォルダーの作成です。1,2個のフォルダー作成なら大した手間ではないのですが、名前を指定したフォルダーを大量に作成する作業は手間です。自動化できるとありがたいですね。VBAを使わない方法、使う方法をご紹介します。

  • A列に書かれている名前のフォルダーをこのワークブックが格納されているフォルダー内に作成してください。
  • 上で作成したフォルダーについて、フォルダー名を変更する必要がでてきました。A列のフォルダー名をB列のフォルダー名に変更してください。 (A列とB列のフォルダー名には重複はないものとする。)

VBAを使う

まずはVBAを使う方法をご紹介しようと思ったのですが、ノンプロ研のもり先輩がすでにご紹介されているんですね。先輩さすがです!!

moripro.net

ですので、この記事には掲載されていないフォルダー名の変更についてご紹介します。fsoを使用した例です。fsoは以下で説明しましたね。

hirocom777.hatenadiary.org

Sub フォルダ名変更()
    
    'A列の名前のフォルダをB列のフォルダの名前に変更
    Dim fso As New FileSystemObject
    Dim tarFolderPath As String: tarFolderPath = ThisWorkbook.Path

    With Me
        Dim i As Long: i = 1
        Do Until .Cells(i, 1) = ""
            fso.GetFolder(tarFolderPath & "\" & .Cells(i, 1).Text).Name = .Cells(i, 2).Text
            i = i + 1
        Loop
    End With

End Sub

fsoのGetFolderメソッドでフォルダーオブジェクトを指定して、Nameプロパティを変更することでフォルダー名を変更します。

Excelだけで作る

VBAを使わずにExcelだけで作業する方法もあります。こちらもノンプロ研のもり先輩がすでにご紹介されているんですね。先輩さすがです!!

moripro.net

なるほど、フォルダーのアドレスバー(フォルダーのパスが表示されている部分)に「cmd」と入力すると、その場所でコマンドプロンプトが開くんですね・・・はじめて知りました。

ここにExcelで作ったバッチコマンドのテキストを貼り付ければいいわけです。バッチコマンドとは、Windowsのバッチファイルで使用するコマンドのことです。バッチファイルを使うと簡単なPC操作をまとめて自動化できたりします。簡単なプログラムと言ってもいいでしょう。もっと知りたい人は以下を参考にしてください。

jj-blues.com

同じ構成のフォルダーを量産する

空のフォルダーをたくさん作る方法は判りました。でも空のフォルダーではなくて、同じファイル構成(中に同じファイル、フォルダーがある)のフォルダーが欲しい場合の方が多くありませんか? そういう場合には、まずコピー元フォルダーとしてファイル構成のあるフォルダーを用意してコピー、フォルダー名の変更していくわけですが、コチラも結構手間ですね。

この場合はバッチコマンドの「xcopy」を使いましょう。xcopyはフォルダーを構造ごとコピーできます。

フォルダーをコピーするバッチコマンドは以下になります。

xcopy /e コピー元フォルダー名 コピー先フォルダー名\

xcopy後の「/e」は、空のフォルダーもコピーするという指定です。これがないと空のフォルダーはコピーされません。コピー先フォルダー名の最後につく「\」は、作業対象がフォルダーであることを強制的に指定するものです。これがないと、コマンドごとにファイルかディレクトリ(フォルダー)かを聞いてきます。

ですので、コピー元フォルダー名を「X」とした場合、A1セルにある値のフォルダーをコピーするにはB1セルに以下の式を記述すればよいです。

= "xcopy /e X " & A1 & "\"

この数式を下に続く行にコピーしていけば、A列の名前のフォルダーを「X」と同じ構成で作成できます。

次回はシート間のコピー

いかがでしょうか。この様な単純ですが面倒な作業は自動化できると便利ですね。バッチコマンドも色々調べてみるとおもしろいですね。次回はシート間のコピーです。シンプルなお題だと思うのですが、どうなんでしょうか。お楽しみに!!

hirocom777.hatenadiary.org

VBA研究会議事録まとめはこちらから