
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
No.2ベストアンサー
- 回答日時:
とりあえず一例です
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
ありがとうございます!UTF-8のファイルを開くことができました。
ところで、.ReadText の引数が「-2」となっていますが、こうすると1行ごとに読み込むということになるのでしょうか。
以下のMSDNのページでもそのあたりが説明されていないのですが、どこで調べたらそういうことが判るでしょうか(Typeプロパティについても同様です)。
http://msdn.microsoft.com/ja-jp/library/cc364207 …
とにかく、非常に助かりました。
ありがとうございます。
No.3
- 回答日時:
#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 です。
ご丁寧にありがとうございました。
「StreamReadEnum」のリンクを開いたら「-2」がどういう意味だか書いてありました。
勉強になります。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 画像を貼り付ける...
-
Excel VBA 定数にオブジェクト...
-
java名簿管理プログラム
-
VBAでの[]
-
C#のクラスで値渡しをする
-
VB.netでメソッドからコントロ...
-
ブラウザのテキストボックスへ...
-
VB2005でADDとINSERTの違いは?
-
servletからjspへオブジェクト...
-
C#で親にイベントを投げる方法
-
ADOのOPENで実行時エラー
-
オブジェクトの参照渡しについて
-
Vba ListViewの行挿入に関して...
-
エクセルVBA/SpecialCellsで特...
-
UTF-8のテキストファイルを開く...
-
C#のXmlDocumentについて
-
[ASP.NET]DropDownListのDB連携...
-
MessageBox.Show(Me,…の「Me」...
-
サーブレットコンテキストの意...
-
VB.netでJavaのCollection.shuf...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 画像を貼り付ける...
-
Excel VBA 定数にオブジェクト...
-
VBAでの[]
-
C#のクラスで値渡しをする
-
サーブレットコンテキストの意...
-
VB.netでメソッドからコントロ...
-
javaで、、、
-
VB.NETでのnothing の意義について
-
Vba ListViewの行挿入に関して...
-
System.Collections.SortedList
-
ピクチャーボックスに点を打つ...
-
VBスクリプトでテキストファイ...
-
servletからjspへオブジェクト...
-
エクセルVBA/SpecialCellsで特...
-
C#で親にイベントを投げる方法
-
Javaでブラウザ判定
-
MessageBox.Show(Me,…の「Me」...
-
JSPでのArrayListの表示につい...
-
String型からlong型への変換は...
-
C++/CLIでの画像情報(RGB)の取得
おすすめ情報