ray88’s diary

お仕事で困ったとき用の自分用の覚書

Excel VBA UTF-8形式のCSVをANSI形式に変換(文字化け防止)

■UTF-8形式のCSVANSI形式に変換(文字化け防止)

'--------------------------------------------------------
'機能:UTF-8形式のCSVファイルをANSI形式に変換する
'引数1:変換対象のCSVファイルパス
'戻り値:ANSI形式に変換後のCSVファイルパス
'    エラーの場合は「ANSI形式へ変換失敗」を返す
'--------------------------------------------------------
Sub ConvertUTF8ToANSI(CsvFilePath As String)
    '変換したいテキストファイルのファイルパスを作成
    Dim a As String
    Dim i As Long
    Dim b As Variant
        
    'UTF-8もしくはUTF-8(BOM付き)のテキストファイルを読み込み
    With CreateObject("ADODB.Stream")
        .charSet = "UTF-8"
        .Open
        .LoadFromFile CsvFilePath
        a = .ReadText
        .Close
    End With
    
    'UTF-8もしくはUTF-8(BOM付き)以外を読み込んでしまった場合は終了
    For i = 1 To Len(a)
        If Mid(a, i, 1) <> Chr(63) Then
            If Asc(Mid(a, i, 1)) = 63 Then
                Exit Sub
            End If
        End If
    Next
    
    '改行毎にデータを分ける
    b = Split(a, vbLf)
    
    'Shift-JIS形式でテキストファイルへ出力
    Open CsvFilePath For Output As #1
        For i = 0 To UBound(b)
            Print #1, b(i)
        Next
    Close #1          
End Sub