Shift-JISとUTF-8でテキストファイルを読み書きする関数とサブルーチンです.

目次

  1. Shift-JISで読み込む
  2. UTF-8で読み込む
  3. Shift-JISで書き出す
  4. UTF-8で書き出す
  5. 変換

Shift-JISで読み込む

Private Function ReadShiftJisFile(ByVal filePath As String)

'引数:テキストファイルのファイルパス
'Shift-JISで読み込んだデータを返します.

tmp = ""
Open filePath For Input As #1
Do Until EOF(1)
Line Input #1, buf
tmp = tmp & buf & vbLf
Loop
Close #1

ReadShiftJisFile = tmp

End Function

UTF-8で読み込む

Private Function ReadUtf8File(ByVal filePath As String)

'引数:テキストファイルのファイルパス
'UTF-8で読み込んだデータを返します.

With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Open
.LoadFromFile filePath
tmp = .ReadText
.Close
End With

ReadUtf8File = tmp

End Function

Shift-JISで書き出す

Private Sub WhiteShiftJisFile(dat, ByVal filePath As String)

'引数1:文字列
'引数2:出力先パス

tmp = Replace(dat, vbCr, "")
tmp = Split(tmp, vbLf)
Open filePath For Output As #1
For Each s In tmp
Print #1, s
Next
Close #1

End Sub

UTF-8で書き出す

Private Sub WhiteUtf8File(dat, ByVal filePath As String)

'参照設定からMicrosoft ActiveX Data Objects 6.1 Libraryをオンにすること.

'引数1:文字列
'引数2:出力先パス

tmp = Replace(dat, vbCr, "")
tmp = Split(tmp, vbLf)
Set ads = CreateObject("ADODB.Stream")
With ads
.Type = adTypeText
.Charset = "UTF-8"
.Open
End With

For Each s In tmp
ads.WriteText s, adWriteLine
Next

ads.SaveToFile filePath, adSaveCreateOverWrite
ads.Close
Set ads = Nothing

End Sub

変換

上で定義したReadShiftJisFileWhiteUtf8Fileを使って変換が行えます.

Sub ShiftJisToUtf8(ByVal inputFilePath As String, ByVal outputFilePath As String)

dat = ReadShiftJisFile(inputFilePath)
Call WhiteUtf8File(dat, outputFilePath)

End Sub