はじめに
Excel ファイルの拡張子にはいくつかの種類がありますが、これらをエクスプローラーなどで勝手に変更してしまうと開けなくなってしまう場合があります。
安全に拡張子を変更するには、一旦 Excel で開いて「名前を付けて保存」で変更したい拡張子にして保存する必要があります。
以前、アクティブブック (xlsm) をxlsxファイルに書き出すプログラムを紹介しました。
・xlsxファイルに書き出す
今回は外部にある Excel ファイルの拡張子を変更するプログラムを紹介します。
拡張子を変更したい Excel ファイルが複数ある場合に、VBAを使って外部からそれらのファイルを変更する事ができるので便利だと思います。
尚、今回はExcelでよく使われる、xlsx, xlsm, xls を対象としています。拡張子ごとに3つのプログラムに分けてみました。
拡張子を xlsx に変更するプログラム
以下のプログラムは、xls, xlsm のファイルを xlsx に変更します。
引数の excelFile はフルパスを指定してください。
最初にDir関数でファイルが存在するか確認します。
次に拡張子を xlsx にしたパスを生成します。(newPath)
一旦ブックを開き、SaveAs で名前を変更して保存します。
これで開いたブックは xlsx に変更できたので、最後にブックを閉じます。
アラート表示をOFFにして、SaveAs を実行しますので、同じ名前のファイルがあれば上書きされます。
'Excelファイルをxlsxに変更して同じフォルダに保存
'(excelFileはフルパスを指定する)
Sub changeExtToXLSX(excelFile As String)
Dim newPath As String
If Dir(excelFile) = "" Then Exit Sub
If Split(excelFile, ".")(1) = "xls" Then
newPath = Replace(excelFile, ".xls", ".xlsx")
ElseIf Split(excelFile, ".")(1) = "xlsm" Then
newPath = Replace(excelFile, ".xlsm", ".xlsx")
Else
MsgBox "拡張子を確認してください。"
Exit Sub
End If
Workbooks.Open excelFile 'ブックを開く
Application.DisplayAlerts = False 'アラート表示OFF
ActiveWorkbook.SaveAs newPath, xlOpenXMLWorkbook 'xlsx形式で保存
Application.DisplayAlerts = True 'アラート表示ON
ActiveWorkbook.Close 'ブックを閉じる
End Sub
上のプログラムを実行するには以下のようにします。
xlsm か、xls ファイルを指定してください。
Sub testCode()
changeExtToXLSX "C:\temp\Book2.xls"
End Sub
拡張子を xlsm に変更するプログラム
以下のプログラムは、xls, xlsx のファイルを xlsm に変更します。
引数の excelFile はフルパスを指定してください。
プログラムの解説は省略します。
'xlsmに変更して同じフォルダに保存
'(excelFileはフルパスを指定する)
Sub changeExtToXLSM(excelFile As String)
Dim newPath As String
If Dir(excelFile) = "" Then Exit Sub
If Split(excelFile, ".")(1) = "xls" Then
newPath = Replace(excelFile, ".xls", ".xlsm")
ElseIf Split(excelFile, ".")(1) = "xlsx" Then
newPath = Replace(excelFile, ".xlsx", ".xlsm")
Else
MsgBox "拡張子を確認してください。"
Exit Sub
End If
Workbooks.Open excelFile 'ブックを開く
Application.DisplayAlerts = False 'アラート表示OFF
ActiveWorkbook.SaveAs newPath, xlOpenXMLWorkbookMacroEnabled 'xlsm形式で保存
Application.DisplayAlerts = True 'アラート表示ON
ActiveWorkbook.Close 'ブックを閉じる
End Sub
上のプログラムを実行するには以下のようにします。
xlsx か、xls ファイルを指定してください。
Sub testCode2()
changeExtToXLSM "C:\temp\Book2.xls"
End Sub
拡張子を xls に変更するプログラム
以下のプログラムは、xlsx, xlsm のファイルを xls に変更します。
引数の excelFile はフルパスを指定してください。
プログラムの解説は省略します。
'xlsに変更して同じフォルダに保存
'(excelFileはフルパスを指定する)
Sub changeExtToXLS(excelFile As String)
Dim newPath As String
If Dir(excelFile) = "" Then Exit Sub
If Split(excelFile, ".")(1) = "xlsx" Then
newPath = Replace(excelFile, ".xlsx", ".xls")
ElseIf Split(excelFile, ".")(1) = "xlsm" Then
newPath = Replace(excelFile, ".xlsm", ".xls")
Else
MsgBox "拡張子を確認してください。"
Exit Sub
End If
Workbooks.Open excelFile 'ブックを開く
Application.DisplayAlerts = False 'アラート表示OFF
ActiveWorkbook.SaveAs newPath, xlExcel9795 'xls形式で保存
Application.DisplayAlerts = True 'アラート表示ON
ActiveWorkbook.Close 'ブックを閉じる
End Sub
上のプログラムを実行するには以下のようにします。
xlsx か、xlsm ファイルを指定してください。
Sub testCode3()
changeExtToXLSM "C:\temp\Book2.xlsx"
End Sub
まとめ
Excelファイルを、xlsx, xlsm, xls にそれぞれ変換するプログラムを紹介しました。
部品化しましたので、testCode のように利用できます。
尚、それぞれの拡張子には全て意味があります。xls(古いバージョン)に書き換える場合などは正しく機能しない場合がありますので注意してください。
また、xlsm を xlsx に書き換えた場合VBAプログラム部分は消去されます。