• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルIE操作、クラスが二つあり、片方をコピー)

ExcelでのIE操作で検索結果を貼り付ける方法

このQ&Aのポイント
  • Excelのマクロで、指定の言語で単語を検索し、検索結果をシートに貼り付ける方法について質問があります。
  • 現在のコードでは、同じクラス名のテーブルが複数あるため、選択する検索結果に困っています。
  • どのようにしてテーブルが複数ある場合でも、検索結果を選択することができるでしょうか。

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.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

関連するQ&A