VBA備忘録

VBAソースの備忘録。当面Excelのみ。

Excelファイルをcsvデータにして保存

Excelファイルをcsvデータとして保存する

 

前提条件

  • 現在開いているExcelファイル、シートが対象
  • 同フォルダに保存
  • Excelファイルとcsvデータのファイル名は同一(拡張子のみ異なる)

 

問題点

  • csvに保存した瞬間、開いていたExcelファイルがcsvファイルにすり替わってしまうので、その後Excelファイル形式で保存できない(⇒データ損失に繋がる)

 

以上の点を踏まえた仕様

  • 関数はPERSONAL.XLSB上に作成し、どのExcelファイルからも汎用的に呼び出せるようにする
  • 元のExcelファイルとは別領域に保存用ファイルを作成し、そのファイルをcsvファイルとして保存することで、元データはそのまま存在し続けるようにする

 

Sub SaveCopyCSV()
    
    '----FileSystemObjectを使用する
    '----参照設定:Microsoft Scripting Runtimeのチェックを忘れずに
    Dim objFSO As New FileSystemObject
    
    '保存対象ActiveBookをobjectに格納
    Dim wbTargetBook As Workbook
    Set wbTargetBook = ActiveWorkbook
    
    '保存ファイル名
    Dim strSaveFile As String
    
    '保存ファイル名 = 現在のフォルダ+現在のファイル名+拡張子csv
    strSaveFile = wbTargetBook.Path & "\" & objFSO.GetBaseName(wbTargetBook.Name) & ".csv"
     
    '元ファイルをTmpファイルとしてコピーする(これ以後TmpファイルがActiveWorkBook)
    wbTargetBook.ActiveSheet.Copy
    
    'CSVファイルにして保存、csvファイルは保存後閉じる
    ActiveWorkbook.SaveAs Filename:=strSaveFile, FileFormat:=xlCSV
    ActiveWorkbook.Close
    
    '元ファイルをActiveに戻す
    wbTargetBook.Activate

End Sub

 

下記フォルダ内のTest.xlsxファイル

ファイルの中身

マクロを呼び出す PERSONAL.XLSBのSaveCopyCSV

実行後、同フォルダにcsvファイルが作成されている

内容

実行後、元ファイルはActiveに戻っている