[[20150825203850]] 『CSVで保存したデータの文字化けについて』(苦戦4日目) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『CSVで保存したデータの文字化けについて』(苦戦4日目)

 テキストデータを文字コード「Unicod」で出力し、
 エクセルに貼り付け、加工してCSVで保存しています。

 保存したデータをインポートしているのですが、
 インポートした先で文字化けしてしまい困っています。

 現在のコードは以下になります。

 Sub 取込用()

    Dim r As Long
    Dim myCnc1     As String
    Dim myCnc2     As String
    Dim myFileName As String
    Dim sheet1 As Worksheet

    Columns("A:P").ClearContents

    myFileName = "出力.txt"

 Set sheet1 = Worksheets(1)
 sheet1.Activate

    myCnc1 = "TEXT;"
    myCnc2 = ThisWorkbook.Path & "\" & myFileName

 ' ==================================================================
    With ActiveSheet.QueryTables.Add( _
        Connection:=myCnc1 & myCnc2, _
        Destination:=Range("A1"))

        .TextFilePlatform = 932
        .TextFileCommaDelimiter = True
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1)
        .Refresh
    End With
 ' ==================================================================

    MsgBox Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row).Count

    With Rows("1:1").Select
    Selection.AutoFilter
    ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add Key:=Range _
        ("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Selection.AutoFilter
    Range("A1").Select

    End With

    MsgBox Range("B2").End(xlDown)

    Columns("P:P").Select
    Selection.Cut
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight
    Columns("K:K").Select
    Selection.Delete Shift:=xlToLeft
    Columns("M:N").Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select

    With Range("A1").CurrentRegion
        .AutoFilter Field:=4, Criteria1:="0"
        .Offset(1).EntireRow.Delete
        .AutoFilter
    End With

    r = Range("D" & Rows.Count).End(xlUp).Row

    Columns("D:D").Insert
    Range("D2:D" & r).FormulaR1C1 = "=LEFT(RC[1],10)"

    Range("D2:D" & r).Value = Range("D2:D" & r).Value

    Range("E1").Copy Range("D1")
    Columns("E:E").Delete
    Columns("H:H").NumberFormatLocal = "0_);[赤](0)" 
    Columns("I:I").AutoFit
    Rows(r + 1 & ":" & Rows.Count).Delete
    Columns("D:D").AutoFit

    Range("C2").Select
    Range(Selection, Selection.End(xlDown)).Select

    If Range("b2:b2") = "" Then
     MsgBox "0"
    Else
     MsgBox Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row).Count
    End If

    Dim book1 As Workbook

    Set book1 = Workbooks("F.xlsm")
    book1.SaveAs Filename:="F取込.csv", _
        FileFormat:=xlCSV 

  End Sub

 調べたところ、文字コードを「UTF-8」にすると文字化けしないという事で、
 以下のコードをネットで見つけました。
 点線で囲った部分に入れてみたのですが…

   Dim i As Long
   Dim j As Long
  Dim strList As String
  Dim strSplit() As String
  Dim adoSt As Object
 Set adoSt = CreateObject(ADODB.Stream)★
  i = 1
  With adoSt
    .Type = adTypeText
    .Charset = "UTF-8"
    .Open
    .LoadFromFile ("出力.txt")
    Do While Not (.EOS)
      strList = .ReadText(adReadLine)
      strSplit = Split(strList, ",")
      For j = LBound(strSplit) To UBound(strSplit)
        Cells(i, j + 1) = strSplit(j)
      Next
      i = i + 1
    Loop
    .Close
  End With

 実行してみると★部分で「実行時エラー424:オブジェクトが必要です」となります。

 だいぶ前に参考書を読みながら作ったもので、
 ひどいものなのかもしれないのですが、
 どうしたら文字化けしないように出来るのか、
 ご教示いただけないでしょうか?

 よろしくお願いいたします。

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 Microsoft ActiveX Data Object
 の参照設定はしてますか?
(カリーニン) 2015/08/25(火) 21:25

 参考HPです。

http://amano41.hateblo.jp/entry/2014/04/25/145637
(カリーニン) 2015/08/25(火) 21:28


 よく見たら

 >Dim adoSt As Object

 ですので参照設定は不要ですね。
(カリーニン) 2015/08/25(火) 21:41

 >.Charset = "UTF-8"

 これを決め打ちしないでFunctionなどで取得してからSetするようにしてはいかがでしょう?

 参考HPです。
