• ベストアンサー

ファイルを文字化けせずに開けるVBAコードを教えて

アプリをダウンロードして、Excelファイルで開こうとすると文字化けします。 いろいろ調べたところ、一旦、テキストファイルで開き、 文字コードをUFT-8に設定して保存し、その後、Excelで開くと文字化けはしません。 毎週行いたい作業ですので、できればVBAコードで一発で文字化けせずに開けると ありがたいのです よろしくお願いします 補足:アプリはiphoneのCount Logというアプリです。 メールにファイルが添付されています。それを開くと文字化けしてしまうという話です。

  • inoru
  • お礼率77% (21/27)

質問者が選んだベストアンサー

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.12

こんにちは 元のデータの内容によるのかと思います。 Sub 読み込み()   Dim vData() As String   Dim txt2  As Object   Dim t   As Variant   Dim i   As Long   t = Application.GetOpenFilename("Csv Files (*.csv), *.csv", , , , False) '  t = Application.GetOpenFilename()   If t = False Then Exit Sub     Set txt2 = CreateObject("ADODB.Stream")   With txt2     '読み込みモード     .Mode = 3     'オブジェクトに保存するデータの種類を文字列型に指定する     .Type = 2     '文字列型のオブジェクトの文字コードを指定する     .Charset = "UTF-8"     'オブジェクトのインスタンスを作成     .Open     'ファイル読み込み     .LoadFromFile t     'ポインタを先頭へ     .Position = 0     '最終行までループする     ReDim Preserve vData(0)     Do While Not .EOS       '次の行を読み取る       vData(UBound(vData)) = .ReadText(-2)       i = i + 1       Cells(i, 1) = vData(UBound(vData))       ReDim Preserve vData(UBound(vData) + 1)     Loop     Range("A1").Resize(UBound(vData)) = _       WorksheetFunction.Transpose(vData)     .Close   End With   'メモリからオブジェクトを削除する   Set txt2 = Nothing   Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, Comma:=True End Sub これで試して貰って、エラーになった時にシート上の1列目の状態がどうなっているか 教えて下さい。

inoru
質問者

お礼

ushi2015さん読み込めました! デバックモードにならずに文字化けもありません! 私が仕組みがわってないところがイタいところですが・・ 'コメントブロックでの解説もありがとうございます。 何度も何度もありがとうございます。

その他の回答 (10)

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.11

回答No.6です。 この回答には、お礼も何もいりません。 単に「VBScript」の説明です。 「VBScript」はWindowsが標準で持っているプログラミング言語です。 「Microsoft Visual Basic Scripting Edition」の略です。 決して、メモ帳で走っている訳ではありません。 Windowsが「~.vbs」というファイルは、「VBScript」だと、認識して、「Windows」が走らせています。 「メモ帳」は、プログラムを書くのに使っただけで、他のソフトを使っても、テキストファイルになっていて、拡張子が「vbs」なら動きます。 テキストファイル、というのは、「文字情報だけのファイル」、すなわち、ワープロソフトなどでは、フォントが何、とか文字の大きさがどう、とかセンタリング、とか様々な情報が「あいうえお」には装飾されています。 しかし、そのような装飾がいっさいなく、単に「あいうえお」という文字だけの情報を「テキスト」と言います。 「csv」ファイルも、テキストファイルの1つです。 メモ帳で、この「あいうえお」だけの情報のファイルを開くと、メモ帳自身が、表示するフォントとして「MS ゴシック」などを使って表示していますが、それは表示するのに必要だから、「MS ゴシック」を割り当てているだけで、ファイルにはそんな情報は含まれていません。 「VBScript」は、実は、それだけでは、たいしたことはできません。 ファイルやフォルダすら扱うことはできないのですが、Windowsが持っているいろいろな機能を読み込むことによって、ファイルやフォルダ、エクセルだって、扱えるようになります。 Set u = CreateObject("Scripting.FileSystemObject") は、このファイルやフォルダを扱えるように、Windowsの機能を取り込んでいる1行です。 その次の行の「Set v = u.GetFolder(".")」は、上の機能を使って、「~.vbs」のファイルが存在するフォルダを取得しています(例えば、「D:\Programming\Test」など)。 「Set w = CreateObject("ADODB.Stream")」は、今回の場合は、「UTF-8」を扱えるようにするために取り込んでいます。 「Set x = CreateObject("Excel.Application")」で、エクセルを使えるようにしています。 といった具合です。 「Script」が付くと、簡易言語と呼ばれる分類になり、例えば、動画を動かして、シューティングゲームのようなものを作ることは不可能です(「Java Script」も「Script」が付いているので、「VBScript」と同じ程度のプログラミング言語です)。 しかし、今回のような処理においては、簡易言語の方が、極めて有用です。 作成も簡単ですし、短くて、必要な結果は、ちゃんと得られています。 仕事で使うなら、これで十分です。

inoru
質問者

お礼

vbaは勉強中なのですが、他のプログラミング言語は殆ど知らない状態ですので、勉強になります。 今回、csvファイルをメモ帳で開きましたが、CSVファイルってExcelから使うためだけのファイルじゃないんですね。 変数の設定みたいなことはvba以外のプログラミング言語でも行うようですね。 基礎の解説からしていただいてありがとうございます。 もうちょっと勉強します。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.10

こんばんは 元ファイルの文字コードや改行コードが分かるといいのですが・・・ Sub 読み込み()   Dim vData()   Dim txt2 As Object   Dim t   As Variant   t = Application.GetOpenFilename("Csv Files (*.csv), *.csv", , , , False)   If t = False Then Exit Sub   Set txt2 = CreateObject("ADODB.Stream")   With txt2     .Mode = 3     .Type = 2 '    .Charset = "EUC-JP"     .Charset = "UTF-8"     .LineSeparator = 10 '改行LF(10)     .Open     .LoadFromFile t     .Position = 0     ReDim Preserve vData(0)     On Error Resume Next     Do While Not .EOS       If Err.Number <> 0 Then         Exit Do       End If       vData(UBound(vData)) = .ReadText(-2)       ReDim Preserve vData(UBound(vData) + 1)     Loop     On Error GoTo 0     Range("A1").Resize(UBound(vData)) = _       WorksheetFunction.Transpose(vData)     .Close   End With   Set txt2 = Nothing   Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, Comma:=True End Sub

inoru
質問者

補足

度々申し訳ありません。 やはり同じところRange("A1").Resize(UBound(vData))=WorksheetFunction.Transpose(vData) でエラー(実行エラ-13) になってしまいます。 秀丸というソフトで調べたところ、 文字コードがUTF-8で 改行コードがCR+LF のようです。 よろしくお願いします。

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.9

#3です。 VBAはわかりませんが、 >いろいろ調べたところ、一旦、テキストファイルで開き、 >文字コードをUFT-8に設定して保存し、その後、Excelで開くと文字化けはしません。 としなくても、単純にメモ帳で開いて上書き保存(Ctrl+S)するだけで 文字化けは解消されると思います。 まぁ、手間はかかってしまいますが、今のやり方よりは若干よいかも しれません。

inoru
質問者

お礼

ここでもらったアドバイスとメモ帳から開く方法を併用して活用したいと思います。 ありがとうございます。

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.8

#3です。 >アプリをダウンロードして、Excelファイルで開こうとすると文字化けします。 すみません。ExcelでCSVファイルを開こうとして 文字化けするんですね。 このCSVファイルはCount Logってアプリからエクスポートした ものってことなんですかね。

inoru
質問者

お礼

すみません、そうです。 ExcelでCSVファイルを開こうとして文字化けしています。 このCSVファイルはCount Logというアプリからエクスポートしたものです。 言葉足らずでした。

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.7

#3です。 で、どうしてCSVをCount Logで開く必要があるのですか? Excelじゃダメなんですか?・・ってことを回答したのですが。。

inoru
質問者

お礼

すみません、言葉足らずでした。 CSVファイルを開くのはExcelで、Count LogはCSVファイルを生成するアプリです。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.6

「VBScript」でプログラムを書きました。 このプログラムの利点は、同じフォルダ内にあるすべての「csv」ファイルを、「UTF-8」としてエクセルに読み込んで、ファイル名を「csv」ファイルと同じファイル名にして、保存してしまうことです。 「VBScript」ですので、Windows限定です(Excel2007以上がインストールされていることも必要です)。 これは、大丈夫だと思いますが、「csv」ファイルは、もちろん「UTF-8」でなければなりませんし、改行コードも「CrLf」の、「Windows標準」の改行コードでなければなりません。 (実は今、仕事で、「UNIX」から「csv」ファイルにしたファイルを扱うことがあるのですが、「UNIX」は改行が「LF」で、ちょっと工夫が必要でした。) さて、以下のプログラムをメモ帳かテキストエディタに貼り付け、「~.vbs」というファイル名で保存してください。 「~」の部分は、何でも構いませんが、「.vbs」は半角文字でなければなりません。 出来たファイルを「csv」ファイルのあるフォルダに放り込んでダブルクリックすると、「Start!」と表示しますので、「OK」をクリックすると、作業を始めます。 そのフォルダ内にある、すべての「csv」ファイルを「csv」ファイルと同じファイル名のエクセルファイルにしてしまいます。 作業が終わると、「Finished!」と表示しますので、「OK」を押してください。 Option Explicit Dim a, b, c, d, e, i, u, v, w, x, y, z Set u = CreateObject("Scripting.FileSystemObject") Set v = u.GetFolder(".") Set w = CreateObject("ADODB.Stream") Set x = CreateObject("Excel.Application") MsgBox("Start!") For Each a In v.Files If LCase(u.GetExtensionName(a.Name)) = "csv" Then Set y = x.Workbooks.Add() Set z = y.Worksheets(1) w.Type = 2 w.charset = "UTF-8" w.Open w.LoadFromFile v & "\" & a.Name b = 0 c = 0 Do Until w.EOS d = split(w.ReadText(-2), ",") b = b + 1 z.Range("A" & b & ":D" & b).NumberFormat = "@" e = UBound(d) For i = 0 to e z.Cells(b, i + 1).Value = d(i) Next If e > c then c = e End If Loop MsgBox(c) z.Range(z.Cells(1, 1), z.Cells(b, c)).EntireColumn.AutoFit w.Close y.SaveAs(v & "\" & u.GetBaseName(a.Name) & ".xlsx") y.Close Set z = Nothing Set y = Nothing End If Next x.Quit Set x = Nothing Set w = Nothing Set v = Nothing Set u = Nothing MsgBox("Finished")

inoru
質問者

お礼

動作確認しました。 ありがとうございます。 メモ帳から動くソフトはバッチファイルしか知りませんでした。 VBScript、UNIX、改行コードを把握しておりませんが、勉強します。ありがとうございます。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.5

こんにちは 自分でファイル選択するなら、 t = Application.GetOpenFilename("Csv Files (*.csv), *.csv", , , , False) で。

inoru
質問者

補足

こんばんは。 何度もありがとうございます。すみません。 変数代入の行を t = Application.GetOpenFilename("Csv Files (*.csv), *.csv", , , , False) としまして、実行しましたが、 Range("A1").Resize(UBound(vData))=WorksheetFunction.Transpose(vData) の行で黄色エラーになります(実行エラー13と表示されます) どうしたらよいでしょうか?

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.4

こんにちは、No2です。 決まった場所の決まったファイルなら、 t = "H:\sync\PDCA\count.csv" でいいですけど、マクロで元のファイルを読み込んで、UTF-8で変換して 別ファイルに保存して開くようにした方がいいかも・・・・

inoru
質問者

補足

すみません退勤までパソコンを開けないのですが、 ファイルを開くコードは t=Application.GetOpenFilename("count(*.csv),*.csv", , , , False) でいいですか?

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.3

Count Logってただのカウンターのアプリでは ないのですか? 普通に添付されてきたExcelファイルを開きたいので あれば、Excelで開けばいいような・・と思うのですが。 ちなみにメールに添付されていくるファイルの拡張子は 何なのでしょうか。

inoru
質問者

補足

csvファイルです。 開くと 譌・莉・ 隗」縺・◆蝠城。・ 隱ュ繧薙□繝壹・繧ク謨ー n 繝代Φ逶ョ阮ャ 4back 5back 6back 7back 閻慕ォ・ 閻ケ遲・ 閭檎ュ・ SHR 蠑∝ス捺戟蜿・ 譁咏炊 騾夊ゥア 2016/8/29 0 0 0 0 0 0 0 0 0 のように文字化けします。 よろしくお願いします

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんにちは どのようなファイルなのか分からないのでダメかも知れませんが、 Sub 読み込み()   Dim vData()   Dim txt2 As Object   Dim t   As Variant   t = Application.GetOpenFilename("Log Files (*.log), *.log", , , , False)   If t = False Then Exit Sub   Set txt2 = CreateObject("ADODB.Stream")   With txt2     .Mode = 3     .Type = 2     .Charset = "UTF-8"     .Open     .LoadFromFile t     .Position = 0     ReDim Preserve vData(0)     On Error Resume Next     Do While Not .EOS       If Err.Number <> 0 Then         Exit Do       End If       vData(UBound(vData)) = .ReadText(-2)       ReDim Preserve vData(UBound(vData) + 1)     Loop     On Error GoTo 0     Range("A1").Resize(UBound(vData)) = _       WorksheetFunction.Transpose(vData)     .Close   End With   Set txt2 = Nothing End Sub こんな感じで読み込めますか?

inoru
質問者

補足

すみません パスは"H:\sync\PDCA\count.csv"です。 開きたいファイルはcsvファイルです。 パスの指定は、以下の t = Application.GetOpenFilename("\count.csv", , , , False) では駄目ですか? ゲットオープンファイルネームのところでエラーになります。 エラー1004と表示されます。

関連するQ&A

  • csvファイルの文字コードを変更するvbaコード

    お世話になってます。 ¥C:User¥documentのフォルダにあるBefore.csv(中身の文字コードはUnicode)のデータを文字コードをUft-8に変更して別名保存して 同フォルダ内のAfter.csv(元々あるファイルでも新規作成でも大丈夫です)として保存するvbaコードを教えてもらえませんか。 毎週使痛いコードなのでよろしくお願いします。

  • Xperiaは添付されたテキストは文字化けせず見れますか?

    Xperiaは添付されたテキストは文字化けせず見れますか? 現在、iPhoneの3GSを使用しています。 仕事用に購入したのですが、iPhoneは添付されたテキストは文字化けしてしまいます。 iPhoneで添付テキストファイルを見るためには、本文を空にして再送しなければいけません。 仕事上、エクセルやワードよりもテキストが添付されてくることが多いので、文字化け対策として、本文を空にして再送しています。 ですが、数が多いので、それをしてるとかなり時間をロスします。 これが非常に面倒です。 もし、Xperiaで添付テキストが文字化けせずに閲覧出来るのであれば、買い替えを検討したいと考えています。 ご存知の方は、教えて頂けますでしょうか?

  • エクセルのバージョンの違いによる文字化け

    エクセル2003でマクロ(VBA)を開発しました。 そのファイルをエクセル2007で開いたところ、VBAのソースコードの一部が文字化けしてしまいます。 特に日本語のところが文字化けしています。 どうしたら解決するのでしょうか?

  • EXCEL vbaで化け文字を検索

    EXCELシートを、csvファイルにしてテキストエディタで開くと一部文字が「?」で表示されます。 調べてみると"垂直タブ"(コード「0B」)が「?」で表示されました。その他にも色々とあります。 テキストエディタで開いて、化ける文字がシート内に存在するか否かをチェックする方法はありませんか?(VBA) たとえば、 asciiコード表 sjisのコード表のどの範囲がテキストファイルでも化けないのか?が分かれば コードチェックでわかるのでは? 教えてください。

  • VBA(テキストファイルのデータ コピー)

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

  • メールの添付ファイルが文字化け

    メールの添付ファイルが文字化けします。 文字化けする添付ファイルはエクセルです。 LANでつながっている別のパソコンで同じようにメールを受信してみて、同じメールの添付ファイルを開くと文字化けせず問題なく開きます。 送り先に確認しても、そちらのパソコンでは問題なくエクセルのファイルは開くそうです。 また、特定の送り先からのメールの添付ファイルが文字化けするのではありませんし、内容が異なるファイルで文字化けが起こります。 これはなぜでしょうか? この状況を考えると、その文字化けするパソコンに何らかの問題があるように思います。 文字化けの原因と解決方法を教えて下さい。 Outlook Express6 エクセル2003 お分かりの方がいらっしゃれば教えて下さい。 よろしくお願いします。

  • テキストファイルが文字化けする

      エクセルのシートからテキストファイルに VBAで出力しようとしたのですが、 出力したテキストファイルは文字化けしてしまいます。 Dim ws As Worksheet For Each ws In Worksheets ws.SaveAs ws.Name + ".txt" Next ws としたのですがどこがいけないのでしょうか? アクティブにしているエクセルのファイルのシートは、 1つだけとしています。 *Excel2002を使用しています。 お願い致します。

  • Outlook(iPhone版)で文字化け

    iPhoneでOutlookを使っていますが、ゆうちょから受信するメールを開くと文字化けしています。 なお添付ファイルなしであれば文字化けしませんが、添付ファイルのあるメールだと 必ず文字化けしているようです。 受信一覧のプレビューのような画面では文字化けしていませんが 全文読もうと中身を開くと文字化けになっています。 以前はsparkのメールアプリを使っていましたが、ゆうちょからのメールは文字化けすることはなかったです。 OutlookまたはiPhoneの設定で解決できるのであれば教えてほしいです。よろしくお願いします。

  • 添付のファイルが文字化けしている。

    こんにちは。 あるPCメーカーに質問があって、その返事がメールで送られてきたのですが、メール本文はカラで添付ファイル(.txt)に要件が書かれている・・・はずなのですが、テキストファイルが全て文字化けしています。 ちなみにメールタイトルは大丈夫です。 そもそもなぜメール本文をわざわざテキストファイルにして添付するのかわからないのですが、早く内容を読みたいので、この文字化けファイルを読む方法を教えていただきたいです。 よろしくお願いします。

  • VBA CSVファイルの文字コードをANSIからUFT-8に変更する方法

    VBAを勉強している初心者です。 VBAでCSVファイルの文字をANSIからUFT-8に変更する方法を教えてもらえませんでしょうか。

専門家に質問してみよう