Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7117 / 13646 ツリー ←次へ | 前へ→

【41096】外部データの取り込みにおける文字化けについて taka 06/7/29(土) 10:48 質問[未読]
【41097】Re:外部データの取り込みにおける文字化け... Blue 06/7/29(土) 12:23 発言[未読]
【41109】Re:外部データの取り込みにおける文字化け... taka 06/7/30(日) 13:23 質問[未読]
【41116】Re:外部データの取り込みにおける文字化け... Blue 06/7/30(日) 21:08 発言[未読]

【41096】外部データの取り込みにおける文字化けに...
質問  taka  - 06/7/29(土) 10:48 -

引用なし
パスワード
   どなたか外部データの取り込みにおける文字化けを防止できるマクロについておしえていただけないでしょうか?

エクセルにより外部データの取り込みをおこなうと、文字化けするページがあります。これはなんらかの方法で、文字化けせずに取り込みをおこなえるものでしょうか?何卒、宜しくお願いいたします。

ちなみに記述したマクロは以下のとおりです。

With ActiveSheet.QueryTables.Add(Connection:= _
    "URL;http://jp.moneycentral.msn.com/investor/invsub/results/statemnt.aspx?lstStatement=CashFlow&Symbol=9501" _
    , Destination:=Range("A1"))
    .Name = "statemnt.aspx?lstStatement=CashFlow&Symbol=9501"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .WebSelectionType = xlSpecifiedTables
    .WebFormatting = xlWebFormattingNone
    .WebTables = "7"
    .WebPreFormattedTextToColumns = True
    .WebConsecutiveDelimitersAsOne = True
    .WebSingleBlockTextImport = False
    .WebDisableDateRecognition = False
    .WebDisableRedirections = False
    .Refresh BackgroundQuery:=False
  End With

【41097】Re:外部データの取り込みにおける文字化...
発言  Blue  - 06/7/29(土) 12:23 -

引用なし
パスワード
   >URL;http://jp.moneycentral.msn.com/investor/invsub/results/statemnt.aspx?lstStatement=CashFlow&Symbol=9501
を開いて、ソースを確認してみたところ、metaタグで charset=Shift-JIS なっているにもかかわらず、
文字コードが UTF-8 でかかれているようです。

ですので、WebQueryがShift_JISと認識して解析するのが問題なのかなぁと。

で、WebQueryでは文字コードを指定できないのらしいので、別のアプローチでデータを取得すること
考えてみてはどうでしょうか?

参考
http://www2.moug.net/bbs/exvba/20060615000030.htm
※このサイトは時間がたつと参照できなくなります。

【41109】Re:外部データの取り込みにおける文字化...
質問  taka  - 06/7/30(日) 13:23 -

引用なし
パスワード
   Blueさま

ご丁寧なご回答どうもありがとうございました。一日中頭をひねったり、さらにリサーチしておりましたが、理解できませんでした。。。(涙)

教えていただいたリンクをたどっていき、文字コードの変換(UTF-8→S-JIS)をADODB.Streamをつかってやるあたりからついていけなくなりました。
これは、WebQueryのマクロのどこかにいかのようなコードを埋め込めばWebQueryを用いて文字化けせずにエクセルにデータを取り込むことができるということでしょうか?

申し訳ございませんが、再度ご教授お願いいたします。


Sub S_JIS1()

  Dim s As String
  With New ADODB.Stream
    .Open
    .Charset = "UTF-8"
    .LoadFromFile "C:\UTF-8.txt"
    s = .ReadText

    .Position = 0
    .SetEOS
    .Charset = "Shift_JIS"
    .WriteText s
    .SaveToFile "C:\S_JIS.txt" ' , adSaveCreateOverWrite
    .Close
  End With

End Sub

【41116】Re:外部データの取り込みにおける文字化...
発言  Blue  - 06/7/30(日) 21:08 -

引用なし
パスワード
   IEオブジェクトを利用して、Shift_JISコードの一時ファイルをHTMLファイルを
作成し、無理やりWebQueryを使う方法です。
    ^^^^^^^^

WebQueryを使ったことないので、間違っているかもしれませんが。。。

  Dim url   As String
  Dim temp  As String
  Dim filenum As Integer
  
  url = "http://jp.moneycentral.msn.com/investor/invsub/results/statemnt.aspx?lstStatement=CashFlow&Symbol=9501"
  temp = ThisWorkbook.Path & "\temp.html"
  
  With CreateObject("InternetExplorer.Application")
    .Navigate url
    Do While .Busy
      DoEvents
    Loop
    filenum = FreeFile
    Open temp For Output As #filenum
      Print #filenum, .document.all(0).outerhtml
    Close #filenum
    .Quit
  End With
  
  With ActiveSheet.QueryTables.Add(Connection:="URL;" & temp, Destination:=Range("A1"))
    .Name = "statemnt.aspx?lstStatement=CashFlow&Symbol=9501"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .WebSelectionType = xlSpecifiedTables
    .WebFormatting = xlWebFormattingNone
    .WebTables = "7"
    .WebPreFormattedTextToColumns = True
    .WebConsecutiveDelimitersAsOne = True
    .WebSingleBlockTextImport = False
    .WebDisableDateRecognition = False
    .WebDisableRedirections = False
    .Refresh BackgroundQuery:=False
  End With
  
  Kill temp

たぶん、IEオブジェクトを使っている時点で、WebQueryをいちいち使うことないと思いますが。
(Documentオブジェクトから任意のテーブルを抜き出せばできそうだが。。。私は面倒なので考えませんけど、、、)

7117 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free