プチIT化 PR

【VBA】特定のシートだけを別名ファイルで名前をつけて保存する

記事内に商品プロモーションを含む場合があります。
当サイトは、アフィリエイト広告を利用しています。

こんにちは、わたあめです。Excelファイルの中に複数のシートがあるとき、その中のシート1つを別ファイルに名前を付けて保存するサンプルマクロを紹介します。

上記画像のように、Sheet1,Sheet2,Sheet3の3つのシートがあるファイルから、別ファイルにSheet2を移して、名前を付けて保存するVBAを紹介していきます。それでは、いってみましょう!

サンプルマクロ

早速シートひとつを別ファイルに名前を付けて保存するマクロのサンプルです。Excelファイルの中に複数あるシートがあり、その中のひとつのシートを、別ファイルとして保存するマクロです。

Sub sample()
  ' 特定シートを別ファイルで名前を付けて保存する

  ' 別ファイルに出力するシートを選択
  Sheets("シート名※1").Select

  ' 名前を付けて保存するためにダイアログ表示
  Save_File = Application.GetSaveAsFilename(InitialFileName:="名前を指定してください※2", _
  FileFilter:="Excelファイル,*.xlsx,すべてのファイル,*.*")

  ' シートのコピー、ファイル保存
  Sheets("シート名※1").Copy
  ActiveWorkbook.SaveAs Filename:=Save_File, FileFormat:=xlOpenXMLWorkbook

  ' ファイルを閉じる
  ActiveWorkbook.Close

End Sun

実行後、コピー元のシートも元Excel側に残ります。コメント文に処理の詳細は書いていますが、「※」部分についての補足説明を入れておきます。

※1複製したいシート名を指定
※2保存ダイアログに表示される初期のファイル名

使用例

Sheet1,Sheet2,Sheet3が存在するExcelファイルでSheet2を別ファイルで名前を付けて保存するという使用例です。

' 特定シートを別ファイルで名前を付けて保存する

' 別ファイルに出力するシートを選択
Sheets("Sheet2").Select

' 名前を付けて保存するためにダイアログ表示
Save_File = Application.GetSaveAsFilename(InitialFileName:="名前を指定してください", _
FileFilter:="Excelファイル,*.xlsx,すべてのファイル,*.*")

' シートのコピー、ファイル保存
Sheets("Sheet2").Copy
ActiveWorkbook.SaveAs Filename:=Save_File, FileFormat:=xlOpenXMLWorkbook

' ファイルを閉じる
ActiveWorkbook.Close

また、名前を付けて保存ダイアログに指定したテキストは「名前を指定してください」になりますが、実行時は以下のようなダイアログとなります。

名前を付けて保存ダイアログ

おまけ:ファイル名に今日の年月日を付与する場合

名前を付けてファイルを保存するときに、今日の日付を付与したいというケースがありますよね。そういう場合は、以下のように年・月・日を取得して、保存ダイアログに表示される初期のファイル名に入れ込んであげればOKです。

サンプルマクロは以下です。今日の年・月・日を取得後に、「Save_File」の部分で、ファイル名の初期値を「"ファイル名" & yy & mm & dd」とすることで入れ込んでいます。

    ' ファイル名に仕様する情報を取得:今日の年月日
    tmp = Date
    yy = Format(tmp, "yyyy")
    mm = Format(tmp, "mm")
    dd = Format(tmp, "dd")
    
    ' 保存ダイアログ表示
    Save_File = Application.GetSaveAsFilename(InitialFileName:="ファイル名" & yy & mm & dd, _
         FileFilter:="Excelファイル,*.xlsx,すべてのファイル,*.*")

注意点:未実装部分

名前を付けて保存するダイアログで、「保存」ボタンでなく「キャンセル」ボタンを押すと以下のファイルが出来てしまいます。

FALSE.xslx

キャンセルボタン押下時の実装が必要です。申し訳ないですが、今回の記事ではこの例外処理をかけておりませんので、その点はご了承ください。

さいごに

いかがだったでしょうか。マクロ作りの参考に少しでもなれば幸いです。それでは、また!