Excel (VBA)

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

 
(Windows 11 Home : Excel 2019)
シート名をそのままに新しいブックに名前をつけてコピーしたいです
投稿日時: 25/02/23 00:42:35
投稿者: Floral Water

初めまして。
部内でIT全般担当者が退職し、その方が作ったファイルを触れる人が誰もいなくなってしまったため、付け焼刃で残されたものに手を入れています。当方VBA超初心者です。
業務PC、ファイルは持ち出せず記憶に頼って書いているので質問以外の間違いもあるかと思いますが、
以下、▲やりたいこと▲やりたいことに対してできていないことを書き出しました。皆様のお知恵を拝借できますと助かります。
 
 
▲やりたいこと
コピー元ブック名 「リスト2025年2月22日現在.xlsm」
@ Worksheets(4)のシート名「リスト」 フィルタの抽出結果のみを新しいブックに同じシート名でコピーしたい 
A Worksheets(5)のシート名「yyyymmdd」 上と同じブックの「リスト」シートの右隣にこのシートをそのまま同じシート名でコピーしたい(「yyyymmdd」は任意の日付なのでコピー元シートそのままの表記と同じにしたい)
 
B コピー先新しいブック名「001 リスト2025年2月22日現在.xlsm」としたい
新しいブック名はコピー元ブック名の頭に"001"をつけたいです。
 "001"は抽出結果のコードで連番ではないです。
 
C 新しいブックの保存先 "C:\ドキュメント\還元"
 
▲やりたいことに対してできていないこと
@ 抽出結果を新しいブックにコピーできたがシート名を「リスト」にできない(「Sheet1」になってしまう)
A 何もできていない
B 何もできていない
C 何もできていない
 
 
 
↓はコピー元の抽出結果が出た状態の「リスト」シートです。
 

リスト							
コード	店名	担当者	番号	    氏名	    番号   商品コード	商品名
001	東京	01	1234567 	〇〇 ◇◇	5728091	 1250684	商品名
001	東京	03	5293461	    〇〇 ◇◇	5847326	 1518685	商品名
001	東京	07	2233156	    〇〇 ◇◇	5417128	 1652335	商品名
001	東京	07	7812396	    〇〇 ◇◇	5889775	 1127790	商品名
001	東京	10	5289355	    〇〇 ◇◇	5886821	 1452273	商品名
001	東京	10	6639777	    〇〇 ◇◇	5838034	 1176132	商品名
001	東京	10	5289355	    〇〇 ◇◇	5264009	 1888657	商品名
001	東京	04	9639223	    〇〇 ◇◇	5085372	 1023046	商品名

 
 
以下は自分で記憶しているコードです。
「' フィルタリングされたデータを新しいブックにコピーします」 のところでエラーになります。
その前のシート名もうまく行っていないので、ご教示いただけますでしょうか
ここから先はわからないまま書いているのでファイル名とパス名も多分エラーになると思います。
 
-------------------------------------------------------------
 
 
 
       
     
 Sub フィルター結果を新しいbookに保存()
     
    Dim sourceSheet As Worksheet
    Dim newBook As Workbook
    Dim filteredDataRange As Range
     
    ' フィルタリングを行うデータが含まれているシートを指定します
    Set sourceSheet = ThisWorkbook.Sheets("リスト")
     
    ' フィルタリングを実行します
    sourceSheet.Range("A2").AutoFilter Field:=2, Criteria1:="東京"
     
    ' フィルタリングされたデータの範囲を取得します
    Set filteredDataRange = sourceSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
     
    ' 新しいブックを作成します
    Set newBook = Workbooks.Add
     
    ' フィルタリングされたデータを新しいブックにコピーします
    filteredDataRange.Copy newBook.Sheets(1).Range("A1")
     
    Worksheets(5).Copy After:=newBook.Sheets(1)
 
   
    ' 新しいブックを保存します(ファイル名とパスを適宜変更)
     
    newBook.SaveAs "001" & ThisWorkbook.Path, FileFormat:=xlWorkbookDefaul
     
     
    ' フィルタリングを解除します
    sourceSheet.AutoFilterMode = False
     
    ' 新しいブックを閉じます
    newBook.Close SaveChanges:=True
     
