LoginSignup
0
4

More than 5 years have passed since last update.

Excel VBAでCSVファイルをUTF-8 BOMなし出力

Posted at

やりたかったこと

CSVファイルをインプットにテーブル登録しなければいけなく、面倒なのでVBAである程度自動化しました。1シート程度だったらば、毎回ファイル形式を指定して保存するのですが、4ファイルをヘッダ行など編集しながら作成するのには辟易としていました。
文字コードはSAPシステムでお決まりのUTF-8のBOMなしです。Excel2013で動かしました。
備忘録として投稿です。

事前設定

事前設定が必要です。「エクセルのマクロ(VBA)でUTF-8を書き出す方法」の記事を参照ください。

機能

1. CSVファイル出力

Excel上のボタン押下で動かしました。親プログラムでここから子関数を呼び出します。

WriteCSV.bas
Sub WriteCSV()
'
' WriteCSV Macro
'

'
    Call WriteCsvFile(2, 25, "C:\TestData\Data\ZCCMI0210_FK_BP.csv")
    Call WriteCsvFile(3, 122, "C:\TestData\Data\ZCCMI0250_FK_CONT.csv")
    Call WriteCsvFile(4, 28, "C:\TestData\Data\ZCCMI0190_FK_INST.csv")
    Call WriteCsvFile(5, 24, "C:\TestData\Data\ZCCMI0200_FK_FACT.csv")

    MsgBox "CSV File Saved!"


End Sub

2. 実際にファイル出力

WriteCSVFile.bas
Private Sub WriteCsvFile(wsId As Integer, endRow As Integer, csvFileName As String)

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(wsId)

    'Create ADODB.Stream Object
    Dim adoSt As Object
    Set adoSt = CreateObject("ADODB.Stream")

    Dim strLine As String
    Dim i As Long, j As Long

    i = 2

    With adoSt
        .charSet = "UTF-8"
        .LineSeparator = adLF
        .Open

        Do While ws.Cells(i, 1).Value <> ""


            strLine = """"
            For j = 1 To endRow

                strLine = strLine & ws.Cells(i, j).Value & ""","""

            Next

            strLine = strLine & ws.Cells(i, j).Value & """"


            .WriteText strLine, adWriteLine

            i = i + 1

        Loop

'      フッタ を追記
       .WriteText "8", adWriteLine


'       BOM削除
        .Position = 0
        .Type = adTypeBinary

        .Position = 3

        Dim byteData() As Byte
        byteData = .Read

        .Close

        .Open
        .Write byteData


        .SaveToFile csvFileName, adSaveCreateOverWrite
        .Close

    End With

End Sub

感想

プロジェクトでいくつかあると便利かと思います(特に人の出入りが激しく、どんなデータを作ればどんなテストケースを充足できるか整理できていない場合)。VBAなんて今までほとんど使ったことがないので、ツッコミどころ満載のしょぼいコードです。

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4