A列1行から、ずっと右へキーワードが記入されています。
調べたいキーワードは、400近くあります。
その1行目にあるキーワードをGoogle検索をして、
検索結果のURLだけを、そのキーワードの下に表示させたいです。
検索結果は全部で10ページくらい、大体100個のURLになるかと思います。
(youtube動画や広告などは含めないです)
このようなことは、Excelのマクロでできるでしょうか?
できるとしたら、どのようなマクロの記述になるでしょうか?
Excel2016です。
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
すみません。
体調を壊していて、細かい作業ができません。うまくいくかは別として、当面の進捗状態をみるために、コードを挙げておきます。
この手の規模のものは、参照設定をしないと負担が大きいと思います。
以下に「ページ数」となっていますから、「1 to 5」の そこがページ数です。
小分けにしたほうが安全です。一気にしようとして失敗すると、せっかくの取得したものも失いかねません。
起動はMain()からです。
それから、BASEURL のGoogle URLの末尾は、?q= ダブルクォーテーションです。掲示板では文字が変わる可能性があります。
'//標準モジュール
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Dim objIE As SHDocVw.InternetExplorer '参照設定 Microsoft Internet Contorls
Dim oHTML As HTMLDocument '参照設定 Microsoft HTML Object Library
Sub Main()
Dim c As Range
Dim enSrTxt As String
Dim counter As Long
On Error GoTo ErrHandler
Const BASEURL As String = "https://www.google.co.jp/search?q="
With ActiveSheet
Set objIE = Nothing
For Each c In .Range("A1", .Cells(1, Columns.Count).End(xlToLeft))
If c.Value <> "" Then
If c.Value Like "*[ぁ-龠]*" Then
enSrTxt = EnUtf8(c.Value)
Else
enSrTxt = c.Value
End If
Call getIE(BASEURL & enSrTxt)
Application.Wait TimeSerial(0, 0, 10) '休み
counter = counter + 1
End If
Next c
End With
ErrHandler:
If Err <> 0 Then
MsgBox Err.Description 'エラー出力
End If
End Sub
Sub getIE(ByVal strURL As String)
Dim cnt As Long
Dim cl As Object
Dim c As Range
Dim nm As Long
Set oHTML = New HTMLDocument
If objIE Is Nothing Then
Set objIE = New SHDocVw.InternetExplorer
End If
Set c = Cells(2, Columns.Count).End(xlToLeft) '二行目で計る
If c.Value <> "" Then nm = c.Column + 1 Else nm = c.Column
With objIE
.Visible = True
.navigate strURL
Do While .Busy Or .readyState <> 4: DoEvents: Loop
Set oHTML = .document
End With
For cnt = 1 To 5 'ページ数
Call outputLog(oHTML, nm)
Set cl = objIE.document.getElementsByClassName("csb ch")
cl(cnt).Click
DoEvents
Sleep 500
Do While objIE.Busy Or objIE.readyState <> 4: DoEvents: Loop
Set oHTML = objIE.document
Next cnt
Cells(1, nm).EntireColumn.AutoFit
Application.ScreenUpdating = True
End Sub
Sub outputLog(oHTML As HTMLDocument, nm As Long)
Dim buf As Variant
Dim j As Long, i As Long, k As Long
Dim gLinks As Object
j = Cells(Rows.Count, nm).End(xlUp).Row + 1
With oHTML
Set gLinks = oHTML.getElementsByClassName("TbwUpd")
If gLinks.Length > 0 Then
For i = 0 To gLinks.Length - 1
buf = gLinks(i).ParentNode.href
If InStr(1, buf, "%") > k Then buf = DecodeUTF8(buf)
Cells(j, nm).Value = buf
j = j + 1
buf = ""
Next
End If
End With
End Sub
Public Function EnUtf8(ByRef strSource As String) As String
'Encode
Dim objSC As Object
Set objSC = CreateObject("ScriptControl")
objSC.Language = "Jscript"
EnUtf8 = objSC.CodeObject.encodeURIComponent(strSource)
Set objSC = Nothing
End Function
Function DecodeUTF8(ByVal strSearch As String)
'Decord
If strSearch = "" Then Exit Function
With CreateObject("ScriptControl")
.Language = "JScript"
With .CodeObject
DecodeUTF8 = .decodeURI(strSearch)
End With
End With
End Function
No.3
- 回答日時:
ちょっと後で気になったのですが、私の言葉が足りなかったようです。
私が確認したいことは、
「「VBA」で検索して、3ページ目あたりで、
https://www.amazon.co.jp/できる-イラストで学ぶ-入社1年目からのExcel-VBA-できるイラストで学ぶシリーズ/dp/4295005231
というURLが出てきます。」
検索して貼り付けると、UTF-8になってしまいます。そうすると、事実上、日本字の部分は3倍近くの横の広がりになります。だから、Decode して、SJIS にすると上記のようになるけれど、よろしいですか、と言いたかったのです。
・もう一つは、メモリ配分とかは、こちらが検討はしますが、それでも、4万件は、負担が大きすぎます。おそらく、途中で止まってしまう予想が高いです。分散していただいたほうが良いと思いますが、その案についてはどうでしょうか? (ブックを分散するか、時間的に間を空けるか等)
Googleは、IE オートメーションでしか取れないのか、スクレイピングを防いでいるのかもしれません。
以下添付画像は、3ページ分です。
返信ありがとうございます。
はい、私がしたいと思っているのは、
貼っていただいた画像の通りです。
Excelからリンクを飛んで確認するだけなので、
URL内の日本語の表示に、こだわりはないです。
ただ、URLの確認のため、日本語になっているとありがたいです。
検索結果を、実際に手動でやってみると、
途中で、チェックを入れる「確認のページ」に飛びますね。
なので、時間を開けて、分散をしてやるべきのようです。
実際にマクロを書いていただいたようで、
画像も貼っていただいて、感謝します。
WindFallerさん、ありがとうございます!
No.2
- 回答日時:
>検索結果は全部で10ページくらい、大体100個のURLになるかと思います。
1ページで、10個ぐらいで、それを、10ページ。それを400個のキーワードですから、4万件とは、Google なら、訴えられることはないでしょうけれども、かなり負担の多いマクロです。5千ごと(検索単語50個)とか、休み休み行ったほうがよいのではないでしょうか。それと、有線Lan で行うとか、工夫しないといけないのではないでしょうか。
それにしても、4万件のURLといのは、尋常ではないように思います。
残念なことに、IE以外には取れそうにないし、詳しくは知りませんが、もし、Google APIが使える方がいるなら、そちらの方にお任せします。winHttp でとろうとしたら、エラーコード403(見てはいけない!) だそうです。
こちらは、今の所、開発中途で、細かい部分を調べないと、いつまでも、トラブルが続きそうです。
以前もGoogleをExcelで取得することはあるけれども、こんなに入り組んでいる内容ではなかったと思います。難しくなったようです。
それと、細かいことですが、Google では、URLは、そのサイトのホームページだけではない
ので、例えば、書名などは、UTF-8 にすると、理論的には、日本語の三倍の長さになってしまいます。そこで、シートのセルに貼り付けは、デコードするのが良いのではないかと思います。セル内で折返しを使わない限りは、ひとつのURLで、画面一般になるものがあります。
「VBA」で検索して、3ページ目あたりで、
https://www.amazon.co.jp/できる-イラストで学ぶ-入社1年目からのExcel-VBA-できるイラストで学ぶシリーズ/dp/4295005231
というURLが出てきます。一度、こちらの書き込みにコメントをいただけましたら、当面の完成品をアップロードします。
回答ありがとうございます。
いろいろ調べて、自分でできるかもしれない。
と思いましたが、あまりに難しくて無理でした・・・。
> 「VBA」で検索して、3ページ目あたりで、
> https://www.amazon.co.jp/できる-イラストで学ぶ-入社1年目からのExcel-VBA-できるイラストで学ぶシリーズ/dp/4295005231
> というURLが出てきます。一度、こちらの書き込みにコメントをいただけましたら、当面の完成品をアップロードします。
これは、amazonの書き込みにコメントをするということでしょうか?
よろしくお願いいたします。
No.1
- 回答日時:
こんにちは
試してはいませんので、確かではありませんが、
ありそうな方法として2種類。
◇方法(1)
IEを利用して検索・表示させて、その内容からURL等を取得し、ワークシートに転記する。
https://www.vba-ie.net/
https://www.sejuku.net/blog/72067
(2番目で取り上げている例が、Google検索になっています)
似た方法での例と思われるもの
https://teratail.com/questions/77171
※ この方法での例や解説は、検索すれば数多く見つかるものと思います。
◇方法(2)
Googleの検索APIを利用して、直接検索結果を取得し(Json等)、ワークシートに転記する。
https://qiita.com/megu_ma/items/8cad39f61e35588e …
https://webbigdata.jp/what-is-bigdata/google-cus …
https://developers.google.com/custom-search/v1/o …
(3番目はGoogleのドキュメント)
似たようなことを試みている例と思われるもの
https://stackoverflow.com/questions/53364454/vba …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ブログ) ブログを始めたいと思うのですが、下記のような場合のおすすめブログサービスを教えてください。 収益化な 4 2023/04/10 10:01
- Excel(エクセル) セルの値をグーグルで検索するエクセルVBAについて! 2 2022/08/01 21:41
- ライフスタイル・ヘルスケア URLを開くアプリが見つかりません 2 2022/09/16 12:09
- その他(ブラウザ) Googleのオートコンプリート機能について 2 2023/07/19 00:04
- その他(ニュース・時事問題) 「戦争被爆国」があっても「戦争加爆国」はない。なぜ? 5 2023/05/19 09:27
- InternetExplorer(IE) AIやばい「コピーキャット 語源」を検索した時のBingのサジェストがやばい 1 2023/07/25 03:56
- その他(SNS・コミュニケーションサービス) Yahoo!とGoogle検索のしくみの違いを教えてください 2 2022/08/14 01:53
- SEO 検索候補に見られたくないキーワードがある 2 2022/09/19 17:34
- SEO SEOの検索順位について 例えばあるキーワードで検索順位が6位だとしたら、そのキーワードに関連する良 1 2022/06/30 21:51
- インターネットビジネス webでの宣伝方法について 顧客サービスを主とするHPを立ち上げました。 アドワーズ広告とSNSに投 1 2023/07/25 01:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ミャンマー語で、お疲れさま?
-
PDFデータにページ番号を振りた...
-
フタバ産業の冬のボーナス支給...
-
友達にドッキリをしたくて、ホ...
-
自分のURLがわからない!
-
エスタンジアはグーグルマップ...
-
なぜin the parkになるんですか?
-
condaコマンドに対応したプロキ...
-
httpsの形式の画像URLを取得する
-
ホームページの編集の仕方を教...
-
このタオルのメーカーを教えて...
-
個人のホームページは
-
請問,下述兩個影片,背景音樂...
-
Microsoft(R) Office の(R)と...
-
焼結材は錆びやすいと聞いたの...
-
高知市のオオテピアは1月5日1月...
-
生協購買部は何ですか。 辞書で...
-
ホームへーじ作り
-
wordにURLを貼り付けたいのです...
-
橋本環奈を筆記体で書くとどう...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ミャンマー語で、お疲れさま?
-
PDFデータにページ番号を振りた...
-
天沖絶迹ってなんですか? 悪い...
-
友達にドッキリをしたくて、ホ...
-
ホームページの編集の仕方を教...
-
condaコマンドに対応したプロキ...
-
自分だけが利用できるWEBページ...
-
URLでhttp.、https.のついてい...
-
なぜin the parkになるんですか?
-
個人のホームページは
-
GIMPでローマ字入力が「縦書き...
-
足掛けとはどういう意味ですか...
-
字の画数
-
グラフ理論 木
-
httpsの形式の画像URLを取得する
-
橋本環奈を筆記体で書くとどう...
-
請問在關西什麼地方可以買到這...
-
エスタンジアはグーグルマップ...
-
サーモスの保温ポットの洗浄方...
-
焼結材は錆びやすいと聞いたの...
おすすめ情報