【初月無料キャンペーン中】gooドクター

C1から下へずらーっと、キーワードや文章が記入されています。

このセル内のキーワードをGoogle検索して、『検索結果が○件以下だったら隣に○』
という風に分けていきたいです。

こういう作業は、マクロでできるでしょうか?
どのような記述でできますか?

EXCEL2016です。
よろしくお願いいたします。

gooドクター

A 回答 (2件)

非常に雑ですが、以下のコードで一応8×10²⁸件弱の件数まで表示可能です。

これ以上の桁数はvbaの限界を超えますが、検索語が「a」のときも正しく表示されたので(25270000000件)たぶん大丈夫です
1検索語当たり5~10秒ほどかかるので、件数が多い時は気長に待っていてください。
*****************************
Option Explicit
Sub 検索件数の取得()
Dim qs As String
Dim i As Integer
Dim LastRow As Integer
Sheets(1).Select
LastRow = Range("C65536").End(xlUp).Row
For i = 1 To LastRow
Sheets(1).Select
qs = "http://www.google.co.jp/search?hl=ja&source=hp&q="
qs = qs & Range("C" & i).Value & " "
qs = qs & "&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=&aq=f&aqi=g8g-r2&aql=&oq=&gs_rfai="
Sheets(2).Cells.Clear
With Sheets(2).QueryTables.Add(Connection:= _
"URL;" & qs, Destination:=Sheets(2).Range("A1"))
.Name = "google"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
Dim z As Variant
Dim s2 As String
s2 = Trim(GetKensu)
z = CDec(s2)
Dim 条件の数字 As Variant
条件の数字 = 1000000000000# 'ここの条件の数字を変える
If z < 条件の数字 Then
Sheets(1).Range("D" & i).Value = z
End If
Next
DeleteName
Sheets(1).Select
End Sub
Function GetKensu() As String
Dim myRng As Range
Dim s As String
Dim i As Integer
Set myRng = Sheet2.Columns(1).Find("検索結果")
i = myRng.Row
s = Sheet2.Cells(i - 1, 1).Value
Dim s1 As String
If InStr(s, ",") > 0 Then
s1 = Replace(s, ",", "")
Else
s1 = s
End If
s1 = Replace(s1, "約", "")
s1 = Replace(s1, "秒", "")
s1 = Replace(s1, "件", "")
s1 = Replace(s1, " ", "")
Dim a() As String
s1 = Replace(s1, "(", ")%%%") '通常ありえない文字列「%%%」をカッコ内に配置
a = Split(s1, ")")
a = Filter(a, "%%%", False) '%%%の含まれる要素(=カッコ内)は除外
s1 = Join(a, "")
If s1 = 0 Then
GetKensu = 0
Exit Function
End If
GetKensu = s1
End Function

Sub DeleteName()
Dim n As Name
For Each n In Names
n.Delete
Next
End Sub

*************************************
    • good
    • 0

こんにちは



>こういう作業は、マクロでできるでしょうか?
多少の知識が必要になりそうですが、できないことはないでしょう。
以下、ご参考までに。

ページのソースを取得するだけなら、以下のような方法でVBAから直接取得できますが、検索ページのソースにはスクリプトしか書いてありません。
https://qiita.com/nkojima/items/c11f6369f4c32b06 …

実際に表示されている検索結果はajax等で後から取得していると思われるので、ブラウザ経由で表示内容を取得するなどが必要になるものと推測されます。
(スクリプトを解析すれば、直接リクエストする方法を見つけられるのかも知れませんけれど…)
あるいは、エクセルのWebクエリの機能を利用すればできるのかも知れませんが、こちらに関しては、私はまったく存じませんのでわかりません。

ブラウザ経由の方法であるなら、
旧くは、IE経由で取得する方法が比較的簡単でした。
https://tonari-it.com/ie-setting-navigate/
とはいえ、IEはもう終わるので、Seleniumの方がよろしそうに思います。
https://excel-ubara.com/excelvba4/EXCEL_VBA_401. …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング