記事の詳細
Excelでシート毎に別ファイルにして保存する方法
先日、お客様より「Excelファイルに50位シートがあって、それらのシートをそれぞれ別のファイルにして保存をしたい」という相談をいただきました。
Excelにはそのような機能はありません。このようなときはVBAを使ってプログラミングすることで実現します。
Excel初心者でも、以下の手順通りに操作すればきっとできると思います。
次のようなExcelファイルがデスクトップに保存されているとします。
このファイルの中の3つのシートをそれぞれ別ファイルにして自動的に保存してくれるマクロを組み込んでみます。
それでは、操作です。
今回のブログの見出しはコチラです!
ステップ1 まずは「開発」タブを出しましょう
以下の図のように、[開発]タブが表示されるようにしましょう。
もし、すでに表示されているのであれば、この操作は不要です。
[ファイル]をクリックします。
[オプション]をクリックします。
[リボンのユーザー設定]をクリックし、「開発」をクリックしてチェックONにします。
[OK]をクリックします。
[開発]タブが表示されました。
ステップ2 VBAを作る
[開発]タブが表示されたら、プログラミングコードを記述していきます。
[開発]タブをクリックし[Visual Basic]をクリックします。
以下のような画面が表示されます。(Visual Basic Editorと言います)
[挿入]→[標準モジュール]をクリックします。
標準モジュール「Module1」が表示され、その内容が右側に表示されます。
現在は何もかかれていない真っ白な状態です。
次のコードをコピーします
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub SheetSave() Dim i As Integer Dim wb1 As Workbook Dim SheetCnt As Integer Set wb1 = ActiveWorkbook SheetCnt = wb1.Sheets.Count For i = 1 To SheetCnt Workbooks.Add.SaveAs Filename:="ファイル" & i & ".xls" wb1.Worksheets(i).Copy before:=Workbooks("ファイル" & i & ".xls").Worksheets(1) Workbooks("ファイル" & i & ".xls").Worksheets(1).Name = "シート" & i Next i End Sub |
Module1にコードを貼り付けます。
ステップ3 マクロ有効ブックとして保存する
VBAのコードを含むExcelファイルは「マクロ有効ブック」として保存する必要があります。
Excelのマークのボタンをクリックします。
Excelの画面に戻ってきます。
[ファイル]をクリックします。
[名前を付けて保存]→[コンピュータ]→[デスクトップ]をクリックします。
ファイルの種類を「Excel マクロ有効ブック」に設定します。
[保存]をクリックします。
ステップ4 マクロを実行
いよいよ最後のステップです。
作成したマクロを実行することで、複数シートの内容が自動的に別ファイルになってデスクトップにどんどん保存されていきます。
[開発]タブをクリックし[マクロ]をクリックします。
「Sheet Save」をクリックし[実行]をクリックします。
下図のように、Sheet1~Sheet3の内容がそれぞれ別ファイルになって保存されました。
ご質問のあったシート名をそのままファイル名にする方法も紹介しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub SheetSave() Dim i As Integer Dim wb1 As Workbook Dim SheetCnt As Integer Set wb1 = ActiveWorkbook SheetCnt = wb1.Sheets.Count For i = 1 To SheetCnt Workbooks.Add.SaveAs Filename:=wb1.Worksheets(i).Name & ".xlsx" wb1.Worksheets(i).Copy before:=Workbooks(wb1.Worksheets(i).Name & ".xlsx").Worksheets(1) Next i End Sub |
いかがでしたか?
エクセルの標準機能に無いものは自分で作ることもできます。
プログラミングができると仕事の効率も幅も広がりそうですね。
相模原市産業会館パソコン教室でお待ちしております。
相模原市産業会館パソコン研修では「アットホーム」な雰囲気でパソコンを分かるまで学ぶことができます。
月曜日から金曜日まで毎日無料体験を開始しております。
コメント
この記事へのトラックバックはありません。
教えて欲しい、という内容でもよろしいでしょうか?
エクセル2010でデータベースを作成し、そのデータを拡張表に出力したいと考えています。
1つのエクセルファイルの1つのシートをデータベースにして、
複数のシートから、帳票毎にデータを抽出して印刷したいのです。
VBAは判っていませんが、なんとか作成できないかと・・・。
1つ目として、マクロの記録は作成できますので、
各シート毎にそれぞれで友好なマクロを作成する方法を教えて頂けないでしょうか。
はな 様
コメントをありがとうございます。
1つのエクセルファイル内に複数のシートがあり、
そのうちの一つがデータベースの役割をしている。
これを「データベースシート」と便宜上呼びます。
その他のシートは印刷用であり、データベースシートからデータを参照して、
印刷を実行するという形でしょうか。
おそらく、ご質問の内容ですと各印刷用シートにおいては
VLOOKUP関数を使用してデータベースシートの内容を参照して、
印刷を実行することになります。
さて、ご質問の件ですが、
マクロは通常、全シートから呼び出すことができます。
問題は呼び出し元のシートが何か?によって動作が変わることです。
例えば
1.A1に「あああ」と入力
2.印刷を実行
上記のマクロを作成した場合、Sheet1で実行すれば、
Sheet1のA1に「あああ」と入力後に印刷が実行されます。
Sheet2で実行すれば
Sheet2のA1に「あああ」と入力後に印刷が実行されます。
もし、どのシートから実行されても
Sheet1に「あああ」と入力後に印刷が実行されるようにするには、
「Sheet1を選択する」という動作をマクロの最初に含める必要があります。
◆記録手順
1.「Sheet1」以外を選択しておく
2.マクロの記録を開始する
3.「Sheet1」を選択する
4.セルA1に「あああ」と入力する
5.印刷を実行する
6.マクロの記録を修了する
もし、その他何かご質問がありましたらお願いいたします。
有難う御座います。
説明が不十分で、意図が思う様に伝わらなかったようです。
DBデータシートにデータを蓄積後、
そのデータシートから、必要情報を抽出して印刷したいのです。
抽出するシートは、印刷フォーマットの分だけ用意します。
それがシート毎にできると良いかな?
と思った次第です。
と言うのは、マクロボタンを用意してトライしていますが、新たにマクロを記録して確認すると、
前に作成したマクロボタンをクリックするとエラーになってしまいます。
この事より、マクロをシート毎に分けたほうが良いのではないかと思いました。
複数のシートから、データベースよりデータを抽出したいのです。
上手い方法があるかどうかアドバイスを頂けると有難いです。
VBAコード中の変数iの定義が抜け落ちているかと思われます。
コメントありがとうございます。
変数宣言を追加しておきました!
Excelでシート毎に別ファイルにして保存する方法」を拝見して挑戦してみました
マクロをコピーして実行をするとエラーが出てしまいます。
実行時エラー1004 と表示されます。
勉強不足で何が何だか解りません。
お手数ですがご教示お願い致します。
コメントありがとうございます。
1004のエラーが発生するのは以下の4つのパターンに分類されます。
1 存在しないファイルを開こうとしたとき
2 Cellsプロパティの選択範囲に値を入れ忘れてしまったとき
3 コピー元とコピー先のセル範囲が違うとき
4 アクティブになっていないシートのセルを選択したとき
今回の場合、1が原因である可能性が高いと考えられます。
マクロを記述した後、保存して、Excelファイルをファイルの種類を「Excel マクロ有効ブック」に設定してから保存しておりますでしょうか?
リンクしました。ありがとうございました。
https://ja.stackoverflow.com/questions/62267/excelでページ毎に別ファイルにして保存する方法を探しています
記事の通り成功しました。
唯、コピーして開いたファイルが閉じれてないので、ファイル数が多くなると手動で閉じなければならないのは不便に思いました。
出来ましたら、
閉じるところまでと、ファイル補間場所を指定できる記述があれば教えてください。
よろしくお願いします。
コメントありがとうございます。
コピーして開いたファイルを閉じる方法はちょっと難しいですね。。。
開いたエクセルファイルを一気に閉じる方法ですが、タスクバーでエクセルのアイコン上で右クリックすると、一番下に「すべてのウィンドウを閉じる」という選択肢がありますので、それで一気に閉じることができますので、お試しください。
エクセルに限らず同じアプリをたくさん開いている時には便利に使えます。
お返事ありがとうございます。
すいませんメールでのご回答かと思い気づくのが遅れました。
あと、説明不足でした。
そちらの方法でやっていたのですが一ブック閉じるたびに
保存の有無を問うwindow が表示され、結局一ブックずつ
閉じなくてはなりません。
やはり対応できる記述はないのでしょうか?
https://excel-ubara.com/excelvba5/EXCELVBA217.html
他のブックを開いて閉じるVBAのサンプルとして、上記をお試しいただけるとできると思います。
大変申し訳ありませんが、弊社が現在ステイホーム休業中のため、対応が十分にできず申し訳ありません。
どうぞよろしくお願いいたします。