最速怪談選手権

質問No.773038にて 回答No.5で 実際にやってみると 確かに動作は抜群に質問通りですが
文字化けして エクセルに貼られています。
肝心の テキストデータの保存方法が悪いのか  検討が付きません。
私個人は アプリから csv 変換用があり やっているのです。しかし エクセルにて手作業にて
テキストファイルウィザードで カンマやタブの区切り・・・ 元のファイルは 932 日本語(シフト JIS)
フィールドの区切りは セミコロンとしてやり セルにしてやると 確かに問題なく 文字化けしません
何故 VBAでやると 文字化けするのか 原因がわかりません。
どなたか 文字化けに出会った人はいませんか?
対応策があれば ご教授願います。

A 回答 (5件)

No2No4です。



試しに以下のコードで開いてみてください。新しいファイルで開きます。

Sub Example()
Dim FileName As Variant

FileName = Application _
.GetOpenFilename("テキスト ファイル(*.csv;*.txt),*.csv;*.txt")
If FileName = False Then Exit Sub

Workbooks.Open FileName:=FileName, Format:=4

End Sub
    • good
    • 0
この回答へのお礼

やはり テキストデータの保存方法の種類なのか 構文がまずいのか 悩殺しまして やはり 構文がまずかったようです。
人によって こんなに差が出るとは 思いませんでした。
お世話かけまして ありがとうございました。
今後もよろしく!!

お礼日時:2014/06/15 21:28

> カンマ区切りではなく 文字化けしてセミコロン区切りになっています。



失礼しました。
Ary = Split(InData, ";")
にすると文字化けは別として区切りは正常になります。Trimも不要だと思うので外しました。

あと、もとのデータが2行で一塊なのかどうか、1行で一塊でしたら
Const RwSet As Integer = 2
の2を1にする必要があります。1ならFor~nextが不要なのですが元のコードを利用するという事で。
    • good
    • 0

どんなデータが文字化けするのかもう少し情報がないと原因はつかみにくいですね。




質問773038の解答で行っていることは、2行(指定行)で1データの半角スペースで区切られたテキストファイルを読んで、1行(の位置)にしてExcelに貼り付けています。無条件の貼り付けです。質問者様はsplit関数の区切り文字にセミコロンを指定されている?

例えば、メモ帳に「1-2-3;02E02;0001;1/30;10 AM」と入力して、これをコピーしてExcelに貼り付けて区切り位置ボタン>「区切り位置指定ウイザード」で区切り文字をセミコロンにして他は何も指定しないで区切ってみてください。

 「2001/2/3 | 2.00E+02 |  1 | 1月30日 | 10:00 AM」

のように「文字化け」するはずですが、属性を指定していないのでExcelの仕様になります。質問773038のモジュールで行われているのはこれと同じです。

>手作業にて~セルにしてやると 確かに問題なく 文字化けしません
どんな手作業かわかりません。列の属性を指定していませんか?

>対応策があれば ご教授願います。
業務でテキストファイルを読むときは、ウィザードで「列のデータ形式」を指定しています。

この場合は、テキストファイルの方が複数行で1データを表しているはずなので、テキストファイルの複数行を1行にするプログラムを作り、1行単位にしたファイルに対して、Excel側では区切り位置ボタン>「区切り位置指定ウイザード」で各列の「列のデータ形式」を指定すればいいでしょう。


外していたらすいません。

この回答への補足

メモ帳に「1-2-3;02E02;0001;1/30;10 AM」と入力して、これをコピーしてExcelに貼り付けて区切り位置ボタン>「区切り位置指定ウイザード」で区切り文字をセミコロンにして他は何も指定しないで区切ってみてください。
そうすれば2001/2/3 | 2.00E+02 |  1 | 1月30日 | 10:00 AM になります 確かに その通りに表示です
それに、列の属性は指定していません。
ほかの方法を 考えます
検討して下さってありがとうございます。

補足日時:2014/06/15 10:55
    • good
    • 0

質問No.773038の回答にあるVBAでは区切りはスペースであるという前提で作成されています。

カンマ区切りのCSVで実行すると文字化けするかどうかは別として正常にデータが区切られないと思います。

カンマ区切りでしたら
Ary = Split(Trim(InData), ",")
に変更する必要があります。

この回答への補足

カンマ区切りではなく 文字化けしてセミコロン区切りになっています。

Title;Artist;Album;Track;Year;Length;Size;LastModified;Path;Filename;r0s0M0;「丙0・ヒ0;14.01g燈・・ュ0・ー0;1;2014;283;4.31
こんな感じです

補足日時:2014/06/15 11:01
    • good
    • 0

状況がよくわかりませんが、エクセルVBAでテキストを読み込む場合、そのファイルの文字コードはシフトJIS前提だと思います。


もし読み込むファイルの文字コードが、UTF-8とか、UNICODEであれば、それをプログラムで指定してあげないと、文字化けします。

検索で”VBA 文字化け”とすれば、いろいろ情報が得られます。

また、VBA内にて、処理のどの段階で文字化けしているか、デバックしてみるのもいいと思います。
    • good
    • 0

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