Excelファイルの拡張子を変更する方法

ファイル

はじめに

 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プログラム部分は消去されます。

タイトルとURLをコピーしました