フォルダーにはいっている複数のファイル名を変更するVBAを教えてください
ファイル名はすべて違います
例えば以下のような名前だとして、アンダーバーの5個目から前を削除したいです。
つまり、1-1_202105 , 2-2-(2)_202105 をファイル名としたいのですが、
残したい部分の文字数は一定ではありません。
また削除したい文字数も一定ではありません。初めからからアンダーバー5個目までを削除すると、新ファイル名となります。
F30002_A5987_GY002((2))_DQ0_(1)_1-1_202105
F30001_A5789_GY001-1_DD1_(2)_2-2-(2)_202105
ファイルの数も月によってまちまちですが、10くらいあります。
ちなみに拡張子を一括で変換するVBAをフォルダー内で実行してから
ファイル名の変換をします。(拡張子変換のVBAは作成済)
お分かりの方よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
以下のスクリプトを登録してください。
Option Explicit
Public Sub ファイル名一括変更()
Dim fname As String
Dim old_name As String
Dim new_name As String
Const folder As String = "d:\goo\data"
Dim RE As Object
Dim matches As Object
Dim match As Object
Set RE = CreateObject("VBScript.RegExp")
RE.Pattern = "^([^_]+_[^_]+_[^_]+_[^_]+_[^_]+_)(.+)$"
RE.Global = True
Dim FSO As Object
Dim FO As Object
Dim get_files As Object
Dim get_file As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FO = FSO.GetFolder(folder)
Set get_files = FO.files
For Each get_file In get_files
fname = get_file.Name
Set matches = RE.Execute(fname)
If matches.Count > 0 Then
Set match = matches.Item(0)
old_name = folder & "\" & fname
new_name = folder & "\" & match.submatches(1)
MsgBox ("old=" & old_name & vbLf & "new=" & new_name)
Name old_name As new_name
End If
Next
MsgBox ("完了")
End Sub
-------------------------------------
使用時の注意事項
Const folder As String = "d:\goo\data"
は、該当フォルダ名です。あなたの環境にあわせて適切に設定してください。
最初は、試験的にテスト用のフォルダを作り、そこに少量のファイルを格納し、
正しくリネームされるか確認してください。
MsgBox ("old=" & old_name & vbLf & "new=" & new_name)
で変更前のファイル名と変更後のファイル名をメッセージボックスに表示しています。ファイルが大量にある場合は、この行をコメントアウトしてください。
No.5
- 回答日時:
下記のサイトにファイル名取得およびファイル名変更のマクロがあります。
両方を実行できるように標準モジュールに取り込んでおきます。https://www.higashisalary.com/entry/file_rename
■手順
1.拡張子の一括変換を行います。
2.取り込んだファイル名取得のマクロを実行します。そうするとA4セル以降にファイル名が取得されます。
3.A5セルに『=IFERROR(MID(A4,SEARCH("_",A4,SEARCH("_",A4,SEARCH("_",A4,SEARCH("_",A4,SEARCH("_",A4,1)+1)+1)+1)+1)+1,LEN(A4)),A4)』と入力して下方向にコピペします。
4.取り込んだファイル名変更のマクロを実行します。そうするとファイル名が変更されます。
※1 ファイル名にアンダーバーが5つ以上ない場合は、ファイル名変更対象外としています。
※2 練習用フォルダに練習用ファイルを作成して試しておくことをお勧めします。
No.4
- 回答日時:
No1です。
>この式の一部が赤くなり、構文がちがうみたいです。
この式とは、具体的にどの行ですか。
私が提示したマクロは、こちらで動作確認済みのものです。
あなたが、マクロを作成されたとき、コピペでなく手打ちで作成された場合、スペルミスが考えられます。手打ちで作成されたのでしょうか。
こんにちは
コピペしました。RE patternからの一文と new_nameからの一文が赤くなります。コンパイルエラーと出てきます。
私の方で、何かしたのかと思いますが 今回は、諦めます。
ありがとうございました。
No.3
- 回答日時:
・アンダーバーが4個以下の場合
・削除した結果、同名のファイルが発生
どちらもあり得ないものとして
新ファイル名を求めるところだけ。
Dim a As Variant
Dim b As String
Dim nm As String
b = "F30002_A5987_GY002((2))_DQ0_(1)_1-1_202105"
a = Split(b, "_", 6, vbBinaryCompare)
nm = a(5)
元のファイル名は10くらいあるんですが、それを全部構文にいれるということですよね。まだ試してないですが、やってみます。ありがとうございました
No.2
- 回答日時:
スプリット関数では?
説明しやすくするためにファイル名を簡略化して
"1_2_3_4_5_6_7"とします。
Dim v as variant
v=split("1_2_3_4_5_6_7","_") これで(添字の既定の最小値は 0)
v(0)=1・・・v(4)=5 ・・・などと配列に格納できます。
例示されたようにアンダーバーの個数が固定であれば
FileName="F30001_A5789_GY001-1_DD1_(2)_2-2-(2)_202105"
v=split(FileName,"_")
newFileName=v(5) & "_" & v(6)
で得られます。
アンダーバーの個数が不定なら、Ubound(V) で配列数が得られるので
あとはFor ~ Next ループとかでしょうかね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Access(アクセス) Access VBA を利用して、フォルダ内のファイルの名称を変更したい 1 2023/08/03 08:27
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Visual Basic(VBA) vbaサブフォルダーをワイルドカードで取得したい 2 2022/11/15 08:04
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) Excelのマクロについて教えてください。 作業フォルダ内に2つのファイルがあります。 このファイル 2 2023/07/09 13:40
- Excel(エクセル) 【VBA】フォルダAにある2つのファイルの内1つを、フォルダBへ。もう1つを、フォルダBへ移動したい 6 2022/07/26 08:51
- ノートパソコン ソフトアンインストール残存ファイル 3 2022/09/13 18:15
- Visual Basic(VBA) Excel VBA でデータ転記について 1 2023/03/07 19:11
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトでファイル...
-
ExcelVBAのDirでスペース含むフ...
-
コマンドプロンプトで変数が数...
-
[DOS] コピー先に同じファイル...
-
ftp処理でmove(移動)を行いたい
-
フォルダ内の更新日時が一番新...
-
バッチにて複数のcsvファイルを...
-
バッチファイルで、iniファイル...
-
word VBA ファイル名 保存
-
バッチコマンドでファイル名の...
-
エクセルVBAを使用してJPGファ...
-
バッチ処理で16進数でファイル...
-
VBA GetAttrについて教えてくだ...
-
スタートアップのファイルをバ...
-
MS-DOS のバッチのリネーム(日...
-
ファイル名に ” を使うと エク...
-
ファイル名を該当フォルダ内か...
-
バッチファイル作成。フォルダ...
-
サブフォルダからファイルをコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトで変数が数...
-
コマンドプロンプトでファイル...
-
バッチファイルで、iniファイル...
-
[DOS] コピー先に同じファイル...
-
バッチコマンドでファイル名の...
-
ftp処理でmove(移動)を行いたい
-
access,vbaでフォルダ内のファ...
-
ExcelVBAのDirでスペース含むフ...
-
フォルダ内の更新日時が一番新...
-
DOSのバッチ作成について‐FORの...
-
word VBA ファイル名 保存
-
ファイル名に ” を使うと エク...
-
.batでファイル名から抽出して...
-
ファイル名を該当フォルダ内か...
-
サブフォルダからファイルをコ...
-
【vbs】ファイル名の検索と該当...
-
【DOSバッチ開発】末尾のタブの...
-
VBA GetAttrについて教えてくだ...
-
バッチ処理で16進数でファイル...
おすすめ情報