- ベストアンサー
Excel2003でwebクエリによるデータ取得時に文字化けする問題
- EXCEL2003でマクロを使用しWEBクエリにてサイト上のデータを取得する際に、漢字表示部分が文字化けする問題が発生しています。
- 文字化けはエンコード表示で見られるような記号などが入り混じったもので、同じ手順で取得しなおすと解消されることもあるようです。
- 対処方法として、エクセル側で制御する方法が考えられますが、具体的な方法については不明です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 しばらく、迷っていたので、返事を付けるのが遅くなってしまいました。 こんな風にしてみました。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)
どうも返事はつかないようですが、また、修正します。 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" このようにしたほうが、数字の並びがきれいです。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 修正をします。 Dim Re As VBScript_RegExp_55.RegExp ↓ Dim Re As RegExp にしてください。上と下では、整合性がありませんでした。 なお、#1のバグという表現は撤回します。Excel2003を発表して、次バージョンの間に直さなかったのですから、MSでは、2003では直すということは念頭に入れていないような気がします。
お礼
返事遅れすいません。 回答内容(修正後)をそのまま試してみたところ、文字化けせずうまくデータを取り込めました。 マクロの中身は自分にとって難しいものであるため、時間をとってみていきたいと思います。 大変助かりました。 ありがとうございました。