【VBA】シート上の指定した範囲をCSVファイルへ出力する【高速】

VBAで
 ・シート上の指定した範囲を
 ・CSVファイルへ出力
できます!

ここでは私が
 ・1番シンプルと考える方法
を記載します!
※実現方法は複数あります。
※ひとまずシンプルな方法を知っておけばよいです。

またこの方法は
 ・1度にまるっと出力する方法であるため
 ・高速にCSVファイルへ出力できます!
※繰り返し処理により1行ずつ出力するのではないため、高速に出力できます。
※他サイトに記載の方法は、繰り返し処理より1行ずつ出力しています。
※そのため他サイトに記載の方法では時間が掛かってしまいます。

PR

VBAコード

ここでは例として、
 ・シート「sample」のセル「B2」から続く一連の範囲
 ・デスクトップ配下へファイル「sample.csv」として出力
します。

シート「sample」のセル「B2」から続く一連の範囲
シート「sample」のセル「B2」から続く一連の範囲
Option Explicit

Sub sample()
    
    Dim csvFile As String
    Dim targetRange As Range
    Dim wb As Workbook
    Dim fso As Object
    
    '出力するCSVファイルを指定
    csvFile = "C:\Users\user\Desktop\sample.csv"
    
    'CSVファイルへ出力する範囲を指定 ※例としてシート「sample」のセル「B2」から続く一連の範囲を指定
    Set targetRange = Worksheets("sample").Range("B2").CurrentRegion
    
    '新規ブックを作成
    Set wb = Workbooks.Add
    
    'CSVファイルへ出力する範囲を新規ブックへコピー
    targetRange.Copy wb.Worksheets(1).Range("A1")
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    '出力するCSVファイルが既に存在する場合は削除
    If fso.FileExists(csvFile) Then
        fso.deleteFile csvFile
    End If

    '新規ブックをCSVファイルとして出力
    wb.SaveAs fileName:=csvFile, FileFormat:=xlCSV, Local:=True
    
    '新規ブックを保存せずに閉じる
    wb.Close SaveChanges:=False
    
    '後片付け
    Set fso = Nothing

End Sub
処理の大まかな流れ
  1. 新規ブックを作成し、CSVファイルへ出力する範囲をコピー
  2. 新規ブックをCSVファイルとして出力
  3. 新規ブックを保存せずに閉じる(内容はCSVファイルへ出力済みのため保存は不要)

「出力するCSVファイル」を指定します(11行目)。

「Range(“B2”).CurrentRegion」により、セル「B2」から続く一連の範囲を取得します(14行目)。
※「Rangeオブジェクト」の「CurrentRegion」プロパティにより取得できます。

既に同名のCSVファイルが存在する場合、出力前に削除します(25~27行目)。
※メッセージ「ファイルが既にあります。置き換えますか?」の表示により、処理が停止してしまうことを防止するため。

メッセージ「ファイルが既にあります。置き換えますか?」
メッセージ「ファイルが既にあります。置き換えますか?」

「FileFormat:=」に「xlCSV」または「xlCSVUTF8」を指定することで、CSVファイルとして出力します(30行目)。
※「xlCSV」・・・・・文字コードは「Shift_JIS」となります。
※「xlCSVUTF8」・・文字コードは「UTF-8」となります。

「Local:=」に「True」を指定することで、「日付の形式」を「Excelの言語設定で指定されている言語(日本語と思います)」にします(30行目)。
※CSVファイルへ出力する値に「日付(2022/2/9等)」がある場合、「True」を指定するかどうかで出力結果が変わってきます

PR

実行結果

シート上の指定した範囲をCSVファイルへ出力できました。

出力されたCSVファイルの内容
出力されたCSVファイルの内容
PR

参考①

上記では「FileFormat:=」に「xlCSV」を指定することで、CSVファイルを出力しました。

指定する値を変更することで、様々な形式のファイルを出力できます。

詳細は公式サイトをご確認ください。

PR

参考②

CSVファイルの読み込みもできます。

詳細は以下の記事をご確認ください。

PR

参考③

CSVファイルとして出力する前に、データを並び替え(ソート)したほうが良いかもしれません。

データを並び替える(ソートする)方法は、以下の記事をご確認ください。

PR

参考④

CSVファイルとして出力する前に、不要なデータを削除したほうが良いかもしれません。

オートフィルタを使用して不要なデータを削除できます。

詳細は以下の記事をご確認ください。


PR

参考⑤

CSVファイルとして出力する前に、出力するデータの一部を置換したい時もあるかもしれません。

置換する方法は、以下の記事をご確認ください。

PR

参考⑥

上記のVBAコードで実施している「ファイルの存在有無の確認」は、以下の記事を参考にしています。

PR

参考⑦

処理を高速化させる方法について、以下の記事にまとめています。

PR

参考⑧

上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。

「Rangeオブジェクト」の「CurrentRegion」プロパティ


●「Workbooksオブジェクト」の「Add」メソッド


「Rangeオブジェクト」の「Copy」メソッド


●「Workbookオブジェクト」の「SaveAs」メソッド


●「Workbookオブジェクト」の「Close」メソッド