• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:excel2003でwebクエリによるデータ取得時に文字化けします。)

Excel2003でwebクエリによるデータ取得時に文字化けする問題

このQ&Aのポイント
  • EXCEL2003でマクロを使用しWEBクエリにてサイト上のデータを取得する際に、漢字表示部分が文字化けする問題が発生しています。
  • 文字化けはエンコード表示で見られるような記号などが入り混じったもので、同じ手順で取得しなおすと解消されることもあるようです。
  • 対処方法として、エクセル側で制御する方法が考えられますが、具体的な方法については不明です。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 しばらく、迷っていたので、返事を付けるのが遅くなってしまいました。 こんな風にしてみました。EUCのデータ・インポートがうまくいかないのは、私は、Excel側のバグだと思います。これは、MS側に連絡を取ったほうがよいかもしれませんね。(と言っても、2003なので、そのままなのかな?上の部分から取れば、このようなことはないのかもしれません。) そこで、こんなマクロを作ってみました。ただ、Yahooは、時々、レイアウトを変えますので、その時は、また、このWebインポートのバグが直っているか、もしくは、マクロを直すかどちらかにしてください。マクロの直す部分は、URLが違っていれば、その部分と、Pattern という部分だけのはずです。その場合、ログソースをとらなくてはなりません。気になる書式は、そちらでお直しください。 一応、こちらではExcelのインポートは成功しております。 以下のマクロの注意点は、VBE の画面で、ツール-「参照設定」をしなければならないということです。 この二点にチェックを入れてください。 '参照設定 Microsoft Internet Control '参照設定 Microsoft VBScript Regular Expressions 5.5 '標準モジュール Sub YahooStockShareAccess() '参照設定 Microsoft Internet Control '参照設定 Microsoft VBScript Regular Expressions 5.5  Dim objIE As InternetExplorer  Dim Re As VBScript_RegExp_55.RegExp  Dim myContents As String  Dim myLog As String  Dim i As Long  Dim j As Long  Dim k As Long  Dim n As Integer  Dim m As Long  Dim Matches As MatchCollection  Dim Match As Match  Set Re = New RegExp  Set objIE = New InternetExplorer  Const URL As String = "http://quoterank.yahoo.co.jp/ranking/search?b=1&kd=21&mk=11%2c%2012%2c%2021%2c%2022%2c%2031%2c%2032%2c%2043%2c%2047%2c%2083%2c%2087%2c%2094%2c%2017%2c%20A1%2c%20A7%2c%2037&ca=3&tm=day&"  With objIE   '.Visible = True 'すでに開いているので、表示しない   .Navigate URL   Do While .Busy    DoEvents   Loop   Do Until .ReadyState = 4    DoEvents   Loop   myContents = .Document.body.innerHTML   i = InStr(myContents, String(82, "-"))   j = InStrRev(myContents, String(82, "-"))   myLog = Mid$(myContents, i + 83, j - i + 83)   .Quit 'ここで閉じる。  End With      Cells(1, 1).Resize(, 9).Value = Array("順位", "コード", "市場", "名称", "取引値", "", "単元株数", "25日移動平均", "かい離率")   Cells(2, 5).Resize(20).NumberFormatLocal = "M/D h:m"   m = 1 '初期値   Application.ScreenUpdating = False   With Re    .Pattern = "[^>]+>([^<]*)<"    .Global = True   Set Matches = .Execute(myLog)   For Each Match In Matches    Buf = .Replace(Match, "$1")    If Buf Like "['-龝]*" Then    Cells(m + 1, n + 1).Value = Buf    k = k + 1    n = k Mod 9    m = Int(k / 9) + 1    End If   Next Match   End With   Cells(1, 1).CurrentRegion.Columns.AutoFit   Application.ScreenUpdating = True   Set objIE = Nothing   Set Re = Nothing End Sub

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

どうも返事はつかないようですが、また、修正します。  Cells(1, 1).Resize(, 9).Value = Array("順位", "コード", "市場", "名称", "取引値", "", "単元株数", "25日移動平均", "かい離率") →  Cells(2, 5).Resize(20).NumberFormatLocal = "M/D h:m"    ↓ Cells(2, 5).Resize(20).NumberFormatLocal = "MM/dd h:mm" このようにしたほうが、数字の並びがきれいです。

geki2001
質問者

お礼

返事遅れすいません。 回答内容(修正後)をそのまま試してみたところ、文字化けせずうまくデータを取り込めました。 マクロの中身は自分にとって難しいものであるため、時間をとってみていきたいと思います。 大変助かりました。 ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 修正をします。 Dim Re As VBScript_RegExp_55.RegExp   ↓ Dim Re As RegExp にしてください。上と下では、整合性がありませんでした。 なお、#1のバグという表現は撤回します。Excel2003を発表して、次バージョンの間に直さなかったのですから、MSでは、2003では直すということは念頭に入れていないような気がします。

関連するQ&A