2017-07-25 1166 views
2

日本語のデータをExcelファイルから取り出し、日本語のデータをテキストファイルと比較し、日本語の単語を英語の単語に置き換えるVBAのExcelコードがあります。しかし、私はUTF-8テキストファイルでこれを行うことができるはずです。このコードは、すべての日本語の単語を奇妙な文字に置き換えます。問題なく保存するにはどうすればよいですか?VBAを使用してUTF-8をANSIに変換する

Open sFileName For Input As iFileNum 

For n = 1 To lngLastCell 
Label5.Caption = n & "/" & lngLastCell 
searchtext = MySearch(n) 
valuetext = MyText(n) 

eplcCount = 0 
spltCount = 0 

searchpart = Array(searchtext) 
valuepart = Array(valuetext) 

Do Until EOF(iFileNum) 
Line Input #iFileNum, sBuf 
sTemp = sTemp & sBuf & vbCrLf 

Loop 


Close iFileNum 

sTemp = Replace(sTemp, searchtext, valuetext) 

'iFileNum = FreeFile 
Open sFileName For Output As iFileNum 
Print #iFileNum, sTemp 

Next n 

コードはANSI文字で正常に動作します。

答えて

1

VBAのOpenの機能は、ANSIエンコードファイルとバイナリでのみ動作します。 utf-8ファイルを読み書きする場合は、別の方法を見つける必要があります。

utf-8エンコーディングの文字数がANSIより大きいため、ANSIからutf-8に変換することはできません。つまり、ExcelとVBAのStringutf-16(VBAエディタはまだANSI)という名前で保存されているため、utf-8からutf-16に変換するだけで済みます。 ADODB.Stream

Public Function ReadFile(path As String, Optional CharSet As String = "utf-8") 
    Static obj As Object 
    If obj Is Nothing Then Set obj = VBA.CreateObject("ADODB.Stream") 
    obj.CharSet = CharSet 
    obj.Open 
    obj.LoadFromFile path 
    ReadFile = obj.ReadText() 
    obj.Close 
End Function 

Public Sub WriteFile(path As String, text As String, Optional CharSet As String = "utf-8") 
    Static obj As Object 
    If obj Is Nothing Then Set stream = VBA.CreateObject("ADODB.Stream") 
    obj.CharSet = CharSet 
    obj.Open 
    obj.WriteText text 
    obj.SaveToFile path 
    obj.Close 
End Sub 
関連する問題