Excel VBA

【Excel VBA】【マクロ】【Tips】VBSでフォルダ・サブフォルダを作成する

こんにちは!Lenocoです。本日も見てくださりありがとうございます。

今回はVBSのフォルダ作成についてのTips回です!!!

VBSでフォルダ・サブフォルダを作成する

いつも同じ構成のフォルダを作成することってありませんか?
わたしはマクロ作成のお仕事を受けるたびに、案件ごとにフォルダを作成しています。
日付のフォルダ名があって、その下に受領、作業、納品、その他フォルダを置き、作業時間管理用のエクセルファイルを置いておきます。
↓こんな感じです。

毎回同じフォルダ構成なら、VBSでサクッと作ってしまうのがとっても楽です!
今回は、VBSでフォルダ・サブフォルダの作成、ファイルコピーのコードをご紹介します。

コード

Option Explicit
On Error Resume Next

Call Main()

Sub Main()
    '変数を宣言
    Dim folderName
    Dim objFS
    Dim strFilePathFrom

    folderName = GetDate(Now)
    Set objFS = CreateObject("Scripting.FileSystemObject")
    strFilePathFrom = "C:\Users\Lenoco\Desktop\作業時間管理.xlsx"

    '本日の日付フォルダを作成する
    objFS.CreateFolder(".\" & folderName)
    'サブフォルダを作成
    objFS.CreateFolder(".\" & folderName & "\0.受領")
    objFS.CreateFolder(".\" & folderName & "\1.作業")
    objFS.CreateFolder(".\" & folderName & "\2.納品")
    objFS.CreateFolder(".\" & folderName & "\99.その他")
    'ファイルをコピー
    Call objFS.CopyFile(strFilePathFrom, ".\" & folderName & "\作業時間管理.xlsx")

    Set objFS = Nothing
End Sub

Function GetDate(prmDate)
    GetDate = CStr(Year(prmDate)) & "." & Right("0" & Month(prmDate), 2) & "." & Right("0" & Day(prmDate), 2)
End Function

コードの説明

「Option Explicit」で、変数の宣言を強制しています。
VBEの「ツール」→「オプション」から選べるあれです。
もちろんなくても動きますが、デバッグができない分、変数名などの書き間違いが怖いので、
念のため書いています。
「On Error Resume Next」で、実行時エラーが発生してもマクロVBAを中断せず処理を続行します。
既にフォルダを作成したあとに再度VBSを実行すると(同じ名前のフォルダを作成しようとして)エラーが出るので、それを回避しています。
「Call Main()」でMainプロシージャを呼び出します。
変数を宣言します。VBSはデータ型を省略します。
GetDateというFunctionプロシージャを呼び出し、現在の日付から「yyyy.mm.dd」の書式で文字列を返します。
VBAで使用できるFormat関数は、VBSでは使えないようで、このようなFunctionになっています。
FileSystemObject オブジェクトを生成します。これを使ってフォルダを作ったりファイルをコピーしたりしますよ~
コピー元のファイルのパスを入れておきます。
まずは、CreateFolderメソッドを使って日付フォルダを作成します。VBSを実行したフォルダにフォルダが作成されます。
続いて日付フォルダの下にサブフォルダを4つ作ります。
次にCopyFileメソッドを使って日付フォルダの下に作業時間管理ファイルをコピーします。
最後にオブジェクトを解放します。

さいごに

出来上がったVBSを実行してみると、同じ階層にこのようなフォルダができあがります。

日付フォルダの中身はこんな感じです!

これを使うことで毎回発生する面倒な作業を省略して、快適に案件対応ができるようになりました。
みなさんも是非使ってみてください!

Lenoco

COMMENT

メールアドレスが公開されることはありません。