プロが教えるわが家の防犯対策術!

例えば「2014-12月.xlsm」というファイルがあって、あるコードを実行すると「2015-1月.xlsm」などのように次の月のファイルを作成してくれるとします。下記はその一部ですが、もしファイル名を変えて、「削除したい2015-2月.xlsm」という名前にした時、、「削除したい2015-3月.xlsm」という名前をpathに入れるようにするにはどこを変えればできるでしょうか?
すいませんが、よろしくお願いします。

path = Format(DateAdd("m", 1, DateValue(Replace(ThisWorkbook.Name, "月.xlsm", "-1"))), "yyyy-m") & "月.xlsm"

A 回答 (2件)

現在のコードで不都合なことがよくわかりません。



>もしファイル名を変えて、「削除したい2015-2月.xlsm」という名前にした時、、「削除したい2015-3月.xlsm」という名前をpathに入れるようにするにはどこを変えればできるでしょうか?

「削除したい2015-2月.xlsm」という名前にした時とはどのような操作を意味しているのでしょうか?

具体的に、このようなことをしたいが、現在のコードではこのような結果になっていまうというような(たとえは2015-1月.xlsmファイルのファイル名を2015-2月と変更したところ2015-3月のファイル名が作成できないなど)補足説明をされたほうが良いと思います。
    • good
    • 0

「月.xlsm」と同じく、削除したいのをただ削除するだけです。



dim myFile as string
myfile = thisworkbook.name
myfile = "削除したい" & format(dateadd("m", 1, replace(replace(myfile, "削除したい",""), "月.xlsm", "")), "yyyy-m") & "月.xlsm"
thisworkbook.saveas myfile



#pathとか変数名に使っちゃダメです。

この回答への補足

どうもありがとうございます。大変感謝です。replace(replaceに変えるのはきちんと理解がないとでてこないですね。

教えていただいたもので、思い通りになりましたが、もう1点問題がでました。年が変わったら「2015年」という名前でフォルダの作成を行いたいのですが、下記のコードでは「削除したい2015年」という名前のフォルダになってしまいます。フォルダの作成は、「削除したい」を除いたものを作成するにはどう変えればよいでしょうか?
理解がまだまだ薄いので、たびたびお手数をおかけしますがどうぞよろしくお願いいたします。


Sub ブックコピー自動翌月分作成()
Dim i As Integer
Dim wb As Workbook
Dim myDir_path As String, myNew_path As String
'フォルダパスとファイルパスを作成
myDir_path = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "\") - 1)
myNew_path = "削除したい" & Format(DateAdd("m", 1, Replace(Replace(ThisWorkbook.Name, "削除したい", ""), "月.xlsm", "")), "yyyy-m") & "月.xlsm"
myDir_path = Left(myDir_path, InStrRev(myDir_path, "\")) & Left(myNew_path, 9) & "年\"
'フォルダの有無を確認、なければ作成
With CreateObject("Scripting.FileSystemObject")
If Not .FolderExists(myDir_path) Then
MkDir myDir_path
'MsgBox myDir_path & "を作成しました"
'MsgBox Left(myDir_path, InStrRev(myDir_path, "\")) & "に" & vbNewLine &
MsgBox Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "\") - 12) & "に" & vbNewLine & _
Left(myNew_path, 9) & "年" & "フォルダを新たに作成しました"
End If
End With
'ファイルの有無を確認、なければ保存,あれば処理中止
If Dir(myDir_path & myNew_path) = "" Then
ThisWorkbook.SaveCopyAs myDir_path & myNew_path
MsgBox myNew_path & "のファイルを新たに作成しました"
Else
MsgBox "翌月分のファイルはすでに存在するので処理を中止します", vbOKOnly, "処理中止"
Exit Sub
End If
'新規作成したブックを開く,既に開いていれば処理中止

For Each wb In Workbooks
If wb.Name = myNew_path Then
MsgBox myNew_path & "は既に開いているので処理を中止します", vbOKOnly, "処理中止"
Exit Sub
End If
Next

Workbooks.Open myDir_path & myNew_path
Workbooks(myNew_path).Activate

End Sub

補足日時:2014/10/14 23:04
    • good
    • 0
この回答へのお礼

どうもありがとうございました。補足の部分はまた新たに投稿いたします。

お礼日時:2014/10/25 23:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!