【Excel VBA】シートの指定範囲をCSV出力する方法!最終行も自動取得!

Excel VBAでシートの指定範囲をCSV出力したいときはないでしょうか。

けど、そんな中で悩むことは、

・Excel VBAでシートの指定範囲をCSV出力したいが方法がよくわからない
・Excel VBAで最終行を自動取得しその範囲をCSV出力したいが方法がよくわからない

ですよね。

今回はそんなお悩みを解決する

・Excel VBAでシートの指定範囲をCSV出力する方法
・Excel VBAで最終行を自動取得しその範囲をCSV出力する方法

についてまとめます!

Excel VBAでシートの指定範囲をCSV出力するイメージ

Excel VBAでシートの指定範囲をCSV出力するイメージについて説明をします。
Excelでは標準機能でCSV形式のファイルに変換する機能がありますが、特定シートの表などピンポイントの指定はできません。
そこでVBAを使い、シートの指定範囲のみCSVファイルへ出力する機能を実現していきます。

まず、以下のような表があり、この表を範囲指定すると、

CSV形式に変換し

CSVファイルへ出力していきます。

また、表の最終行を動的に取得することにより、データの変動があったとしても

指定範囲を変更することなく取得が可能です。

早速実装して試してみましょう。

CSV出力する表を用意する

CSV出力する対象となる表を用意しましょう。

サンプルでは「Sheet1」シートへA、B、C3列の表を作成しました。

 

シートの指定範囲をCSV出力するVBA

VBAでシートの指定範囲をCSV出力する方法について説明をします。

VBAコード

VBAは以下の通りです。

Sub 指定範囲をCSV出力する()

    Dim arrTemp As Variant
    Dim objWB As Workbook
    Dim strFilePass As String
    
    'CSVファイルのパスとファイル名を指定します。
    strFilePass = "F:\CSV\売上データ.csv"

    'CSV出力したいシートと範囲を指定し、配列に代入します。
    arrTemp = Sheets("Sheet1").Range("A1:C11")
    
    'ブックを新規作成します。
    Set objWB = Workbooks.Add
    
    '1シート目に範囲指定した値を代入します。(高速版値貼り付け)
    objWB.Sheets(1).Range(Cells(1, 1), Cells(UBound(arrTemp, 1), UBound(arrTemp, 2))) = arrTemp
    
    'CSV形式でファイルを保存します。
    objWB.SaveAs Filename:=strFilePass, FileFormat:=xlCSV, CreateBackup:=False
    
    '新規作成したブックを閉じます。
    objWB.Close
    
    MsgBox "以下のCSVファイルを出力しました!" & Chr(13) & strFilePass
    
    'オブジェクトを解放します。
    Set objWB = Nothing
    
End Sub

VBAの設定

シートの指定範囲をCSV出力するVBAの設定内容について説明をします。

CSVファイルのパスとファイル名を指定します。

strFilePass = "F:\CSV\売上データ.csv"

CSV出力したいシートと範囲を指定します。

arrTemp = Sheets("Sheet1").Range("A1:C11")

VBAの実装

シートの指定範囲をCSV出力するVBAの実装方法については
VBAの実装手順
をご参照ください。

VBAを実行

VBAを実行しましょう。

メッセージが表示されたらファイルパスを確認します。

はい、指定範囲した表のデータがCSVファイルへ出力れていますね。

VBAの説明

シートの指定範囲をCSV出力するVBAについて説明をします。

ブックを新規作成します。このブックは一時的にCSV出力用として利用します。

Set objWB = Workbooks.Add

新規作成したブックの1シート目に範囲指定した値を代入します。

objWB.Sheets(1).Range(Cells(1, 1), Cells(UBound(arrTemp, 1), UBound(arrTemp, 2))) = arrTemp

タカヒロ
タカヒロ
二次元配列を直接セルのレンジに格納する方法は、ForEachによる繰り返し処理に比べ高速に処理できることが見込めます。

CSV形式でファイルを保存します。

objWB.SaveAs Filename:=strFilePass, FileFormat:=xlCSV, CreateBackup:=False

新規作成したブックを閉じます。

objWB.Close

最終行を自動取得しその範囲をCSV出力するVBA

続いてVBAで最終行を自動取得しシートの指定範囲をCSV出力するよう変更を加えていきたいと思います。

VBAの設定

変更箇所は以下の通りです。

■変更前

arrTemp = Sheets("Sheet1").Range("A1:C11")

■変更後

With Sheets("Sheet1")
arrTemp = .Range("A1:C" & .Cells(1, 1).End(xlDown).Row)
End With

シート名を指定します。

With Sheets("Sheet1")

最終行数取得の基準となる列を指定します。サンプルでは1列目のA列となります。

.Cells(1, 1)


タカヒロ
タカヒロ
最終行判定はキーとなっている項目が望ましいでしょう。

取得対象範囲を指定します。最終行は自動取得した値を入れますので除いてください。

Range("A1:C"

タカヒロ
タカヒロ
Range(“A:C”)という指定列の全行を対象にするやり方がありますが、値が無くても全行が対象となり処理が重くなりますので使用しないようにしましょう。

VBAを実行

VBAを実行しましょう。

はい、最終行が自動判定され漏れがなく表データがCSVファイルへ出力されていますね。

別のシートの表のシートの指定範囲をCSV出力する

コードを変えずに別のシートの表もCSV出力してみましょう。

サンプルは「Sheet2」を対象にしています。

シート名だけコードを変更します。

With Sheets("Sheet2")
arrTemp = .Range("A1:C" & .Cells(1, 1).End(xlDown).Row)
End With

はい、最終行が自動判定され漏れがなく表データがCSVファイルへ出力されていますね。

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、

・Excel VBAでシートの指定範囲をCSV出力する方法
・Excel VBAで最終行を自動取得しその範囲をCSV出力する方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。



タカヒロ

タカヒロ
実質無料で読めるExcelVBA本についてまとめました。
もしVBA本購入を検討されていたら、どれだけお得か確かめてみてください。

【¥0】実質無料のExcelVBAおすすめ本25選!初級~中級まで網羅!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です