備忘録

備忘録

Excel VBAで任意の文字列で区切られたCSVファイルを出力する方法

Ⅰ. はじめに

タイトルの通り「Excel VBAで任意の文字列で区切られたCSVファイルを出力する方法」です。

Ⅱ. やり方

1. Microsoft ActiveX Data Objects x.x Library を追加する

「ツール」→「参照設定」
f:id:kagasu:20200201055832p:plain

2. 以下プログラムをコピペする
Option Explicit

' 文字エンコーディング
Const Charset As String = "UTF-8"
' 改行コード
Const LineSeparator As String = adCRLF
' 処理対象の範囲
Const Area As String = "A1:D4"
' フィールド区切り文字列
Const Delimiter As String = "<>"
' Const Delimiter As String = vbTab
' 出力場所
Const FilePath As String = "C:\out.csv"

Sub WriteCsvStringToStream(stream As Object, cells As Range)
  Dim x As Range
  For Each x In cells
    If cells.Columns.Count = x.Column Then
      Call stream.WriteText(Trim(x.Value), adWriteLine)
    Else
      Call stream.WriteText(Trim(x.Value) & Delimiter, adWriteChar)
    End If
  Next x
End Sub

Sub SaveAsCSV()
  ' ADODB.stream を初期化する
  Dim stream As ADODB.stream: Set stream = New ADODB.stream
  With stream
    .Charset = Charset
    .LineSeparator = LineSeparator
    .Open
  End With

  ' 任意の文字列で区切られたCSV文字列をストリームに書き込む
  Call WriteCsvStringToStream(stream, Range(Area))

  ' ファイルを出力する
  Call stream.SaveToFile(FilePath, adSaveCreateOverWrite)

  stream.Close
End Sub
3. SaveAsCSV を実行する

実行結果

f:id:kagasu:20200201061032p:plain