https://vbabeginner.net/convert-shift-jis-files-to-utf-8-without-bom/
https://vbabeginner.net/convert-utf-8-files-to-shift-jis/
-- 1. 開発タブの挿入でボタンを作成
※ActiveXコントロールのものを使用する
-- 2. デザインモードONで作成したボタンをダブルクリックするとエディタが開くので下記コードを記載。デザインモードOFFで実行
※ 下記設定必要
「Microsoft ActiveX Data Objects x.x Library」の参照設定
Option Explicit
Private Sub CommandButton1_Click()
'画面を更新しない
Application.ScreenUpdating = False
'確認メッセージを表示しない
Application.DisplayAlerts = False
'テストファイル作成
Open ThisWorkbook.Path & "\test1.txt" For Output As #1
Print #1, "テストファイルです"
Close #1
'SJIS -> UTF8 変換
Call SjisToUtf8NoBOM(ThisWorkbook.Path & "\test1.txt", ThisWorkbook.Path & "\test2.txt")
'UTF8 -> SJIS 変換
Call Utf8ToSjis(ThisWorkbook.Path & "\test2.txt", ThisWorkbook.Path & "\test3.txt")
'確認メッセージを表示する
Application.DisplayAlerts = True
'画面を更新する
Application.ScreenUpdating = True
MsgBox ("処理完了")
End Sub
Sub SjisToUtf8NoBOM(a_sFrom, a_sTo)
Dim streamRead As New ADODB.Stream '// 読み込みデータ
Dim streamWrite As New ADODB.Stream '// 書き込みデータ
Dim sText As Variant '// ファイルデータ
'// ファイル読み込み
streamRead.Type = adTypeText
streamRead.Charset = "Shift-JIS"
streamRead.Open
Call streamRead.LoadFromFile(a_sFrom)
'// 改行コードCRLFをLFに変換
sText = streamRead.ReadText
sText = Replace(sText, vbCrLf, vbLf)
'// ファイル書き込み
streamWrite.Type = adTypeText
streamWrite.Charset = "UTF-8"
streamWrite.Open
'// Shift-JISファイルのデータをUTF-8ファイルにコピー
Call streamWrite.WriteText(sText)
'// バイナリモードで書き込み済みデータ開始位置をBOM分の3バイトずらす
streamWrite.Position = 0
streamWrite.Type = adTypeBinary
streamWrite.Position = 3
'// 3バイトずらした状態でのデータを取得
sText = streamWrite.Read
'// ずらした開始位置を元に戻す
streamWrite.Position = 0
'// BOMが除去されたデータを先頭から書き込み直す
Call streamWrite.Write(sText)
'// 現時点の末尾を終端とし、直前に書き込まれていた3バイトをデータ対象外とする
streamWrite.SetEOS
'// 保存
Call streamWrite.SaveToFile(a_sTo, adSaveCreateOverWrite)
'// クローズ
streamRead.Close
streamWrite.Close
End Sub
Sub Utf8ToSjis(a_sFrom, a_sTo)
Dim streamRead As New ADODB.Stream '// 読み込みデータ
Dim streamWrite As New ADODB.Stream '// 書き込みデータ
Dim sText '// ファイルデータ
'// ファイル読み込み
streamRead.Type = adTypeText
streamRead.Charset = "UTF-8"
streamRead.Open
Call streamRead.LoadFromFile(a_sFrom)
'// 改行コードLFをCRLFに変換
sText = streamRead.ReadText
sText = Replace(sText, vbLf, vbCrLf)
sText = Replace(sText, vbCr & vbCr, vbCr)
'// ファイル書き込み
streamWrite.Type = adTypeText
streamWrite.Charset = "Shift-JIS"
streamWrite.Open
'// データ書き込み
Call streamWrite.WriteText(sText)
'// 保存
Call streamWrite.SaveToFile(a_sTo, adSaveCreateOverWrite)
'// クローズ
streamRead.Close
streamWrite.Close
End Sub