CSVの出力(書き出し)方法
シート内容をCSV出力(書き出し)する方法です。
VBAでのCSVの扱い方まとめ
エクセルの機能をそのまま利用します
Sub CSV出力(ByVal sht As Worksheet, Optional ByVal rngStart As Range = Nothing)
Dim varFile As Variant
varFile = Application.GetSaveAsFilename(InitialFileName:=sht.Name & ".csv", _
FileFilter:="CSVファイル(*.csv),*.csv", _
FilterIndex:=1, _
Title:="保存ファイルの指定")
If varFile = False Then
Exit Sub
End If
sht.Select
sht.Copy
'不要な先頭の行列を削除します。
If Not rngStart Is Nothing Then
If rngStart.Row > 1 Then
Range(Rows(1), Rows(rngStart.Row - 1)).Delete
End If
If rngStart.Column > 1 Then
Range(Columns(1), Columns(rngStart.Column - 1)).Delete
End If
End If
ActiveWorkbook.SaveAs Filename:=varFile, FileFormat:=xlCSV, CreateBackup:=False
ActiveWindow.Close
MsgBox ("CSV出力しました。" & vbLf & vbLf & varFile)
End Sub
※csv出力時日付がm/d/yyyyになってしまう場合の対処
・SaveAsの引数に、Local:=Trueを追加
・表示形式は「*2012/3/14」のような*付き以外書式を選択
「*2012/3/14」になっているとm/d/yyyyになってしまいます。
これにより、どのシートからも使えるようになります。
シート名+「.csv」を初期のファイル名にしています。
拡張子は、csvのみ指定しています。
開始セルより上の行、左の列は削除して、CSVに出力されないようにしています。
処理の流れは、
↓
シートの新規ブックへのコピー
↓
不要な行列の削除
↓
名前を付けて保存
他システム、特にDB等へアップロードする場合には、このままでは出来ない事があるのです。
例えば、日付は、表示形式のままの文字列で出力されてしまいます。
また数値もカンマ付の場合は、"12,345"のように、文字列として出力されます。
CSV出力前に、当該シートの書式を全て直してから行えばよいのですが、
書式の変更も面倒なら、また元に戻す必要があり、何かと不都合です。
直接CSVを出力
Sub CSV出力(ByVal sht As Worksheet, Optional ByVal rngStart As Range = Nothing)
Dim varFile As Variant
Dim FSO As New FileSystemObject
Dim TS As TextStream
Dim lngRowMin As Long, lngRowMax As Long
Dim lngColMin As Long, lngColMax As Long
Dim i As Long
varFile = Application.GetSaveAsFilename(InitialFileName:=sht.Name & ".csv", _
FileFilter:="CSVファイル(*.csv),*.csv", _
FilterIndex:=1, _
Title:="保存ファイルの指定")
If varFile = False Then
Exit Sub
End If
'開始行列、終了行列を取得
If rngStart Is Nothing Then
lngRowMin = 1
lngColMin = 1
Else
lngRowMin = rngStart.Row
lngColMin = rngStart.Column
End If
With rngStart.CurrentRegion
lngRowMax = .Item(.Count).Row
lngColMax = .Item(.Count).Column
End With
Set TS = FSO.CreateTextFile(Filename:=varFile, Overwrite:=True)
For i = lngRowMin To lngRowMax
TS.WriteLine CSV_EditRec(sht, i, lngColMin, lngColMax)
Next
TS.Close
Set TS = Nothing
Set FSO = Nothing
MsgBox ("CSV出力しました。" & vbLf & vbLf & varFile)
End Sub
Private Function CSV_EditRec(ByVal sht As Worksheet, _
i As Long, _
lngColMin As Long, _
lngColMax As Long) As String
Dim strRec As String
Dim strCol As String
Dim j As Long
strRec = ""
For j = lngColMin To lngColMax
Select Case True
Case IsNumeric(sht.Cells(i, j))
strCol = CStr(CDbl(sht.Cells(i, j)))
Case IsDate(sht.Cells(i, j))
If InStr(sht.Cells(i, j), "-") Then
strCol = sht.Cells(i, j)
Else
strCol = Format(sht.Cells(i, j), "yyyy/mm/dd")
End If
Case InStr(sht.Cells(i, j), ","), InStr(sht.Cells(i, j), """")
strCol = """" & sht.Cells(i, j) & """"
Case Else
strCol = sht.Cells(i, j)
End Select
If strRec = "" Then
strRec = strCol
Else
strRec = strRec & "," & strCol
End If
Next
CSV_EditRec = strRec
End Function
※参照設定をしています。
FileSystemObjectの詳細については以下を参照してください。
第119回.ファイルシステムオブジェクト(FileSystemObject)|VBA入門
Open ファイル For Output As #1
こちらでも良いです。
処理内容は単純です。
要は、
この内容だけでしょう。
セルの値を判定し、データ内容によって、編集処理を分けています。
ここでは、数値、日付、「"」や「,」を含む文字列、その他、の4通りです。
「CSV_EditRec」での編集は、CSVの使い道により、変更を加える必要があります。
例えば、日付は、「#2011/05/17#」のようにする必要がある場合もでてくるでしょう。
コピペで、いろいろ使い回しが可能だと思います。
本サイトにあるCSV関連記事一覧
※UTF-8に対応している記事と対応していない記事があります。
同じテーマ「マクロVBAサンプル集」の記事
VBAでのCSVの扱い方まとめ
CSVの読み込み方法
CSVの読み込み方法(改)
CSVの読み込み方法(改の改)
CSVの読み込み方法(ジャグ配列)
CSVの読み込み方法(ジャグ配列)(改)
CSVの出力(書き出し)方法
UTF-8でCSVの読み書き(ADODB.Stream)
ADOでマスタ付加と集計(SQL)
ADOでマスタ更新(SQL)
ADOでCSVの読み込み(SQL)
新着記事NEW ・・・新着記事一覧を見る
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)
AI時代におけるVBAシステム開発に関する提言|生成AI活用研究(2025-12-08)
GrokでVBAを作成:条件付書式を退避回復するVBA|エクセル雑感(2025-12-06)
顧客ごとの時系列データから直前の履歴を取得する|エクセル雑感(2025-11-28)
ちょっと悩むVBA厳選問題|エクセル雑感(2025-11-28)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBAサンプル集
- CSVの出力(書き出し)方法
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.
