Sub SaveSelectedSheetsToNewWorkbook()
Dim wsDate As Worksheet
Dim targetDate As Date
Dim formattedDate As String
Dim yearFolder As String
Dim monthFolder As String
Dim savePath As String
Dim newWb As Workbook
Dim currentWb As Workbook
Dim sheetNames As Variant
Dim i As Integer
Dim fileExists As Boolean
Dim response As VbMsgBoxResult
Dim altSavePath As Variant
' 初期設定
Set currentWb = ThisWorkbook
Set wsDate = currentWb.Sheets("CSV取り込み")
' セルA2の日付を取得
On Error GoTo DateError
targetDate = wsDate.Range("A2").Value
On Error GoTo 0
formattedDate = Format(targetDate, "yyyymmdd")
' 保存先フォルダの作成(年→月)
yearFolder = "C:\Users\matsu\Desktop\提出用\" & Year(targetDate)
If Dir(yearFolder, vbDirectory) = "" Then MkDir yearFolder
monthFolder = yearFolder & "\" & Format(targetDate, "mm")
If Dir(monthFolder, vbDirectory) = "" Then MkDir monthFolder
' 保存ファイルパスの設定
savePath = monthFolder & "\【MVNO】Call_Center_Report_" & formattedDate & ".xlsx"
fileExists = (Dir(savePath) <> "")
' ファイルがすでに存在するか確認
If fileExists Then
response = MsgBox("同じ名前のファイルが既に存在します。" & vbCrLf & _
"上書きしますか?" & vbCrLf & vbCrLf & _
"[はい]:上書き保存" & vbCrLf & _
"[いいえ]:保存先を指定" & vbCrLf & _
"[キャンセル]:処理を中止", _
vbYesNoCancel + vbExclamation, "ファイルの重複確認")
Select Case response
Case vbYes
' そのまま savePath を使用
Case vbNo
altSavePath = Application.GetSaveAsFilename( _
InitialFileName:="【MVNO】Call_Center_Report_" & formattedDate & ".xlsx", _
FileFilter:="Excelファイル (*.xlsx), *.xlsx", _
Title:="保存先とファイル名を指定してください")
If altSavePath = False Then
MsgBox "保存処理をキャンセルしました。", vbInformation
Exit Sub
Else
savePath = altSavePath
End If
Case vbCancel
MsgBox "保存処理をキャンセルしました。", vbInformation
Exit Sub
End Select
End If
' シート名を定義
sheetNames = Array("Hourly", "Monthly", "Daily")
' 最初のシートをコピーして新しいブック作成
currentWb.Sheets(sheetNames(0)).Copy
Set newWb = ActiveWorkbook
' 2枚目以降のシートを追加コピー
For i = 1 To UBound(sheetNames)
currentWb.Sheets(sheetNames(i)).Copy After:=newWb.Sheets(newWb.Sheets.Count)
Next i
' 保存
Application.DisplayAlerts = False
newWb.SaveAs Filename:=savePath, FileFormat:=xlOpenXMLWorkbook
newWb.Close SaveChanges:=False
Application.DisplayAlerts = True
MsgBox "ファイルを保存しました:" & vbCrLf & savePath, vbInformation
Exit Sub
DateError:
MsgBox "「CSV取り込み」シートのセルA2に有効な日付がありません。", vbExclamation
End Sub
```
---
### ✅ 保存先フォルダ構成例(2025年6月1日をA2に入力した場合)
```
C:\Users\matsu\Desktop\提出用\
└─2025\
└─06\
└─【MVNO】Call_Center_Report_20250601.xlsx
```