Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Home : Microsoft 365)
対象ファイルのシートをコピーし、ファイル名とシート名をプラスしたものを一つのブックとして指定フォルダに格納する方法
投稿日時: 23/09/30 09:42:03
投稿者: Angels17OT

お世話になります。Angelsです。
対象ファイルのシートをコピーし、ファイル名とシート名をプラスしたものを一つのブックとして指定フォルダに格納する方法をお教えください。よろしくお願いいたします。
 
フォルダ内にBook.xlsmと1 .xlsx・2.xlsx・3.xlsx・・・・等々ありそれぞれ複数シート(A・B・C・・・・)が含まれています。
Book.xlsmはsheet1・sheet2・sheet3・macro4つのシーとで構成されています。
対象ファイルをActiveにして
下記コードを実行すると対象ファイル1.xlsxの複数シート(A・B・C・・・・)の内容が自動的に別ファイルA.xlsx・B.xlsx・C.xlsxになって同フォルダに保存されます。
 
同フォルダ内に対象ファイル(1 .xlsx・2.xlsx・3.xlsx・・・・)が複数ある時に対応できるよう1A.xlsx・1B.xlsx・1C.xlsx ・・2A.xlsx・2B.xlsx・2C.xlsxとなるように対象ファイル名とシート名をプラスしたものを保存ファイル名にしたいのですがどのようなコードを書けばよいのかわかりません。
 
Option Explicit
Sub sheets_save()
 
Dim strLinks As Variant
Dim i As Long, cnt As Long
Dim stDocName As String
Dim シート As Variant
 
    ' Excelリンクのみ対象とする
    strLinks = _
        ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
    If Not IsEmpty(strLinks) Then
        cnt = UBound(strLinks)
        stDocName = cnt & _
            " 件の外部ブックへのリンクがあります。" & _
            vbNewLine & "全て解除し、値に変換してよろしいですか?"
        If MsgBox(stDocName, vbYesNo) = vbNo Then Exit Sub
         
        For i = 1 To cnt
            ' アクティブブックのリンク解除
            ActiveWorkbook.BreakLink _
                Name:=strLinks(i), _
                Type:=xlLinkTypeExcelLinks
        Next i
        MsgBox cnt & " 件のリンクを解除しました。", vbOKOnly
    End If
 
For Each シート In Worksheets
If シート.Name <> "macro" Then
シート.Copy
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & シート.Name
ActiveWorkbook.Close
End If
Next シート
End Sub

回答
投稿日時: 23/09/30 11:01:50
投稿者: 半平太

ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & シート.Name
↓これでいいんじゃないかと思うのですが・・
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Split(シート.Parent.Name, ".xl")(0) & シート.Name
 
実地テストはしておりません。あしからず

投稿日時: 23/09/30 11:28:39
投稿者: Angels17OT

半平太 様
 
ご指導ありがとうございました。上手くいきました。
助かりました。今後ともどうぞよろしくお願いいたします。