- ベストアンサー
ExcelでのIE操作で検索結果を貼り付ける方法
- Excelのマクロで、指定の言語で単語を検索し、検索結果をシートに貼り付ける方法について質問があります。
- 現在のコードでは、同じクラス名のテーブルが複数あるため、選択する検索結果に困っています。
- どのようにしてテーブルが複数ある場合でも、検索結果を選択することができるでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>C2に元の言語、D2に調べたり言語 でしたら、 >SourceLanguage = Worksheets("Search page").Cells(3, 2).Value >TargetLanguage = Worksheets("Search page").Cells(5, 2).Value は、それぞれ、Cells(2, 3)、Cells(2, 4)、です。 コード の方が正しいと見なして、「B3に元の言語、B5に調べたい言語」として回答いたします。 >クラスが二つあり、片方をコピー >テーブルが複数あり、また同じクラス名のテーブルも複数ある とのことで、html ソース を見てみましたが、特に目的の <table> に「id」や「name」が付いている訳でもありませんので、このような場合は、html ソース を丸ごと読み取り、その中から、目的のものを切り出していくか、あるいは、WEB クエリ が使えるのなら、そちらをお使いになるのが簡単ではないでしょうか? ということで、 1)html ソース を丸ごと読み取り、その中から、目的のものを切り出していく例 2)WEB クエリ を使った例 の2つを、ご参考に供します。 私の環境で試したところ、キーワード が6個の場合で、(1) は9秒、(2) は5秒掛かりました。 なお、 >参照設定、デフォルトと下記二つを追加 >'Microsoft Internet Controls >'Microsoft HTML object Library 上記2件は必要ありません。参照設定を外してください。 また、 >6、検索結果が"no translation found"以外の場合 は考慮しておりません。 '---------------------------------- Sub use_html_source() 'Microsoft Forms 2.0 Object Libraryを参照設定 Dim home As Worksheet Dim objIE As Object Dim i As Integer Dim word As String Dim mytable As String Dim CB As New DataObject Set home = Sheets("Search page") home.Activate Set objIE = CreateObject("InternetExplorer.Application") Application.ScreenUpdating = False With objIE .Navigate "http://www.langtolang.com/" While .Busy Or .readyState <> 4: DoEvents: Wend .document.forms("frmSozluk").Item("selectFrom").Value = home.Cells(3, 2).Value .document.forms("frmSozluk").Item("selectTo").Value = home.Cells(5, 2).Value For i = 6 To home.Range("B6").End(xlDown).Row word = Cells(i, 2).Value .document.forms("frmSozluk").Item("txtLang").Value = word .document.forms("frmSozluk").submit While .Busy Or .readyState <> 4: DoEvents: Wend mytable = .document.body.innerHTML mytable = Mid(mytable, InStr(mytable, "class=""title""")) mytable = Mid(mytable, InStr(mytable, "class=""blue""")) mytable = "<table><tbody><tr" & Left(mytable, InStr(mytable, "</table>")) & "/table>" With CB .SetText mytable .PutInClipboard End With Sheets.Add after:=Sheets(Sheets.Count) ActiveSheet.Name = word Range("A1:B1").Value = Array(home.Cells(3, 2).Value, home.Cells(5, 2).Value) Range("A2").Select ActiveSheet.Paste Range(Range("B2"), Range("B" & Rows.Count).End(xlUp)).Copy home.Select Range("C" & i).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False Next i End With home.Activate Set objIE = Nothing Application.ScreenUpdating = True End Sub '---------------------------------- Sub use_web_query() Dim home As Worksheet Dim i As Integer Dim word As String Set home = Sheets("Search page") home.Activate Application.ScreenUpdating = False For i = 6 To home.Range("B6").End(xlDown).Row word = Cells(i, 2).Value Sheets.Add after:=Sheets(Sheets.Count) With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://www.langtolang.com/?selectFrom=" & home.Cells(3, 2).Value & _ "&selectTo=" & home.Cells(5, 2).Value & "&txtLang=" & word _ , Destination:=Range("A1")) .WebFormatting = xlWebFormattingNone .WebTables = "6" .Refresh BackgroundQuery:=False End With ActiveSheet.Name = word Range(Range("B2"), Range("B" & Rows.Count).End(xlUp)).Copy home.Select Range("C" & i).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False Next i home.Activate Application.ScreenUpdating = True End Sub