[[20231107182522]] 『ファイル名末尾に一括で”_ABC』(ぱんだ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ファイル名末尾に一括で”_ABC』(ぱんだ)

表題の件、教えてください。

あるフォルダ内に、Excelファイルが3つ入っています。

りんご.xlsx
ばなな.xlsx
すいか.xlsx

このファイル名の末尾に、「_ABC」を追加したいです。

りんご_ABC.xlsx
ばなな_ABC.xlsx
すいか_ABC.xlsx

名前を付けて保存でファイル名を変えるとかは色々検索してヒットするのですが、
該当ファイルを開かずにそのまま末尾に追記する方法が分かりません。
宜しくお願いします。

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


Nameステートメントを使ってファイル名を変更してください。
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/name-statement

ファイル名は".xlsx"を"_ABC.xlsx"にReplaceすればいいでしょう。
(xyz) 2023/11/07(火) 19:16:54


xyz様

ありがとうございます!!
出来ました & 勉強になりました(拡張子ごとReplaceしてしまえば良いのですね!)

Sub Test()
Dim FILE_PATH As String
Dim FSO As Object
Dim TARGET As Files
Dim TEMP As Object

Dim FILE_OLD As String
Dim FILE_NEW As String

FILE_PATH = Range("E1").Value

Set FSO = New FileSystemObject
Set TARGET = FSO.GetFolder(FILE_PATH).Files

For Each TEMP In TARGET

    FILE_OLD = FILE_PATH & "\" & TEMP.Name
    FILE_NEW = Replace(FILE_OLD, ".xlsx", "_ABC.xlsx")
    Name FILE_OLD As FILE_NEW
Next
End Sub
(ぱんだ) 2023/11/07(火) 22:31:56

 おお、素晴らしい。お疲れ様でした。

 そうですね、FSOを使ったほうがよければ、Nameステートメントよりも、
 FSOで統一したほうが良かったかもしれません。
     FILE_OLD = TEMP.Path
     FILE_NEW = Replace(FILE_OLD, ".xlsx", "_ABC.xlsx")
     FSO.MoveFile FILE_OLD, FILE_NEW
 ミスリードしたかもしれません。
 # 拡張子の大文字小文字問題があるかもしれません。確認下さい。
(xyz) 2023/11/08(水) 00:00:17

xyz様

重ね重ね、ありがとうございます!

拡張子の大文字小文字問題があるかもしれません。 そのようなリスクもあるのですね。知りませんでした。

ファイルやフォルダ操作は、中々奥が深く難しいですが、
教えて頂いたものを色々試して引き出し増やしたいと思います。
貴重なアドバイス、ありがとうございます!!
(ぱんだ) 2023/11/08(水) 05:38:09


 早いですね。
 結局纏めると、こんな書き方もできますか。
 Sub test()
     Const fldr As String = "D:\MyDocuments\202311\test\"  'サンプル
     Dim fso   As Object
     Dim f     As Object
     Dim fname As String

     Set fso = CreateObject("Scripting.FileSystemObject")
     For Each f In fso.GetFolder(fldr).Files
         If LCase(fso.GetExtensionName(f.Path)) = "xlsx" Then
             fname = fso.GetBaseName(f.Path) & "_ABC"       '拡張子除きのファイル名
             fso.MoveFile f.Path, fldr & fname & ".xlsx"
         End If
     Next
 End Sub
 もちろん、fsoをearly binding にしたほうが良いと思います。ここではlate binding にしています。
(xyz) 2023/11/08(水) 06:16:05

既に解決済みのようですが、お手軽だしこんなんでも↓
バッチファイルです。このTextを拡張子batにして保存・実行

 @echo off

 for %%f in ( * ) do call :sub "%%f"
 exit /b

 rem 「.xlsx」と付くファイル名を「_ABC.xlsx」に置換
 :sub
  set fname=%1
  set fname=%fname:.xlsx="_ABC.xlsx"%
  ren %1 %fname%

(DOS回顧) 2023/11/08(水) 10:13:01


xyz様
ありがとうございます!
今後、色々活用させていただきます。大変参考になりました!

DOS回顧様
ありがとうございます。
VBAでなくても出来るのですね!
前後の処理に合わせて、どのアプローチがいいか考えて活用させて頂きます!
(ぱんだ) 2023/11/08(水) 12:52:59


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.