- ベストアンサー
VBA SaveAsでワークシートを指定して保存する方法
- VBAのSaveAsメソッドを使用して、ワークシートを指定して保存する方法について解説します。
- 以下のVBAコードを使用することで、一番左のシートのみを指定したファイル名で保存することができます。
- SaveAsメソッド自体は、コピーされたシートのみを保存することを前提としています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ヘルプで Worksheet.Copy メソッドを見ると、「引数 Before と引数 After の両方を省略した場合は、新規ブックが自動的に作成され、シートはそのブック内にコピーされます」との説明が書いてあります。つまり「Sheets(1).Select」の行があるコードの場合、その 2 行後の ActiveWorkbook とは 新しく作製されたブックのことであって、元のブックではありません。したがって当然、1 シートしか含まれません。before か after が書いてあれば、新規ブックはできないので元のブックが ActiveWorkbook であり、複数シートが保存ファイルに入ります。 ところで、Workbook.SaveAs によく似たものとして、Worksheet.SaveAs というのがあります。元ファイルに複数シートが含まれている場合、Worksheet.SaveAs のほうを使っても、全シートが含まれる形でファイルが保存されます。1 シートのみとはなりません。 1 シートのみ保存するには、質問文のように Worksheet.Copy で新規ブックを作ってから、それを保存します。 そうなると Workbook.SaveAs と Worksheet.SaveAs では何が違うのかというと、それほど違いませんので、どちらでも構わないケースも多いです。それぞれのヘルプを見ると、前者は「ブックへの」変更を保存するとしているのに対し、後者は「グラフまたはワークシートへの」変更を保存するときに使うとなっています。また、前者のほうが引数が 2 つ多く、「AccessMode」というのと「ConflictResolution」というのを指定することが可能になっています。
お礼
ありがとうございます。 新規ブックを開くのはworksheet.copyで既に行われていたのですね。デバッグモードで確認すると確かにそうなってました。私はどこかバッファにコピーされ、次行で(開かず)保存されると思ってました。