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→と延々作業するのは骨が折れますし、時間と労力も必要でした。








