xlsをxlsxとxlsmに変換するマクロ

Excel2003まではxlsの拡張子でしたが、Excel2007からはマクロを含まないブックはxlsxになり、マクロを含む場合はxlsmになりました。

このxls形式ファイルをxlsxとxlsmに変換するマクロを紹介します。

ここでは対象の1ファイルを変換する単純な方法と、指定フォルダ配下のサブフォルダも含む全てのxlsファイルを変換する方法の2つを紹介します。


1. 対象のxlsファイルをxlsxまたはxlsmに変換するマクロ

以下のマクロは引数で指定したxlsファイルをxlsxまたはxlsmファイルに変換します。

変換処理の重要な部分は19行目から25行目の判定です。HasVBProject メソッドでVBAのコードを含んでいるかどうかが分かります。なお、HasVBProject メソッドはExcel2003までのVBAには存在しません。

ここでxlsxとなるかxlsmとなるかが分かれます。

36行目で変換後のファイルを保存します。引数には事前に判定済みの変換後のファイル名(Filename)とファイル形式(FileFormat)を指定します。

VBAのコードをもっていない場合にフォーマットとしてXlFileFormat列挙型のxlOpenXMLWorkbook(Excelブック)を指定していますが、これはxlWorkbookDefault(ブックの既定値)と定数値は51で同じです。

変換前のxlsファイルが不要な場合は40行目のコメントをはずしてください。

上の関数の使い方の例です。xlsファイルのフルパスを渡すだけですね。



2. 指定フォルダ配下のサブフォルダの全xlsファイルをxlsxまたはxlsmに変換するマクロ

指定フォルダ配下の全xlsファイルに対して実施します。再帰による処理を行い全てのサブフォルダに対して処理を行うためにFileSystemObjectクラスを利用しています。

変換処理は上のxlsTo2007関数を使います。21行目の部分です。

以下のコードではFileSystemObjectを参照設定した状態になっていることが前提になります。

そのため、VBA画面のツールメニュー→参照設定を選び、Microsoft Scripting Runtimeにチェックする必要があります。

上の関数の使い方の例です。変換したいxlsファイルのルートフォルダを渡します。