http://scripting.cocolog-nifty.com/blog/2007/02/vba_937b.html
(カリーニン) 2015/08/25(火) 22:26

     .TextFilePlatform = 932
 は、Shift_JISを指定したことになっているからです。
 マクロ記録をとって確認してはどうですか?
 もし、Unicode(UTF-8)なら、
 .TextFilePlatform = 65001
 とする必要があるでしょう。

 ちなみに、コードは読んでいませんが、
 Set adoSt = CreateObject(ADODB.Stream)
 は、少なくとも  CreateObject("ADODB.Stream")としないとダメでしょう。
(γ) 2015/08/26(水) 02:40


 シートのコードネームになりえる名前を変数名に使うのはやめた方が良いと思います。
 (Sheet1があればだけど紛らわしいし・・)
 最近多いなこういうの。dirとかFindとか。
() 2015/08/26(水) 17:44

ひと言で言うと、
ADODB.Streamなど使わなくても、
基本的機能だけでUTF-8のCSVファイルは読み込めるのです。

外部データの取り込み - テキストファイル を実行すると、
日本語の文字コードを選択するボックスがあるはずです。

http://pasofaq.jp/office/excel/excel2010import.htm
にExcel2007の例が絵つきで説明されています。

そこで Unicode(UTF-8)を選べば良いだけです、
それをマクロ記録とれば、貴君のコードを
.TextFilePlatform = 65001
と修正すればよいことがわかるはずです。(私自身は未確認であるが)

なぜ、コメントしているのに放置されているのか理由が判りません。
色々なサイトの紹介があって、そちらに注力しているのでしょうか。
不思議だ。

なお、Selectionの多用はやめたほうがいいとか、改善点は色々あるのかも
しれないが、まずは課題の中心から対応してください。
(γ) 2015/08/27(木) 20:33


 ご教示ありがとうございます。

 以下、やってみたことです。

 参照HP見ましたが、まったく分かりませんでした…

 .TextFilePlatform = 65001
 CreateObject("ADODB.Stream")
 としてみましたが、 文字化けは直りませんでした。

 書きましたコードは参考書についていたものを使用し、
 マクロの記録を取って、勉強しながら書き直したもので、
 まったくの初心者でして、
 お三方のおっしゃっている意味を理解したいと思い、
 色々と調べたのですが、お恥ずかしいことに分からないのです。

 明日、もう一度色々調べてやってみますが、
 取り急ぎ現状を報告に参りました。

 みなさん、ありがとうございました。
 明日、また来ます。

(苦戦4日目) 2015/08/27(木) 20:45


 γさま
 放置しているつもりはありませんでしたが、
 レスが遅れてしまい申し訳ございませんでした。

 windowsに入っているソフトで毎日データを落とし、
 加工して、そのデータをmacに入れているのですが、
 そのmacの方で文字が化けてしまっています。

 データを落とす時の文字コードは現在shift-JISです。
 ここでUTF-8にしないとだめなのでしょうか?

 参照を付けていただいたので、
 明日もう一度やりご報告に参ります。
(苦戦4日目) 2015/08/27(木) 20:55

> windowsに入っているソフトで毎日データを落とし、
> 加工して、そのデータをmacに入れているのですが、
> そのmacの方で文字が化けてしまっています。
そんな話は今までどこにも書いてないじゃないですか。
< 使用 Excel:Excel2007、使用 OS:Windows7 >
じゃないの?

(γ) 2015/08/27(木) 20:58


 γさま
 はじめに書くべきでした。
 後出しになってしまい申し訳ございませんでした。
 windowsでソフトからデータ抽出、加工
 macに切り替えて加工したデータを入れています。
 申し訳ありませんでした。

(苦戦4日目) 2015/08/27(木) 21:20


windowsのExcelマクロで作成したCSVファイルをMacに渡すのではなく、xlsxブックで渡せば良いのでは?
CSVだと、そりゃ文字コード体系の違うOSですから、ちゃんと変換しないと読めませんよね。
(???) 2015/08/28(金) 11:51

 ???さま、コメントありがとうございます。
 ???さまのコメントを今読んだので、
 本日はご教示の方法を試せていませんが、
 来週必ずやってみます。
 他の方法は参照ページも読んだのですが、
 何をどうしたらいいのかまったく分からず。
 引き続きやってみます。
 ありがとうございました。
(苦戦4日目) 2015/08/28(金) 21:08

 大変遅くなりましたが、xlsxブックで渡し、
 文字化けせずにデータを移せました。
 本当にありがとうございました。
 お返事が遅れまして申し訳ございませんでした。
(苦戦4日目) 2015/09/12(土) 21:28

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.