dポイントプレゼントキャンペーン実施中!

よろしくお願いいたします。
同じホルダ内に下記のようなファイル名で30程保存ファイルがあります。
28年度A店、 28年度B店、 28年度C店、 28年度D店、 ・・・・・・
29年度A店、 29年度B店、 29年度C店、 29年度D店、 ・・・・・・
集計ファイルが昨年度、今年度でマクロを組んでいる関係で、毎月集計の都度ファイル名を変更していますので、できればマクロを使って一括変更(置き換え)が出来ないかと思っています。
それで、毎年度使用できるように、例えばセルC5に28年度、セルC6に29年度と入力し、保存ファイル名の一部がセルC5と同じ部分を昨年度に、セルC6と同じ部分は今年度に保存ファイル名を下記のように変更(置き換え)するようなマクロを希望しています。
昨年度A店、 昨年度B店、 昨年度C店、 昨年度D店、 ・・・・・・
今年度A店、 今年度B店、 今年度C店、 今年度D店、 ・・・・・・
このような保存ファイル名の変更(置き換え)は可能でしょうか?。
どなたか、よろしくお願いいたします。

質問者からの補足コメント

  • うーん・・・

    ご教示、ありがとうございます。
    ホルダは常にデスクトップ上に置いており、ホルダ名は「各店集計」ですが
    For Each OldName In FSO.GetFolder("D:\各店集計").Files
    の部分が黄色になり 実行時エラー”76” パスがみつかりません となり中断してしまいます。
    何処が悪いのでしょうか、よろしくお願いいたします。

    No.3の回答に寄せられた補足コメントです。 補足日時:2018/01/07 11:42

A 回答 (5件)

>実行時エラー”76” パスがみつかりません となり中断してしまいます。



まず "D:\test" これはDドライブにあるtestと言うフォルダを指す物ですが、デスクトップはCドライブなので、そもそもの保存されている場所が違いますね。
あとデスクトップは特殊フォルダ
・特殊フォルダを取得(wsh.SpecialFolders)
http://excelwork.info/excel/specialfolder/
になりますね。

取り敢えず修正版。

Sub test_2()
Dim FSO As Object
Dim OldName
Dim PathName As String

Set FSO = CreateObject("Scripting.FileSystemObject")
PathName = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\各店集計"

For Each OldName In FSO.GetFolder(PathName).Files
If IsNumeric(StrConv(Left(OldName.Name, 1), vbNarrow)) Then

Select Case True
Case InStr(OldName, Range("C5").Value) > 0
Name OldName As Replace(OldName, Range("C5").Value, "昨年度")
Case InStr(OldName, Range("C6").Value) > 0
Name OldName As Replace(OldName, Range("C6").Value, "今年度")
End Select

End If
Next

Set FSO = Nothing
End Sub

ついでです。

Sub xyz()

'もし興味があればデスクトップフォルダがどのように表示されるか
'見てみて下さい。
MsgBox CreateObject("WScript.Shell").SpecialFolders("Desktop")

End Sub
    • good
    • 0
この回答へのお礼

めぐみん様
早速のご教示ありがとうございました。
期待どおりにファイル名の変更がされました。
早速活用させていただきます。
仕事の時間がかなり短縮できます。
本当にありがとうございました。

お礼日時:2018/01/07 13:51

No.3です。



>For Each OldName In FSO.GetFolder("D:\test").Files

ここの "D:\test" はそちらの実際のフォルダ名に修正して下さい。
    • good
    • 0

一例になれば。



Sub test()
Dim FSO As Object
Dim OldName
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each OldName In FSO.GetFolder("D:\test").Files
If IsNumeric(StrConv(Left(OldName.Name, 1), vbNarrow)) Then

Select Case True
Case InStr(OldName, Range("C5").Value) > 0
Name OldName As Replace(OldName, Range("C5").Value, "昨年度")
Case InStr(OldName, Range("C6").Value) > 0
Name OldName As Replace(OldName, Range("C6").Value, "今年度")
End Select

End If
Next

Set FSO = Nothing
End Sub
この回答への補足あり
    • good
    • 0

No.1です。



あ、両方ともセルに打ち込むのですね。
ならNo.1は無視して下さい。
    • good
    • 0

『年度』の定義が必要でしょうね。


4月1日~翌年3月31日を『年度』と言う会社とかありますしね。
単純に1月1日~12月31日とカレンダーそのものと同じなのかどうかと、元号の変更に伴うであろう年数のリセットについても。
(西暦ならそのままでしょうけど)
    • good
    • 0

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