別記事にてUTF-8でCSVファイル出力する方法を紹介しました。
今回は、BOM無しUTF-8でCSVファイル出力する方法を紹介します。別記事にて紹介したADODB.Streamを使いますが、BOM無しにするために、ひと手間加える必要があります。
そもそもBOM(ByteOrderMark)ってなに?という方はWikipediaを参照してみてください。
なんだか難しいことが書いてありますね。これは私の感想ですが、UTF-8といえばBOM無しを指します。そのためBOM無しUTF-8でCSVファイル出力しておいたほうが無難です。
ADODB.Streamで解決する
UTF-8でファイル出力するには、ADODB.Streamオブジェクトを使います。CSVファイルに限らずUTF-8でテキスト出力する際にも使うことができます。
サンプルプログラムを確認する(コピペOK)
Sub sample()
'最終行列
Dim maxRow As Long: maxRow = Range("A1").SpecialCells(xlLastCell).Row
Dim maxCol As Long: maxCol = Range("A1").SpecialCells(xlLastCell).Column
' ファイルをUTF-8で開く
Dim st As Object: Set st = New ADODB.Stream
st.Charset = "UTF-8"
st.Open
Dim strLine As String
Dim i As Long, j As Long
For i = 1 To maxRow
strLine = ""
For j = 1 To maxCol - 1
strLine = strLine & Cells(i, j) & ","
Next j
strLine = strLine & Cells(i, j)
st.WriteText strLine, adWriteLine
Next i
'BOMを削除する
st.Position = 0
st.Type = adTypeBinary
st.Position = 3
Dim tmp() As Byte
tmp = st.Read
st.Close
st.Open
st.Write tmp
'上書きモードでセーブ
st.SaveToFile "d:\test.csv", adSaveCreateOverWrite
st.Close
End Sub