dポイントプレゼントキャンペーン実施中!

UTF-8のテキストファイルを開く方法

こんにちは。VBA初心者です。

FSOを使ってテキストファイルを開いてみたのですが、S-JISで開かれるらしく、文字化けしてしまいました。

そこで、WEBで調べてみると「ADODB.Stream」というものを使用すると、「オブジェクト.Charset = "UTF-8"」のように文字コードを指定できることがわかりました。

しかし、テキストストリームというものがいまいち理解できていないので使い方がよくわかりません。

以下のようなコードを書いてみましたが、「実行時エラー'438' オブジェクトは、このプロパティまたはメソッドをサポートしていません。」となってしまいました。

どこが間違っているのか教えていただけないでしょうか。

ちなみに「Open」ステートメント(Open バス名 For モード As #ファイル番号)を使用してテキストを内部的に開いた場合はどうなるのでしょうか。もし、標準でS-JISだった場合は、UTF-8にする方法はあるのでしょうか。

どうかよろしくお願いします。

Sub UTF8を開く()

Dim myADODB As Object
Set myADODB = CreateObject("ADODB.Stream")
Dim i As Integer

Worksheets("sheet1").Activate
i = 1

With myADODB

.Charset = "UTF-8"
.ReadLine ("D:\test\sample.txt")

Do Until .AtEndOfStream = True

Cells(i, 1).Value = myADODB
i = i + 1

Loop
.Close
End With

End Sub

A 回答 (3件)

とりあえず一例です


Sub test()
Dim mystream As Object
Dim i As Long
Const adTypetext As Long = 2
Const adReadLine As Long = -2

Set mystream = CreateObject("ADODB.Stream")
mystream.Type = adTypetext
mystream.Charset = "UTF-8"
mystream.Open
mystream.LoadFromFile ("C:\hoge.txt")
i = 1
Do Until mystream.EOS
Cells(i, 1).Value = mystream.ReadText(adReadLine)
i = i + 1
Loop
mystream.Close
Set mystream = Nothing
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます!UTF-8のファイルを開くことができました。

ところで、.ReadText の引数が「-2」となっていますが、こうすると1行ごとに読み込むということになるのでしょうか。

以下のMSDNのページでもそのあたりが説明されていないのですが、どこで調べたらそういうことが判るでしょうか(Typeプロパティについても同様です)。

http://msdn.microsoft.com/ja-jp/library/cc364207 …

とにかく、非常に助かりました。
ありがとうございます。

お礼日時:2010/10/13 13:37

#2です。

真面目に捜してみました。下記からが良いでしょう。
Typeプロパティは、規定値がadTypeTextなので、あえて指定しなくても良さそうです。
http://msdn.microsoft.com/ja-jp/library/cc408215 …
ADO API リファレンス
└ADO オブジェクト
 └Stream オブジェクト
  └Stream オブジェクトのプロパティ、メソッド、およびイベント
   ├Type プロパティ (ADO Stream)
   │└Stream オブジェクトに格納されたデータの種類を表す StreamTypeEnum の値を設定します。
   └ReadText メソッド
    └パラメータ
     NumChars
     省略可能です。ファイルから読み取る文字数を指定する長整数型 (Long) の値、または StreamReadEnum 値を指定します。既定値は adReadAll です。
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございました。
「StreamReadEnum」のリンクを開いたら「-2」がどういう意味だか書いてありました。
勉強になります。

お礼日時:2010/10/14 15:11

Readlineというメソッドは存在しません。



参考URL:http://msdn.microsoft.com/ja-jp/library/cc364273 …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!