ミギムキ

[エクセルVBA] シートの内容をUTF-8のBOMなしCSVファイルに書き出したい

エクセル上で管理しているデータをCSVデータに吐き出して、別のシステムにインポートできるようにするVBAマクロです。おおまかな動作仕様は以下のような形です。

サンプルコード

Sub ExportToCSV() Dim sheet As Worksheet Set sheet = ThisWorkbook.Sheets("CSV") Dim filePath As String filePath = ThisWorkbook.Path & "\export.csv" Dim csvText As String Dim row As Long, col As Long For row = 1 To sheet.UsedRange.Rows.Count '空行のチェック:行内のセルすべてが空であれば書き出しをスキップ Dim isEmptyRow As Boolean isEmptyRow = True For col = 1 To sheet.UsedRange.Columns.Count If sheet.Cells(row, col).Value <> "" Then isEmptyRow = False Exit For End If Next col If Not isEmptyRow Then For col = 1 To sheet.UsedRange.Columns.Count csvText = csvText & sheet.Cells(row, col).Value & "," Next col csvText = Left(csvText, Len(csvText) - 1) & vbCrLf End If Next row csvText = Left(csvText, Len(csvText) - 2) Dim objStream As Object Set objStream = CreateObject("ADODB.Stream") With objStream .Charset = "UTF-8" .LineSeparator = -1 'adCRLF .Open .WriteText csvText 'バイナリ変換するためにPositionを0にする .Position = 0 'Typeを変更してバイナリ変換 .Type = 1 'adTypeBinary 'Positionを再設定してBOMデータが格納されている最初の3バイトをスキップ .Position = 3 'バイナリデータとして一時保存 Dim byteData() As Byte byteData = .Read .Close .Open .Write byteData .SaveToFile filePath, 2 'adSaveCreateOverWrite .Close End With MsgBox "書き出しが完了しました。" End Sub

BOMなし形式の書き出しは、下記ウェブサイトを参考にさせていただきました。

エクセルVBAでBOM無しのUTF-8でCSVファイルなどを出力する方法

ご質問など受け付けています

記事の中でわかりにくかったところ、もっと知りたかったこと、間違っていることなど、何でもお気軽にご連絡ください。

ご連絡は下記フォームを利用いただくか、ツイッターアカウント@flat8migi宛てでもOKです。