VBA

【VBA】データ保存場所自動管理。指定フォルダ内に年(もしくは年度)と月のフォルダを作成する関数

記事内に商品プロモーションを含む場合があります

こんにちは、hokkyokunです。

事務作業上、月別にフォルダを生成して管理しなければいけないこと、
あると思います

ただ、日本の会社って状況によって年度(4月~翌年3月)と年(1月~12月)の対応もしなきゃいけないからややこしいですよね…

フォルダ管理はめんどくさくてついつい後回しになってしまいますので
さくっと関数で自動生成処理完成しちゃいましょう

関数

  • 関数名
    Create_YearMonth_Dir ( file_Dir , date_ , fiscalYear )

引数
① file_Dir : 格納する場所(フォルダ場所)をパスで指定 (String型)
② date_ : 日付( Date型)
③ fiscalYear : 年 or 年度 (Bool型 True=年度, False=年)

戻り値
作成した月のフォルダパス

フォルダのイメージ図

Function create_YearMonth_Dir(ByVal file_Dir As String, ByVal date_ As Date, ByVal fiscalYear As Boolean)
    '年(もしくは年度)、月を取得
    Dim Year_str, Month_str As String
    
    'fiscalYear=True→年度
    If fiscalYear Then
    
        '月が1~3月→ 年-1=年度
        If Month(date_) <= 3 Then
            Year_str = Year(date_) - 1 & "年度"
            
        '月が4月~ → 年=年度
        Else
            Year_str = Year(date_) & "年度"
        End If
        
    'fiscalYear=False→年
    Else
        Year_str = Year(date_) & "年"
    End If
    
    '月はいつでもそのまま
    Month_str = Month(date_) & "月"
        
    
    'フォルダ作成
    Dim create_Dir As String
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FilesystemObject")
    
    '年(もしくは年度)のフォルダがあるかどうか
    create_Dir = file_Dir & "\" & Year_str
    If Dir(create_Dir, vbDirectory) = "" Then
        FSO.CreateFolder (create_Dir)
    End If
    
    '月フォルダがあるかどうか
    create_Dir = create_Dir & "\" & Month_str
    If Dir(create_Dir, vbDirectory) = "" Then
        FSO.CreateFolder (create_Dir)
    End If
    
    create_YearMonth_Dir = create_Dir
    
End Function

実際に使ってみます。

Sub test_create()
    Dim file_Dir, result As String
    Dim date_ As Date
    Dim fiscalYear As Boolean
    
    '日付はDate型で指定。当日の日付で常に運用するなら「Date」関数を使うと良い。
    date_ = #3/1/2023#
    
    'フォルダを作成する場所を指定する
    file_Dir = ThisWorkbook.Path & "\test"
    
    '年度か年かどちらでフォルダを作るか指定 True=年度、False=年
    fiscalYear = True
    
    result = create_YearMonth_Dir(file_Dir, date_, fiscalYear)
    Debug.Print result
    '>> thisworbook.path以降は → ..\test\2022年度\3月
End Sub

プログラム実行前

引数 file_Dirで「test」をフォルダを指定しましたが、
プログラム実行前は何もフォルダはありません。

プログラム実行後

プログラム実行後
2022年度フォルダが作成されています。
fiscalYear=Trueにしたので年度扱いです。
2023年3月は「2022年度3月」ですね!

「2022年度」フォルダ内に3月フォルダが作成されています。

ちなみに
引数fiscalYear=Falseにすると
2023年フォルダが作成されます。中に3月フォルダが作成されます。

データ管理を自動化しよう

この関数の目的は
データ管理を自動化させることです。

例えば、複数のブックに散らばっているデータを集計するマクロを作ったとして、
そのファイルを手動で保存しているのであれば、真の効率化とは言えません。

フォルダの位置を思い出したり、
毎月フォルダを作成したりと意外と手間と労力がかかります。

このプログラムを使うことで
フォルダを自動生成し、さらに戻り値としてフォルダパスを取得できるので
そのままファイルの保存コードを差し込むと集計から保存まで真の自動化が完了します

良ければ使ってみて下さい。

VBAの学習方法をまとめました。

VBA(マクロ)のおすすめの学習方法 こんにちはhokkyokunです。 VBAを学ぶことで確実に業務は効率化し、余裕をもって仕事をすることができるようになります。 ...

VBAを高コスパで、短期間で学ぶにはUdemyがおすすめです。
Udemyは良質の学習プラットフォームですが、
動画数が多すぎてどれを見ればよいか迷います。

おすすめの講師をまとめました。

【Udemyは講師で選べ!】UdemyがVBA学習に最適な理由とおすすめのVBA講師 こんにちはhokkyokunです。 巨大学習プラットホームUdemyの中からVBAに関する動画について講師に焦点を当ててまとめま...

ブログ村ランキング参加中です。よかったらフォローお願いします!!

PVアクセスランキング にほんブログ村