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
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"
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出力する方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す