エクセルVBA、シートをブックから抜き出して名前を付けて保存する方法を説明します。
名付けにはSaveAs、シートの取り出しにはMoveメソッドを使っていきます。
こんにちは、じゅんぱ店長(@junpa33)です。
今回の名付けVBAコードは、少々面倒な作業を簡単に熟せるようにするというものです。
ブック内には色々なシートがあります。
時々の業務で「このシートだけ外して別ブックにしたい!」という願望の元、コピペ作業に励むことがあるでしょう。
いわばエクセルブックを資料バインダーと見立てるようなやり方。
コピペ作業は、簡単です、でも少々(コード設計的に)面倒くさくもあります。
このの解説記事では、サクッとMoveメソッドを使って、パッパッと作業を済ませてしまいます。
- ブックの知識
- ブックの操作
- ワークブックを開くOpenメソッドの書き方 Excelマクロ
- VBA ブック名の取得法4つの解決策を詳しく解説
- VBA 開く,保存,閉じる,作成,削除 ブックの存在確認後のコード記述
- ファイルの保存に年月日+時刻を付けて管理する
- VBA 保存先フォルダをダイアログ指定で変数化
- 新規ブック5つの保存法。AddとSaveAsの使い方がわかる
- セル値を使いブック名として保存。統一フォームに有用
- VBA シートをブックから切り出し名付け保存する
- ブック名に作成者名を付加。 プロパティ変更とファイル保存
- 不要フォルダを削除する2種類のコードの作成
- 要らないファイルを自動削除するコードの作成
- ワークブックを閉じる12のパターン使い分け VBA最速理解
- ピンポイントでファイルを完全に削除するマクロ(コピペ可)
コンテンツ
シートをブックから取り出し別ブックとして使う 例題提示
どういう時に使うのかイメージが湧かない方もいると思いますので、例題を使います。
ファイル「Book1.xlsm」に2018年3月1日(金)、3月2日(土)、3月5日(月)の書籍発売の資料が各シート毎にあります。
この資料の内2018年3月2日(土)の資料データだけ今回は必要です。
提出のため別ファイル(エクセルブック)として切り離して使いたいです。
この記事で紹介するVBAコードを使えば、マクロ一発このようになります。
目的のシートだけが取り出され、そのシート名でファイル化(独立したブック)しています。
切り出したシートを別ブックにそのシート名で保存するVBA
それでは進行の順番にVBAコードの説明です。
記述している全VBAコード
Sub シート名でブック保存2()
Dim ASName, BkName As Variant
ASName = ActiveSheet.Name
ActiveSheet.Move
Const FFa As String = "Excel ブック,*.xlsx,Excel マクロ有効ブック, " & _
"*.xlsm,"
Const FFb As String = "Excelバイナリブック,*.xlsb," & _
"Excel97-2003ブック,*.xls,"
Const FFc As String = "CSVカンマ区切り,*.csv,すべてのファイル,*.*"
ChDir "C:\Users\●●●\Documents\●●●\●●●\●●●" & _
"\VBAブックの名前を付けて保存\シート名で名付ける"
BkName = Application.GetSaveAsFilename(InitialFileName:=ASName, _
filefilter:=FFa & FFb & FFc, FilterIndex:=1, _
Title:="名前の変更保存")
If BkName = "False" Then
Exit Sub
End If
ActiveWorkbook.SaveAs BkName
End Sub
これだけのコードです。コピペでコードを作ると、ブックを開けたり閉めたりと面倒になりますが、これだけです。
VBAコードの解説
目的のシートを移動させるVBA
元データのあるエクセルブックから、必要なシートを取り出すには、「Moveメソッド」を応用します。
応用と言っても、Moveの特性で、以下の様に記述すると、自動的に新規ブックを作成しそのインデックス番号1のシートにその移動したシートを配置します。(この時デフォルトで、その移動したシートのみ作成されます。)
Sub 新規BOOKへ移転()
ActiveSheet.Move
End Sub
このMoveメソッドは「移動させる」ので、移動した後の元のブックはこのようになっています。(移動したシートは無くなっています。)
移動させたシート名をブック名とするVBA
名前をブック名にするには、先にシート名から名前を抽出しておかないといけません。
で、その名前をブック名として保存するわけですが、注意点として
- 新規ブックに保存する場合、ブック名の拡張子を省略した場合は、デフォルトの.xlsxが当てられる。
- 名前を付けて保存の場合はフルネーム(FullName)が必要でパス部分を省略した場合は、カレントディレクトリに保存される。
Sub シート名でブック保存1()
Dim ASName As Variant
ASName = ActiveSheet.Name
ActiveSheet.Move
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ASName
End Sub
このコードを実行した場合、
まず、 ASName でシート名を取得して
そのシートを新規ブックに分離移動します。
そして、アクティブブック(新規ブックのこと)を、このマクロを実行しているブックと同じフォルダに、ASNameという名前でブックを保存します。
保存先をその都度選択できるようにするVBA
保存先のフォルダをその都度選べる様にするには、定番の「名前を付けて保存ダイアログ」を表示してフォルダ選択ファイル保存実行を行うVBAコードを組んでいきます。
この「GetSaveAsFilename」は非常に便利なので是非覚えておきましょう。
Sub シート名でブック保存2()
Dim ASName, BkName As Variant
ASName = ActiveSheet.Name
ActiveSheet.Move
Const FFa As String = "Excel ブック,*.xlsx,Excel マクロ有効ブック, " & _
"*.xlsm,"
Const FFb As String = "Excelバイナリブック,*.xlsb," & _
"Excel97-2003ブック,*.xls,"
Const FFc As String = "CSVカンマ区切り,*.csv,すべてのファイル,*.*"
ChDir "C:\Users\●●●\Documents\●●●\●●●\●●●" & _
"\VBAブックの名前を付けて保存\セル値で名付ける"
BkName = Application.GetSaveAsFilename(InitialFileName:=ASName, _
filefilter:=FFa & FFb & FFc, FilterIndex:=1, _
Title:="名前の変更保存")
If BkName = "False" Then
Exit Sub
End If
ActiveWorkbook.SaveAs BkName
End Sub
マクロ(VBAコード)保存場所
このマクロの保存場所は、マクロ付きエクセルブックであればどこでも大丈夫です。
ただしこのマクロを利用する時には、その保存したブックを ” いちいち ” 開いておく必要があります。
なので、個人用マクロブックに保存しておくことをオススメします。
まとめ
シート名をブック名として保存するケースは、意外とあります。
今回の例示でイメージは掴んでいただいたと思いますが、最後にもう一つ・・・
シート名が重複する場合です。
御存じのように、シート名はブック内では重複が許されませんが、他ブックに同じシート名があっても全然大丈夫です。
なので、シート名をブック名として取り出した場合に重複名となる可能性もあります。
ブック名の重複チェックのVBAコードを配置すればよいのですが、そもそも重複しないような名前で保存するという方法の方が楽、ということでもあります。
そんな場合は、ファイルの保存に年月日時刻を付加する方法もあります。
詳しくは別記事で紹介します。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。