Excelブック内の全シートを,1ファイルずつに分けて一括保存するバッチ (シート単位で自動ファイル分割し,1シートごとに一斉ファイル出力)
単一のExcelブック内に,大量のワークシートが存在するとする。
シートがあまりにも多すぎて,ブックのサイズが何メガにも膨れ上がる。
そして,「もはや1ファイルで管理しきれない。
シートごとに別ファイルに分けよう」となる。
そういう場合,各シートを
「自動的に個別のファイルに分けてくれる」ツールがあると便利だ。
100シートあれば,100個のファイルに分割してくれる・・・というわけ。
下記のバッチで,すぐに実行できる。
以下のコードをメモ帳にコピペし,「シートごとに分割.bat」で保存。
そして,シートごとに分割したいExcelファイルを
このバッチにドロップすればよい。
@if(0)==(0) ECHO OFF cscript.exe //nologo //E:JScript "%~f0" %* @pause GOTO :EOF @end /* ドロップしたExcelファイルの全シートを, 1シートずつ個別のファイルに保存し直すバッチ */ // 引数取得 if( WScript.Arguments.length == 0 ) { WScript.Echo("引数がありません。"); WScript.Quit(); } var filename = WScript.Arguments.Unnamed(0); var ws = WScript.CreateObject("WScript.Shell"); var cwd = ws.CurrentDirectory; //var filepath = cwd + "\\" + filename; var filepath = filename; // Excelブックを開く var excel = WScript.CreateObject("Excel.Application"); excel.Visible = true; excel.Workbooks.Open( filepath ); var book = excel.Workbooks( excel.Workbooks.Count ); // ワークブックを取得 var xlMaximized = -4137; excel.ActiveWindow.WindowState = xlMaximized; // 最大化 // 全シートをスキャンして,シート名を調査 var sheets = book.WorkSheets; var e = new Enumerator( sheets ); var arr_sheets = []; for( ; ! e.atEnd() ; e.moveNext() ) { // シートを取得 var sheet = e.item(); // 保持 arr_sheets.push( sheet ); } // 取得済みの全シートについて for( var i = 0; i < arr_sheets.length; i ++ ){ // 新規ワークブックを作成 excel.Workbooks.Add(); var new_book = excel.Workbooks( excel.Workbooks.Count ); // ワークブックを取得 // シートを先頭にコピー挿入 //arr_sheets[i].Copy( new_book.Worksheets( new_book.Worksheets.Count ) ); arr_sheets[i].Copy( new_book.Worksheets( 1 ) ); // 不要シートを消す(Sheet1~Sheet3) new_book.Worksheets( 4 ).Delete(); new_book.Worksheets( 3 ).Delete(); new_book.Worksheets( 2 ).Delete(); // 新規ファイル保存。ファイル名はシート名 var new_filepath = cwd + "\\" + arr_sheets[i].Name + ".xlsx"; WScript.Echo( "新規ブックのパス:" + new_filepath ); new_book.SaveAs( new_filepath ); // 閉じる new_book.Close(); }
このソースは,MS-DOS(コマンドプロンプト)バッチの中に,WSH/JScriptのコードを埋め込んで記述してある。
Excelファイルをドロップすると,バッチの存在するフォルダ内に,
各シートごとに分割されたエクセルが一斉に生成・保存される。
参考にしたページ:
JScript/WSH で,Excelファイルを読み書きしよう
http://language-and-engineering.hatenablog.jp/entry/20090717/p1
Excelブックの「シート目次」を,自動的に作成するバッチ (WSH/JScriptで,各シートへのリンク付きの目次を自動生成)
http://language-and-engineering.hatenablog.jp/entry/20110921/p1
BATとWSHのコードを1ファイルに混在させるためのshebang記法(複雑なバッチを1ファイルで実現)
http://computer-technology.hateblo.jp/entry/20131025/p1
関連する記事:
WSH/JScriptで,Excelファイルを読み書きする際のテンプレート (シート上の全行を読み書きするコードのひな型) - 主に言語とシステム開発に関して
http://language-and-engineering.hatenablog.jp/entry/20140214/p1
ドキュメント作成を楽にするための,Excel VBA 頻出8パターン - 主に言語とシステム開発に関して
http://language-and-engineering.hatenablog.jp/entry/20090401/p1
Excelシートを読み取って,INSERT文SQLを生成するバッチ (Kingsoft SpreadsheetをWSH/JScriptで自動操作) - 主に言語とシステム開発に関して
http://language-and-engineering.hatenablog.jp/entry/20121218/p1
Excel VBAのマクロを,複数のブックから利用する方法 (標準モジュールをブックの外部で管理して,共通ライブラリとして読み込み) - 主に言語とシステム開発に関して
http://language-and-engineering.hatenablog.jp/entry/20090731/p1