エクセルのVBAで文字列に対する画像が表示されるマクロを作成したいです。
やりたいこととして例えば、
A列に5つワードが書かれており、
そのワードをひとつずつgoogleで画像検索し、検索結果から画像1つを
A列の文字列の横に表示する。ということです。
ブラウザを開いてワード検索するところまで書いたのですが、それ以降の処理がわかりません。
教えていただきたいです、よろしくお願いいたします。
Private Sub GoogleSearch()
Dim objIE As Object
Set objIE = CreateObject(“InternetExplorer.Application”)
objIE.Visible = True
objIE.navigate “http://www.google.co.jp/”
Sleep (1500)
Call IeWait(objIE)
objIE.document.forms(0).Item(“q”).Value = “チョコレート”
Sleep (1000)
objIE.document.getElementById(“gbqfb”).Click
‘objIE.Quit
‘Set objIE = Nothing
End Sub
ーーーーーーーー
整理のため、今一度コードを現在のコードを記載します。
※htsignさんより回答いただき、下記のように編集いたしました。
lang
1Option Explicit 2 3Private Sub Main() 4 Call GoogleSearch(ActiveCell.Value2) 5End Sub 6 7Private Sub GoogleSearch(ByVal query As String) 8 Dim html As String 9 html = FetchHtml("https://www.google.co.jp/search?tbm=isch&q=" & query) 10 11 Dim nextUrl As String 12 nextUrl = FindFirstUrlFromGoogleImageSearch(html) 13 14 DownloadFileToTempDir nextUrl 15 16 AddPicture 17End Sub 18 19Private Function FetchHtml(ByVal url As String) As String 20 Dim xhr As Object 21 Set xhr = CreateObject("MSXML2.XMLHTTP") 22 23 xhr.Open "GET", url, True 24 xhr.send 25 26 Do Until xhr.readyState = 4 27 DoEvents 28 Loop 29 30 FetchHtml = xhr.responseText 31 32 Set xhr = Nothing 33End Function 34 35Private Sub DownloadFileToTempDir(ByVal url As String) 36 Const adTypeBinary = 1 37 Const adSaveCreateOverWrite = 2 38 39 Dim xhr As Object 40 Set xhr = CreateObject("MSXML2.XMLHTTP") 41 42 xhr.Open "GET", url, True 43 xhr.setRequestHeader "Pragma", "no-cache" 44 xhr.setRequestHeader "Cache-Control", "no-cache" 45 xhr.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT" 46 xhr.send 47 48 Do Until xhr.readyState = 4 49 DoEvents 50 Loop 51 52 With CreateObject("ADODB.Stream") 53 .Type = adTypeBinary 54 .Open 55 .Write xhr.responseBody 56 .SaveToFile Environ("TEMP") & "\vbatemp", adSaveCreateOverWrite 57 .Close 58 End With 59End Sub 60 61Private Function FindFirstUrlFromGoogleImageSearch(ByVal html As String) As String 62 Dim partOfHtml As String 63 Dim idx As Long 64 65 idx = InStr(html, "imgurl=") 66 partOfHtml = Mid(html, idx + 7) 67 idx = InStr(partOfHtml, "&") 68 69 FindFirstUrlFromGoogleImageSearch = Left(partOfHtml, idx - 1) 70End Function 71 72Private Sub AddPicture() 73 Dim shape As shape 74 Set shape = ActiveSheet.Shapes.AddPicture( _ 75 Filename:=Environ("TEMP") & "\vbatemp", _ 76 LinkToFile:=False, _ 77 SaveWithDocument:=True, _ 78 Left:=ActiveCell.Left + ActiveCell.Width, _ 79 Top:=ActiveCell.Top, _ 80 Width:=0, _ 81 Height:=0) 82 83 shape.ScaleHeight 1, msoTrue 84 shape.ScaleWidth 1, msoTrue 85 86 Set shape = Nothing 87 88End Sub 89

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/04/19 15:52
2015/04/19 16:28
2015/04/20 01:23
2015/04/20 03:34