[Excelマクロ]よく使う処理–ファイル出力–

プロシージャにはならないけどよく使う処理についても、メモとして残しておこうかと思います。

ファイル出力 BOM有UTF-8

文字コード/改行コードを設定し、ファイル出力内容を.Writeで書き出した後、
.SaveToFileでファイルに保存する。

' ADODB.Streamオブジェクトを生成
Dim adoSt As Object
Set adoSt = CreateObject("ADODB.Stream")

With adoSt
    .Type = 2            'テキストモード
    .Charset = "UTF-8"   '文字コードはUTF-8
    .LineSeparator = 10  '改行コードはLF
    .Open
    
    ' ----ここからデータ出力----
    For i = starRow To endRow
        If (ws.Cells(i, 2).Value <> "") Then
            .WriteText ws.Cells(i, 2).Value, 1    '1=データ出力の後改行
        End If
    Next i
    ' ----ここまでデータ出力----
    
    ' データが存在するときのみファイルに出力する
    If (.Size <> 0) Then

      .SaveToFile SaveDir & FileName, 2    ' 2=上書き
    End If
End With

adoSt.Close
Set adoSt = Nothing

ファイル出力 BOM無UTF-8

ファイル出力内容を.Writeで書き出した後、BOM部分となる先頭3バイトを除外してファイルに保存する。

' ADODB.Streamオブジェクトを生成
Dim adoSt As Object
Set adoSt = CreateObject("ADODB.Stream")

With adoSt
    .Type = 2            'テキストモード
    .Charset = "UTF-8"   '文字コードはUTF-8'
    .LineSeparator = 10  '改行コードはLF'
    .Open
    
    ' ----ここからデータ出力----
    For i = starRow To endRow
        If (ws.Cells(i, 2).Value <> "") Then
            .WriteText ws.Cells(i, 2).Value, 1    '1=データ出力の後改行
        End If
    Next i
    ' ----ここまでデータ出力----
    
    ' データが存在するときのみファイルに出力する
    If (.Size <> 0) Then

      ' Postionsを0に戻してバイナリモードに変更する
      .Position = 0
      .Type = 1                'バイナリモード

      ' Position3以降を保存することでBOM分となる先頭3バイトを除外する
      .Position = 3
      Dim tempBuf As Variant
      tempBuf = .Read()
      .Position = 0
      .Write tempBuf
      .SetEOS
      .SaveToFile SaveDir & FileName, 2    ' 2=上書き
    End If
End With

adoSt.Close
Set adoSt = Nothing

コメント

タイトルとURLをコピーしました