1.環境
Microsoft Windows7 64ビット
Microsoft Ofiice2013 Excel2013 32ビット
2.事象
テキストファイルに定義しているUNICODEを読むと文字化け(?)します。
メモ帳等のテキストファイル上はUNICODEを文字化けせずに目視で確認しています。
どうしたら文字化けせずに読めるのでしょうか?
どなたか詳しい方、ご教授願います。
3.テキストファイル(test.dat)
❶
4.VBA
・参照設定([ツール(T)]バー-[参照設定(R)…])
レ Microsoft ActiveX Data Objects 2.8 Library
・ソース
※例どっちでも、文字化けします。
Dim a, b As String
例1)
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Type = adTypeText
.Open
.LoadFromFile "C:\test.dat"
a = .ReadText
.Close
End With
例2)
Open "C:\test.dat" For Input As #1
Do Until EOF(1)
Line Input #1, b
Loop
Close #1
No.11
- 回答日時:
> (◆◆の中に(?)v')が見れました。
UTF-16BEをUTF-8で読んでいるように見えます。
> -3でした。
既に文字化けしてU+FFFD Replacement Caracter「�」になっているようですね。
No.12
- 回答日時:
No10です。
>秀丸で❶を改行付き、Unicode16(UTF-16) □BOMを付ける(※チェック有)で保存
上記を見落としていました。
入力ファイルはUTF-8ということのはずですが?
秀丸で❶を改行付き、UTF-8 □BOMを付ける(※チェック有)で保存して再テストしていただけませんか?
念の為、確認しますが、
入力ファイル UTF-8 BOM付き
出力ファイル UTF-8 BOM付き
があなたの望んでいる要件で間違いないでしょうか?
No.13
- 回答日時:
#7の回答者です。
Excel VBAはあくまでも、Excel の中だけの話で、テキストファイルとして出力する場合は、それなりの加工でもするのでしょうか。
何か、前回の別のご質問者さんと同じようなストーリー展開です。
>書き忘れていたのですが、したい事はExcelVBAを通して別のテキストファイルに「❶」を出力させる事です。
Excelのシート上で、Unicode を表示させることなら話は分かるけれども、Excel VBAを媒体にして、単なる入出力だけでは、Excelを使う意味があるとは思えません。全体の中のひとつの問題でしたら、まだまだ、解決はしないはずです。しかし、もしそう状況な、あえてVBAなどは使わないで、&ペーストをしたほうが手っ取り早いし、コピーしてクリップボードまで入れるという、ブログラムにしてもよいと思います。
以下は、全自動化はできませんでしたが、オールラウンド対応です。UTF-8のBOMなしの判定が正しくできません。ほかは大丈夫だと思います。UTF-8のBOMなしは、確率で出すそうですから、コードが長すぎてしまいます。HTMLオブジェクトで文字の判定をさせています。しかし、初めからEncodeをキメウチするなら、数行で済むものです。
コードは、必要に応じて、オブジェクトの解放を加えてください。まあ、ご質問者さんは、こちらの書いているのは読まれていないようでしたら、それならそれで、スルーしても構いません。ひとまず、こちらは、自分自身の問題を解決したので、これで終わりです。
'//
Const MYPATH = "C:\Temp\Test1\" 'プロシージャの中でも構わない
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Sub TextImport()
Dim buf As String, arBuf
Dim FileName As String
Dim EncodeType As String
Dim oHTML, oFile
Dim i As Long
Dim ret As VbMsgBoxResult
Dim objStream As New ADODB.Stream '参照設定のこと
FileName = MYPATH & "Sample.txt" 'ファイル名
'エンコード判定
With CreateObject("Scripting.FileSystemObject")
Set oFile = .GetFile(FileName)
Set oHTML = GetObject(oFile.Path, "HTMLfile")
Sleep 1000
EncodeType = oHTML.CharSet
End With
If EncodeType Like "shift_jis" Then
ret = MsgBox(EncodeType & ": " & vbCrLf & _
"目的のテキストファイルが、Shift-JISでない可能性があるなら、" & vbCrLf & _
"これは、UTF-8 BOMなしファイルであるかもしれません。" & vbCrLf & _
"UTF-8 で実行しますか?", vbYesNoCancel)
If ret = vbYes Then
EncodeType = "UTF-8"
ElseIf ret = vbCancel Then
Exit Sub
End If
End If
objStream.CharSet = EncodeType
objStream.Open
objStream.LoadFromFile FileName
buf = objStream.ReadText
arBuf = Split(buf, vbCrLf)
For i = 0 To UBound(arBuf)
Cells(i + 1, 1).Value = arBuf(i)
Next i
End Sub
No.14ベストアンサー
- 回答日時:
できないときは、何か肝心なミスを見逃していることがあります。
>セル自体にUnicodeを対応していると思っています。
Excel 2003の頃から、対応はしているのですが、本格的な対応は、
Excel 2013 前後だと思います。新しい文字関数が増えましたからね。
>入力テキストファイルから出力テキストファイル
これは、ADODB.Stream で対応可能なはずです。
しかし、私の経験では、逆に、セルからの出力テキストの場合は、まったくやり方が違う方法を思いつきました。いずれにしても、私の範囲内では、UTF-8とUTF-16 は、共有しませんから、要注意だと思います。思わぬ失敗をしている時があります。
学ばれるのでしたから、以下のサイトがよいです。
NonSoft というサイトです。
http://nonsoft.la.coocan.jp/SoftSample/SampleMod …
私も、それなりに、この問題をそのサイトを中心に格闘した上でのことですが、ただ、こういう話は、どちらかというと、VB6系よりも次の世代の言語のプログラムに任せたほうが早いのです。さしずめ、PowerShellあたりでも対応可能なのですから、本当に、ばかばかしいと思うぐらいに簡単になってしまいました。
それと、ご存知かもしれませんが、有名なUnix系ツールのnkf32 あたりが、巨大ファイルの変換が思うに任せないようです。私の間違いかもしれませんが。それで、試しに、Notepad++ で、あっけなく変換してしまったので、本当に拍子抜けしてしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Ruby パイソンでテキストファイルが読み込めない 1 2022/11/14 16:42
- その他(ソフトウェア) powershell で出力したテキストファイルをvim で開くと文字化け 2 2023/01/11 21:39
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- C言語・C++・C# VisualStudioのソースコードで漢字を使いたい 4 2022/05/21 10:16
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Excel(エクセル) 文字化け。メモ帳でUTF-8に変換後、エクセルへ貼り付けたいです。 3 2022/08/14 07:21
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
コマンドボタンのキャプションが文字化けしたりする原因
Visual Basic(VBA)
-
Line Inputで文字化け(助けて下さい)
Visual Basic(VBA)
-
テキストデータExcel取込時の文字化けと、その他
Visual Basic(VBA)
-
-
4
VBAにて読み込みが出来ない環境依存文字 ㉖ の文字コードを教えて下さい。
Excel(エクセル)
-
5
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
6
StrConvでUnicodeに変換出来ない文字
Visual Basic(VBA)
-
7
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
8
ウォッチ式の文字数制限について
Visual Basic(VBA)
-
9
エクセルマクロ セルをクリックするたびに記号を入力
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
.txtではなく.logの方が良いの...
-
拡張子を元に戻す
-
VBAでワークシートを引数として...
-
FTPのコマンド「mput」について
-
テキストファイルで提出とは?
-
C言語、ファイルの存在チェック...
-
テキストの保存
-
VBAでエクセルをtxtに変換する...
-
javaでemlファイルからtxtファ...
-
COPYコマンドで結合すると余計...
-
ファイルの最後に文字列挿入
-
【csh】ファイルの中の値を配列...
-
多数のサブディレクトリ内のフ...
-
テキストファイルのファイル名...
-
コマンドプロンプトでのファイ...
-
バッチファイルで文字列削除に...
-
エクセルの各セルの内容をそれ...
-
ハードディスク上書き用大容量...
-
VB6.0 でのテキストファイルの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
VBAでワークシートを引数として...
-
.txtではなく.logの方が良いの...
-
拡張子を元に戻す
-
多数のサブディレクトリ内のフ...
-
COPYコマンドで結合すると余計...
-
バッチファイル 複数ファイル...
-
テキストファイルで提出とは?
-
バッチファイルで文字列削除に...
-
Windowsのバッチファイルを利用...
-
テキストファイルのファイル名...
-
ファイルの最後に文字列挿入
-
psqlでエラーログをとりたい
-
forfilesで検索したファイルを...
-
バッチファイルからVBAに引数を...
-
accessでSQL文を使ってcsvファ...
-
テキストファイルのタブをカン...
-
MATLABで行列を配列に格納する方法
-
renameコマンドについて
-
【Excel】 VBAを使って毎回名前...
おすすめ情報
UTF-16LEに変更して実行後、下記のエラーが出ました。
困っています。
解消方法を願います。
■エラー詳細
Err.Number:3001
Err.Description:引数が間違った型、許容範囲外、または競合しています。
64ビット版の秀丸エディタで、開きました。
次に[メニュー]バー-[ファイル]-[名前を付けて保存(A)…]
名前を付けて保存画面
エンコードの種類(C): [自動判定 - Unicode(UTF-8)] □BOMを付ける(※チェック無)
Unicode(UTF-8) BOMはグレー表示(BOM無)になっています。
開いたファイルの内容は、秀丸できちんと表示されています。
ソースの提供ありがとうございました。
下記のようにして参照設定を変更してソース実行をしました。
まだ、文字化け(?)をします。
ちなみに試しに①は、文字化け(?)をせずにきちんと表示されました。
また、Microsoft ActiveX Data Objects 2.8 Libraryに戻して、実行も文字化けしています。
後、例1の実行も文字化けしています。
■参照設定の変更
・参照設定([ツール(T)]バー-[参照設定(R)…])
レ Microsoft ActiveX Data Objects 6.1 Library
皆さん、様々な情報ありがとうございます。
秀丸で❶を改行付き、Unicode16(UTF-16) □BOMを付ける(※チェック有)で保存
> この文字をexcelのシートに直接出力すれば、きちんと表示されます。
結果は文字化けです。
(◆◆の中に(?)v')が見れました。
> ・読み込んだテキストがどんな文字列になっているか、1文字1文字ascWでコードを調べる
-3でした。
> Shift_JISに無い「黒地の丸数字」が変換できずに「文字化け」になっている、というものです。
と自分も思います。
書き忘れていたのですが、したい事はExcelVBAを通して別のテキストファイルに❶を出力させる事です。
今の文字化け状態で別のテキストファイルにそのまま出力で、あるソフト変換にて正しく表示出来ればOKです。
果たしてそのUnicodeを維持していればいいのですが…
皆さんのアドバイスを元に色々、試しました。
結果、NGです。
発想を変えて、入力テキストファイルから出力テキストファイルではなく、シートのセルから出力テキストファイルに変更しました。
結果、OKです。
これは、セル自体にUnicodeを対応していると思っています。
自分だけでは、解決出来ず、皆さんのアドバイズに感謝しています。
ありがとうございました(__)。