【Excel】エクセルファイルを日付名で一括コピーするマクロ

エクセルファイルの一括コピーVBAマクロ

1つのExcelファイルを「10.1」「10.2」…「10.31」と日付名で一括コピーするVBAがほしくなり、作ってみることにしました。

Excel 2019 で行いました。

別バージョンの場合、関数の有無の問題でうまく動作しない場合があります。

やりたかったこと
  • 1つのファイルを複製したい
  • 2021/10と年/月を指定し、その月分のファイル1日~末日までを作成したい
  • xlsmかxlsxかコピーするエクセルファイルを選びたい
  • 土日分のファイルを作成するか、土日は除くか選びたい

これらの機能を設け、作成してみることにしました!

新たにexeファイルを用意しました!

エクセルファイルを実行できない環境下もあったので、exeバージョンを作成しました。

今後はこちらでバージョンアップしていきます!

エクセルファイルを日付名で一括コピーする機能のコード公開

ThisWorkbook

Private Sub Workbook_Open()
    UserForm1.Show
End Sub

エクセル起動時にUserForm1を起動する処理を入れました。

UserForm1

Private Sub CommandButton1_Click()
  Dim strIn As String
  Dim arr() As String
  Dim extension As String
  Dim originalName As String
  Dim copyName As String
  Dim startArr() As String
  Dim endArr() As String
  
  originalName = "コピーするエクセルファイル名"
  strIn = TextBox1.Value
  If strIn = "" Then
    MsgBox "何も入力されませんでした。"
  Else
    arr = Split(strIn, "/")
    
    startDate = DateSerial(arr(0), arr(1), 1)
    endDate = DateSerial(arr(0), arr(1) + 1, 1) - 1
    
    startArr = Split(startDate, "/")
    endArr = Split(endDate, "/")

    If OptionButton1.Value = True Then
        extension = "xlsm"
    ElseIf OptionButton2.Value = True Then
        extension = "xlsx"
    End If


    If CheckBox1.Value = True Then
        For i = Val(startArr(2)) To Val(endArr(2))
            YMD = Weekday(startArr(0) & "/" & startArr(1) & "/" & i)
            If YMD <> 1 And YMD <> 7 Then
                copyName = Val(startArr(1)) & "." & i
                FileCopy ThisWorkbook.Path & "\" & originalName & "." & extension, ThisWorkbook.Path & "\" & copyName & "." & extension
            End If
        Next
    Else
        For i = Val(startArr(2)) To Val(endArr(2))
            YMD = Weekday(startArr(0) & "/" & startArr(1) & "/" & i)
            copyName = Val(startArr(1)) & "." & i
            FileCopy ThisWorkbook.Path & "\" & originalName & "." & extension, ThisWorkbook.Path & "\" & copyName & "." & extension
        Next
    End If
    
    MsgBox startDate & "から" & endDate & "まで、コピーを作成しました。"
    Unload UserForm1
  End If
End Sub

Private Sub UserForm_Initialize()
    Application.Visible = False
    TextBox1.Value = Year(Date) & "/" & Month(Date) + 1
End Sub

コード汚くてすみません。

自分で使うものなので、エラーチェックもしっかり付けれていないですし、変数名も適当なものがありわかりにくいと思います。

また時間があればブラッシュアップします。

ユーザーフォームで用意したツールボックスから用意したツールは以下4つです。

TextBox1.Value作成する年月の指定
OptionButton1.Value拡張子をxlsmで作成
OptionButton2.Value拡張子をxlsxで作成
CheckBox1.Value土日のファイルも作成するか

これだけの処理で、毎月のエクセルファイルを自動で生成してくれるのは非常にありがたいです。

1個1個、右クリック→コピー→名前変更→月.日.xlsx→と延々作業するのは骨が折れますし、時間と労力も必要でした。

応援してもらえると幸いです。

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