• 締切済み

ExcelVBAマクロについて確認させてください。

ExcelVBAマクロについて確認させてください。 テキストファイル内の全ての文字を読み込むプログラムですが、テキストファイルがUTF-8形式の場合は文字化けしてしまいます。 UTF-8形式の場合でも読み込める方法はありますでしょうか。 お手数おかけしますが、よろしくお願いします。 Sub test() Dim FSO As Object, buf As String Set FSO = CreateObject("Scripting.FileSystemObject") ''C:\Work\Sample.txtの全ての文字を読み込んで表示します With FSO.GetFile("C:\Work\Sample.txt").OpenAsTextStream buf = .ReadAll MsgBox buf .Close End With Set FSO = Nothing End Sub

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.3

>UTF-8形式の場合でも読み込める方法 予めCharsetを調べ、 ADODB.Streamオブジェクトを使う対応になりましょう。 以下、サンプルです。 'Microsoft ActiveX Data Objects x.x Libraryを参照設定 Sub Sample5()  Dim Target As String  Dim judgeCode As String  Dim adoSt As Object  Dim MyText As String    'ADODB.Streamオブジェクトを生成  Set adoSt = CreateObject("ADODB.Stream")    'テキストファイルを選ぶ  Target = Application.GetOpenFilename("テキストファイル,*.*")  If Target = "False" Then Exit Sub  'ファイルのCharsetを調べる  judgeCode = GetCharset(Target)  With adoSt   .Charset = judgeCode    'Streamで扱う文字コートを設定   .Open            'Streamをオープン   .LoadFromFile (Target)   'ファイルからStreamに読み込む   MyText = .Readtext(adReadAll)   'Debug.Print MyText   MsgBox (MyText)   .Close  End With End Sub 'ファイルを調べCharsetを取得 引数:ファイル名フルパス Function GetCharset(strFileName As String) As String  Dim buf(2) As Byte  Dim intFileNo As Integer  intFileNo = FreeFile  Open strFileName For Binary Access Read As intFileNo  Get intFileNo, , buf  Close intFileNo  If (buf(0) = 255) And (buf(1) = 254) Then   GetCharset = "unicode"  ElseIf (buf(0) = 239) And (buf(1) = 187) And (buf(2) = 191) Then   GetCharset = "utf-8"  Else   GetCharset = "shift-jis"  End If End Function

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

ここに質問する前に、WEB照会して、 http://neos21.hatenablog.com/entry/2016/03/25/074343 を読んででみたら。 > CreateTextFileの第3引数をtrueにするとUTF-16でファイルを作る。falseにするとShift_JIS。UTF-8で作ることはできない。UTF-8で作りたいときはFileSystemObjectではなくADODB.Streamを使う。 それでも 「このやり方だと「BOM 付き UTF-8」になる」 そこで、 https://k-sugi.sakura.ne.jp/windows/vb/3650/に解説が続く。

  • f272
  • ベストアンサー率46% (7992/17078)
回答No.1

こんな感じ? Sub test() Dim buf As String With CreateObject("ADODB.Stream") .Charset = "UTF-8" .Open .LoadFromFile "C:\Work\Sample.txt" buf = .ReadText MsgBox buf .Close End With End Sub

