• ベストアンサー

Excel VBA で フォルダ名の一部を一括変更(セルの値を取得して変更)

こんにちは。例を挙げます。よろしくお願いします。 まず、"ABC" という名前のフォルダがあるとします。 この"ABC"の中に、"00_あいうえお"というフォルダがあるとします。 ほかにも同じようなフォルダ:"10_かきくけこさ123"、"01_しす45せそたち"、"67_つてと"があります。これらのフォルダ名には特徴があり、2桁の半角数字に始まり、半角アンダーバー、文字列という並びになっています。 さらに同じフォルダ"ABC"に、EXCELファイル"なにぬ89.xls"もあるとしましょう。 したがって今、フォルダ"ABC"には、4つのフォルダと1つのEXCELファイルがあります。 "なにぬ89.xls"の、セルA1には"1"、A6には"2"、A11,A16は"34","57"と数値が入っているとします。また、セルB3には"あいう"、B8には"かき"、B13には"しす4"、B18には"つてと"という文字列が入っています。 B3,B8,B13,B18の文字列は、必ず同じフォルダ"ABC"内のフォルダ名に含まれています。 マクロで行いたい内容:フォルダ名の左端の2桁の数字を置換する その詳細: "なにぬ89.xls"のセルB3の文字列"あいう"を含むフォルダ"00_あいうえお"のフォルダ名の2桁の数字"00"のうち、右の"0"だけ、セルA1の数値"1"に置換したいのです。("00_あいうえお"→"01_あいうえお"へフォルダ名置換) 同じように、セルB8の"かき"を含むフォルダ"10_かきくけこさ123"の名前も、セルA5の数値"2"をもとに置換したいのですが、今度は2桁の数字が"02"になってほしいのです。("10_かきくけこさ123"→"02_かきくけこさ123"へフォルダ名置換) 以上のことをふまえますと、 フォルダ名"01_しす45せそたち" は "34_しす45せそたち" "67_つてと" は "57_つてと" に変換したいということがお分かりいただけますでしょうか。 4つの例しかあげませんでしたが、実際の"なにぬ89.xls"にはもっとたくさんのデータが、5行おきに並んでいます。他のセルには無関係の文字列や空白などが入っています。 セルの値でフォルダ名を部分一致検索し、セルの値でそのフォルダ名を置換する、ということができるでしょうか? 説明が長くなりましたが、ご回答、お待ちしております。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.2

Sub FolderChange()  Dim i As Integer  Dim fn As String  Dim fs, fo  Set fs = CreateObject("Scripting.FileSystemObject")  For Each fo In fs.GetFolder(ThisWorkbook.Path).SubFolders   For i = 1 To Range("A" & Rows.Count).End(xlUp).Row Step 5    If InStr(fo.Name, Cells(i + 2, 2).Value) > 0 Then     fn = Format(Cells(i, 1).Value, "00") & Mid(fo.Name, 3)     Name ThisWorkbook.Path & "\" & fo.Name As ThisWorkbook.Path & "\" & fn     Exit For    End If   Next  Next End Sub

noname#200395
質問者

お礼

すごすぎます! 開いた口がふさがらない、とはこのことですね! ありがとうございました!

その他の回答 (1)

回答No.1

あるファイルのセルの内容を変更すると、そのファイル名だけでなくフォルダ名も連動して変更する? きちんと読んでいませんが、ファイル名とフォルダ名はセルを&で結合すれば可能でしょう。それなら、その結果を「ファイル名・フォルダ名管理シート」としてもち、そこへ一覧として持ち、マクロでは、その一覧を元にファイル名やフォルダ名の作成をした方がいいと思います。ファイル名の作成規則はマクロから外した方がすっきりします。 また、変更後には変更前のファイル名やフォルダ名が判らなくなります。変更前の情報がないと名前変更できないので、変更前の情報をどこかに保存しておく必要があるでしょう。 でもそれ以前の疑問として、どうしてそういう運用が必要なのでしょう? 手作業で誰でも簡単に、その規則から逸脱したファイル名やフォルダ名にすることが可能ですよね?誰かが間違ってファイル名やフォルダ名を変更したら、どうやってもとに戻すのでしょう? そうした保障がされていないのに、セルの内容を変更したら自動的にファイル名やフォルダ名を変えるマクロを知ってもあまり意味がないのでは?もっと現実的な運用を考えた方がよろしいのではないでしょうか。

関連するQ&A