アプリ版:「スタンプのみでお礼する」機能のリリースについて

フォルダ内のすべてのブックに対して、
シートA1の文字列を、シート名とファイル名に反映させたいのです。

1つのブックのみであれば、
シート名の変更:ActiveSheet.Name = Range("A1").Value
でいいのでしょうが、これをいっぺんに大量のファイルに対してはどうしたらいいのでしょうか?

また、シートA1の文字列をファイル名として保管できる方法も知りたいです。
ご存じの方、ご教示のほどよろしくお願いいたします。

A 回答 (2件)

Option Explicit


Sub Sample()
Dim Folder As String
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = ThisWorkbook.Path & "\"
If Not .Show Then Exit Sub
Folder = .SelectedItems(1)
End With
Dim fso As Object, File As Object
Dim FileNames As Variant
FileNames = Array()
Set fso = CreateObject("Scripting.FileSystemObject")
For Each File In fso.GetFolder(Folder).Files
If File.Path = ThisWorkbook.FullName Then
ElseIf fso.GetExtensionName(File.Name) Like "xls*" Then
ReDim Preserve FileNames(UBound(FileNames) + 1)
FileNames(UBound(FileNames)) = File.Name
End If
Next File
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
Dim FileName As Variant, NewName As String, Extension As String
For Each FileName In FileNames
With Workbooks.Open(Folder & "\" & FileName)
NewName = .ActiveSheet.Range("A1").Value
Extension = fso.GetExtensionName(FileName)
If NewName = "" Then
ElseIf Not fso.FileExists(Folder & "\" & NewName & "." & Extension) Then
.ActiveSheet.Name = NewName
.SaveAs Folder & "\" & NewName & "." & Extension
End If
.Close False
End With
Next FileName
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
    • good
    • 0
この回答へのお礼

助かりました

出来ました!ありがとうございます!

お礼日時:2022/04/11 17:17

こんにちは



>これをいっぺんに大量のファイルに対してはどうしたらいいのでしょうか?
各ファイルでループさせて、同様の処理を行うようにすれば良いです。
◇フォルダー内のすべてブックを開いて同じ処理を行う
https://www.helpforest.com/excel/emv_sample/ex10 …

>シートA1の文字列をファイル名として保管できる方法も知りたいです。
一般的にはシートが複数あるので、それぞれを別ファイルにするってことなのでしょうか?
元のファイルをどうするのかも、よくわからないけれど・・
◇別の名前を付けてブックを保存
https://www.officepro.jp/excelvba/book_new/index …
    • good
    • 0
この回答へのお礼

ありがとうございます!勉強させていただきます。

お礼日時:2022/04/11 17:18

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