関連するQ&A

  • ExcelVBAマクロでワードファイル読み込み方法

    ExcelVBAマクロについて確認させてください。 下記のように読み込みたいファイルをフォームで指定して それを変数aに読み込ませています。 ですが、この方法ではテキスト文書しか読み込みが出来ないようです。 ワードファイルも読み込むように設定したいのですが可能でしょうか? 可能でしたらその方法をご教授いただけますでしょうか。 ---------------------------------- Sub sample() Dim buf As String Dim a As String buf = Application.GetOpenFilename(FileFilter:="テキスト文書,*.txt", Title:="サンプル") 'フルパスも含めたファイル名をbufに代入 With CreateObject("Scripting.FileSystemObject").GetFile(buf).OpenAsTextStream '指定したファイルを開く a = .ReadAll 'テキスト文書の内容を文字列aに代入 .Close '指定したファイルを閉じる End With End Sub

  • ExcelVBAマクロでテキストボックスの値の代入

    ExcelVBAマクロについて確認させてください。 下記のように読み込みたいファイルをフォームで指定して それを変数aに読み込ませています。 この方法の他に、ユーザーフォームでテキストボックスを 作成してテキストボックス内で文字を記入してその文字を 変数aに読み込ませることは可能でしょうか。 可能であればその方法をぜひご教授ください。 ---------------------------------- Sub sample() Dim buf As String Dim a As String buf = Application.GetOpenFilename(FileFilter:="テキスト文書,*.txt", Title:="サンプル") 'フルパスも含めたファイル名をbufに代入 With CreateObject("Scripting.FileSystemObject").GetFile(buf).OpenAsTextStream'指定したファイルを開く     a = .ReadAll'テキスト文書の内容を文字列aに代入     .Close'指定したファイルを閉じる End With End Sub

  • ExcelVBAマクロでワードファイル書き込み方法

    ExcelVBAマクロについて確認させてください。 下記のように読み込みたいWordファイルをフォームで指定して Wordファイルの内容を変数aに読み込ませてます。 変数Xにある任意の文字列を代入し、変数aでその変数Xが検索された場合は その検索された文字列全てを赤文字にして別の名前で保存という方法は可能でしょうか。 可能であればその方法をご教授下さい。 以上、よろしくお願いいたします。 ---------------------------------- Sub sample() Dim buf As String Dim a As String buf = Application.GetOpenFilename(FileFilter:="テキスト文書,*.txt", Title:="サンプル") 'フルパスも含めたファイル名をbufに代入 With CreateObject("Scripting.FileSystemObject").GetFile(buf).OpenAsTextStream '指定したファイルを開く a = .ReadAll 'テキスト文書の内容を文字列aに代入 .Close '指定したファイルを閉じる End With End Sub

  • ExcelVBAマクロでの正規表現の方法

    ExcelVBAマクロについて確認させてください。 下記のように読み込みたいファイルをフォームで指定して それを変数aに読み込ませています。 変数aから、半角で書かれた括弧つきの数字(1)~(99)またはは全角で書かれた括弧つきの数字 (1)~(99)の文字列を削除したいのですが、例として"(1)"を削除する場合、次のような命令文 a = Replace(a, "(1)", "")のような書き方でもいいのですが、正規表現を使って もっと効率良い書き方がありますでしょうか。 ぜひご教授下さい。 以上、よろしくお願いします。 ---------------------------------- Sub sample() Dim buf As String Dim a As String buf = Application.GetOpenFilename(FileFilter:="テキスト文書,*.txt", Title:="サンプル") 'フルパスも含めたファイル名をbufに代入 With CreateObject("Scripting.FileSystemObject").GetFile(buf).OpenAsTextStream '指定したファイルを開く a = .ReadAll 'テキスト文書の内容を文字列aに代入 .Close '指定したファイルを閉じる End With End Sub

  • VBAで2変数の差分を取る方法  その2

    前回はありがとうございました。 まだ最終までは行ってないのですが、Wendyさんfumufumuさんに教えていただいたマクロともうまく動きます。 fumufumuさんの変数bufなんですが、この中身をシートに一行ずつ入れるにはどうするのでしょう。 Msgboxでは行ごとに綺麗に表示されす。 OpenAsTextStreamで開きReadAllで読み込んだbufの中身は配列になっているのでしょうか。 Splitで色々やってみたんですが、旨くいかいなです。 ---------------------------------------------------- Set fso = CreateObject("Scripting.FileSystemObject") With fso.GetFile(TXT).OpenAsTextStream .Skip size buf = .ReadAll .Close End With Set fso = Nothing MsgBox buf ------------------------------------------------------ fumufumuさんのDim fso As New FileSystemObjectでは動かなかったので Set fsoにするなど一部変えてあります。

  • エクセルVBAがエラーが出て作動しません。

    以下のVBAコードを作成してみました。ところが、"Sub Sample1()"の部分が黄色く塗りつぶされ、"get folder"が選択された状態で”Subまたはfunctionが定義されていません”というエラーがでます。こちらですがどこを直せばうまくいくかご教示いただけないでしょうか?因みにファイルを探すコードを試している過程でたまたまネットでコードを見つけたので試ている段階です。 ーーーーーーーーーーーーーーーーーーーー Sub Sample1() Dim f As Variant, buf As String, cnt As Long, FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") With Application.FileSearch .NewSearch buf = InputBox("ZGBL_DLV_SOM_RP0442_SLS_ORD (39).xlsx") If buf = "" Or buf = "False" Then Exit Sub .Filename = buf buf = GetFolder("C:\Users\ytsuruok\Desktop\test") If buf = "" Then Exit Sub .LookIn = buf .SearchSubFolders = True ''サブフォルダも検索する If .Execute() > 0 Then For Each f In .FoundFiles cnt = cnt + 1 Cells(cnt, 1) = f ''パス+ファイル名 Cells(cnt, 2) = FSO.GetFile(f).Name ''ファイル名 Cells(cnt, 3) = FSO.GetFile(f).ParentFolder ''パス Next f Else MsgBox "見つかりませんでした" End If End With Set FSO = Nothing End Sub ーーーーーーーーーーーーーーーー

  • ExcelVBAマクロでの改ページコードの削除方法

    ExcelVBAマクロについて確認させてください。 下記のようにWordファイルをテキストファイルに落として保存したファイルを 変数aに読み込んでいます。 このとき、読み込んだテキストファイルはWordファイルをテキストファイルに 落とし込んだファイルなので改行コードと改ページコードが残ってしまいます。 この改行コードと改ページコードを削除したうえで再度変数aに読み込むように しようと思っています。 ですが、今のところReplace関数を考えているのですが、 改行コードは削除出来ましたが、改ページコードが削除出来ません。 改ページコードを削除するプログラムを考えているのですが、可能でしょうか。 改ページコードは"^L"か"↓"に似た文字で表示されるようです。 以上、ご教授のほどよろしくお願いします。 ---------------------------------- Sub sample1() Dim a As String a = CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream.Readall a = Replace(a, vbCrLf, "") '改行コードの削除 CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream.Close End Sub

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

    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

  • VBAでtxtを読み込みxlsで保存したい

    C:\Documents and Settings\All Users\デスクトップ\sample.txt は次のようなデータになっています。 A B C 1,234 567,890 23,333 1,234 567,890 23,333 このデータをVBAを使ってExcelに読み込み、C:\Documents and Settings\All Users\デスクトップ\sample.xls として保存にしたいのですが、どのようなコードを書けばよいものでしょうか? sub test() Dim fso, f, ts Dim sline As String Set fso = CreateObject("scripting.filesystemobject") Set f = fso.getfile("C:\Documents and Settings\All Users\デスクトップ\sample.txt") Set ts = f.openastextstream(1) Do While ts.atendofstream <> True sline = sline & ts.readline & vbCrLf Loop ts.Close ' MsgBox sline End Sub ここまでいったのですが、slineをexcelにだすことができません。 教えていただけると助かります・。

  • ExcelVBAマクロについて確認させてください。

    ExcelVBAマクロについて確認させてください。 Wordファイルを開いて変数に保存するプログラムを作成したいのですが、下記の「With .Documents.Open(sFullPath)」のところで”型が一致しません。”と表示され、うまくいきません。 この原因は何か考えられるのでしょうか。 回避策をお教えいただければと思います。 Dim sFullPath As Variant Dim moji As String sFullPath = "C:\ドキュメント\test\AAAAA.docx" With CreateObject("Word.Application") With .Documents.Open(sFullPath) moji = .Content.Text .Close End With .Quit End With