UTF-8(BOMなし)改行コードLFのテキストVBAで出力する

Blog
スポンサーリンク

概要

コンフィグファイルを自動生成するVBAを作るときが多くSJISのCRLFでテキスト保存したくないので、UTF-8(BOMなし)改行コードLFのテキスト保存を実施する

前提条件

・エクセルの「開発」タブでVBAコード作成できること
・多少VBAわかること

BOM付きと無しとは

「BOM」は、「バイトオーダーマーク(Byte Order Mark)」と言います

Linuxのviエディタで作成した場合はUTF-8 BOMなしでファイルが作成されるけど
Windowsのサクラエディタとかは意識しないで UTF-8保存すると UTF-8BOM付き で保存してしまいます。

UTF-8 BOM付きとBOM無しの違いは先頭の3バイトがつくかつかないかです(もちろんつかない方がBOMなし)

BOMありファイルをLinuxで利用してしまうと結構困ることになります。。。
正常にファイル読み込めずエラーlessコマンドでなんか文字化けてるみたいな

サンプルコード

UTF-8(BOMなし)改行コードLFのサンプル

'----------------------------------------------------
'UTF-8(BOMなし)、改行LF
'----------------------------------------------------
Set objectADO = CreateObject("ADODB.Stream")
objectADO.Type = adTypeText    'Text
objectADO.Charset = "UTF-8"    'UTF-8
objectADO.LineSeparator = 10   'LF
objectADO.Open

'何か文字列
objectADO.WriteText "bom nasi file", 1
objectADO.WriteText "", 1

'BOM削除処理
objectADO.Position = 0         'Position これいらないかも
objectADO.Type = adTypeBinary  'Binary
objectADO.Position = 3         '先頭3バイトセット
vBuf = objectADO.Read          'BOM(先頭3バイト)以降の内容をコピー
objectADO.Position = 0         '先頭セット
objectADO.Write vBuf           'vBuf書き込み
objectADO.SetEOS               '現在の位置より後ろにあったバイト値や文字はすべて切り捨て

'テキスト出力先指定
objectADO.SaveToFile ThisWorkbook.Path & "\test.txt" , adSaveCreateOverWrite

'close処理
objectADO.Close

こんな感じでできるはず
「’何か文字列の部分を」cell指定にすればエクセルに記載している値を抜き出すこと可能です
while do などで空白行まで実行するみたいな形に書き換えればいろいろとデータをいじれる

BlogInfraVBA
スポンサーリンク
インフラエンジニア|パイナップル星人 ブログ

コメント

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