End Sub
 
 
 
初心者の質問でお恥ずかしいのですが、何卒よろしくお願いいたします。
 
 

回答
投稿日時: 25/02/23 15:50:10
投稿者: simple

一旦投稿しましたが、取り消します。
(シートごとコピーする前提で書きましたが、ユーザーの意図と違う可能性が高く、
  また実現性が乏しく悪手でもありました。)
混乱させたとしたら申し訳ありません。
他の回答者さんの回答をお待ちください。

投稿日時: 25/02/23 15:59:59
投稿者: Floral Water

本日返信をいただいており、そちらにテストコードを書いていただいていたのでそれを頼りに現在試行中でした。
更新したらコメントは削除?されていたようでした。
参考にさせていただいております。ありがとうございます。
 

投稿日時: 25/02/23 16:03:30
投稿者: Floral Water

フィルタの抽出結果の対象者にのみ配布ファイルを作成するので、抽出結果のみをコピーし(とその右のシートのコピー)、マクロなしブックで保存したいです。
こちらでも試行中ですがうまく着地できていません。
 
引き続きどうぞよろしくお願いいたします。

回答
投稿日時: 25/02/23 20:10:57
投稿者: 半平太

>@ 抽出結果を新しいブックにコピーできたがシート名を「リスト」にできない
>(「Sheet1」になってしまう)
Sheet1のシート名をリストに変更するコードを書く
 
>A 何もできていない
既に出来ていると思われます。
 
>B 何もできていない
>C 何もできていない
  newBook.SaveAs "C:\ドキュメント\還元\001 " & Split(ThisWorkbook.Name, ".")(0), FileFormat:=xlOpenXMLWorkbook
としてみる。
(同じ環境を作るのが面倒なので、そっちでテストしてください)
 
全貌は、以下になります。

引用:
Sub フィルター結果を新しいbookに保存()
      
    Dim sourceSheet As Worksheet
    Dim newBook As Workbook
    Dim filteredDataRange As Range
      
    ' フィルタリングを行うデータが含まれているシートを指定します
    Set sourceSheet = ThisWorkbook.Sheets("リスト")
      
    ' フィルタリングを実行します
    sourceSheet.Range("A2").AutoFilter Field:=2, Criteria1:="東京"
      
    ' フィルタリングされたデータの範囲を取得します
    Set filteredDataRange = sourceSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
      
    ' 新しいブックを作成します
    Set newBook = Workbooks.Add
     
    ' フィルタリングされたデータを新しいブックにコピーします
    filteredDataRange.Copy newBook.Sheets(1).Range("A1")
     
    'シート名を"リスト"に変更する
 
    newBook.Sheets(1).Name = "リスト"
      
    ThisWorkbook.Worksheets(5).Copy after:=newBook.Sheets(1)
  
    
    ' 新しいブックを保存します(ファイル名とパスを適宜変更)
    newBook.SaveAs "C:\ドキュメント\還元\001 " & Split(ThisWorkbook.Name, ".")(0), FileFormat:=xlOpenXMLWorkbook
      
    ' フィルタリングを解除します
    sourceSheet.AutoFilterMode = False
      
    ' 新しいブックを閉じます
    newBook.Close SaveChanges:=True
End Sub

投稿日時: 25/02/23 22:10:51
投稿者: Floral Water

半平太 様
 
お忙しいところご回答くださりありがとうございました。
おかげさまで解決できました。
 
「リスト」のシート名をきちんと変更していなかったことと
とりわけ新しいブックの名前を付けるときのSplit関数というのを初めて知りました。
まだまだ分からないことだらけですが、初めて自分の言葉で質問してお答えをいただくことができ、学習的により深い経験となりました。ありがとうございました。