【VBA】Excelの拡張子を一括変換するマクロ
◇前置き
Excelの拡張子(形式)に種類があることは、ご存じですか?
現行の最も無難な拡張子は「.xlsx」(2007以降)です。
時点でよく使われるのは「.xlsm」(マクロ有効ブック)でしょうか。
そして問題なのが「.xls」(97-2003互換)です。
一言で言うと、「古い拡張子」ですね。
「.xls」を「.xlsx」に変換するだけでファイル容量が小さくなります。
また「.xls」のままPowerPlatformに組み込むと、うまく動かないことがあったりします。
基本的に「.xlsx」に変換することにはメリットしかありません。
メリットがあるのは分かっていても、1つ1つ変換するのが面倒くさくて、なかなか手を付ける気にならないのが実情ではないでしょうか。
そこで今回は、フォルダ内の「.xls」をすべて「.xlsx」または「.xlsm」に一括変換するマクロを紹介します。
◇概要
こんな感じのExcelを用意しました。
C3にフォルダパスを入力して、実行ボタンでマクロを実行します。
◇ソースコード
ソースコードはこんな感じです。
Sub Exchange_File() Dim i As Long Dim Array1() As String Dim FileName As String Dim FolderPath As String Dim ThisBook As String FolderPath = Range("C3") & "\" FileName = Dir(FolderPath & "*.xls") i = 0 Do While FileName <> "" If LCase(Right(FileName, 4)) = ".xls" Then ReDim Preserve Array1(i) Array1(i) = FileName i = i + 1 End If FileName = Dir() Loop For i = 0 To UBound(Array1) With Workbooks.Open(FolderPath & Array1(i)) ThisBook = Left(Array1(i), InStrRev(Array1(i), ".") - 1) If .HasVBProject Then If Dir(FolderPath & ThisBook & ".xlsm") = "" Then .SaveAs FileName:=FolderPath & ThisBook & ".xlsm", _ FileFormat:=xlOpenXMLWorkbookMacroEnabled Else .SaveAs FileName:=FolderPath & ThisBook & "_" & Format(Now(), "yyyymmddhhmmss") & ".xlsm", _ FileFormat:=xlOpenXMLWorkbookMacroEnabled End If Else If Dir(FolderPath & ThisBook & ".xlsx") = "" Then .SaveAs FileName:=FolderPath & ThisBook & ".xlsx", _ FileFormat:=xlWorkbookDefault Else .SaveAs FileName:=FolderPath & ThisBook & "_" & Format(Now(), "yyyymmddhhmmss") & ".xlsx", _ FileFormat:=xlWorkbookDefault End If End If .Close savechanges:=False End With Next MsgBox (i & "件のファイル拡張子を変更しました。") End Sub
◇使い方
実際に使ってみましょう。
今回はデスクトップに「Excel拡張子変換」というフォルダを用意しました。
中身はこんな感じです。
マクロありの「.xls」、マクロ無しの「.xls」、「.xlsx」の3種類のファイルが入っています。
早速実行してみると・・・・
3つあるファイルのうち2つが処理されました。
フォルダの中身を見てみると・・・・
ファイルが2つ増えていますね。
(※一応変換前のファイルも残す仕様にしてあります。)
「.xlsx」は変換の必要がないので、処理されません。
「.xls」はマクロあり→「.xlsm」、マクロ無し→「.xlsx」にそれぞれ変換されます。
◇最後に
今回は、変換前を残す仕様にしましたが、変換後に古い方を削除するようにしたり、そもそも変換後のファイルを別フォルダに出力するようにしたりすると、より使いやすくなりますね。
また、変換後のファイルと同じ名前のファイルが存在する時は、「元の名前+今日の日付」で保存するようにしてあります。(上書きしちゃうと元に戻せませんからね。)
適当にアレンジしながら使ってもらえればと思います。