質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1893閲覧

検索結果のURL記載方法(VBA)

taakfue

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/10/03 07:10

前提・実現したいこと

VBAを使って、Google Chromeから検索結果(今回はaaa)のURLをExcelに記載するマクロを作ろうとしています。

変数(Webelemens型)を宣言し、For文を使って<a>タグのhref要素を格納しようとしたのですが、エラー「実行時エラー13:型が一致しません」が出て進めることができませんでした。ちなみに、該当のソースコード14行目の(.Attribute("href"))を削除してマクロ実行したら、エラーは出ずに実行できるのですが、URLとは異なる文字列が記載されてしまい、目的のURLが表示されませんでした。

次に、ネットで調べて以下のプログラムを使えば、ExcelのA4セルにリンクを貼り付けることが出来ました。(該当のソースコード12行目~25行目を下記のプログラムに置き換えてください)。しかし、<a>タグhref要素の最後しか記載できないので、前回教わったやり方でそれぞれのhref要素を取り出そうとしました。しかし「実行時エラー13:型が一致しません」のエラーが出て行き詰まりました。

教えていただきたいのは、2点です
1:なぜ1のやり方だとエラーが出て進まないのか。また、うまくいくコードを教えてほしい
2:2のやりかただとなぜA4セルに入力までできたのか。また、なぜそれ以降のプログラムはうまくいかないのか

特に一つ目の質問に対して答えをいただけると助かります。よろしくお願いいたします。

※置き換えていただきたいプログラム(該当のソースコード12行目~25行目を下記のコードに置き換えてください。)--------------------
For Each anchor In Driver.FindElementsByTag("a").Attribute("href")
Range("A4").Value = anchor
Next

Dim e As Variant Dim r As Long Dim s As Long r = 1 + s '<-2行目からスタート For Each e In anchor Range("a" & Format(r + 3)).Value = e.Text '<- 転記先の行を変数に置き換えてe.textを転記 r = r + 1 '<-転記後は1行下へ移動

Next

発生している問題・エラーメッセージ

エラー「実行時エラー13:型が一致しません」

該当のソースコード

  1. Sub kenurlsitu()
  2. ' Seleniumのインスタンス生成(お決まり文言)
  3. Dim Driver As New Selenium.WebDriver
  4. Driver.Start "chrome" ' chrome使うからこれ
  5. ' 引数に開きたいURLを指定する(google)
  6. Driver.Get "https://www.google.com/?hl=ja"
  7. ' ①検索ボックスに「aaa」と入力
  8. Driver.FindElementByCss("body > div.L3eUgb > div.o3j99.ikrT4e.om7nvf > form > div:nth-child(1) > div.A8SBwf > div.RNNXgb > div > div.a4bIc > input").SendKeys "aaa"
  9. ' キーボードのキー操作するための準備
  10. Dim sKey As New Selenium.Keys
  11. Driver.SendKeys (sKey.Enter)
  12. ' <a>タグのhref要素を全部取得
  13. Dim elmss As WebElements
  14. Set elmss = Driver.FindElementsByTag("a").Attribute("href")
  15. '中身を書き出し
  16. Dim e As Variant
  17. Dim f As Variant
  18. Dim r As Long '<-行を表す変数を追加
  19. Dim s As Long
  20. r = 1 + s '<-2行目からスタート
  21. For Each e In elmss
  22. Range("a" & Format(r + 3)).Value = e.Text '<- 転記先の行を変数に置き換えてe.textを転記
  23. r = r + 1 '<-転記後は1行下へ移動
  24. Next
  25. ' 終了処理
  26. Driver.Close
  27. Set Driver = Nothing
  28. End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コメントで修正点を説明してあります。

vba

1Dim elmss As WebElements 2'Set elmss = Driver.FindElementsByTag("a").Attribute("href") 3'Attribute("href") はhrefのテキスト(つまりURL)を返すので、WebElements(要素の配列)ではない。 4'型が一致しません エラーになる。下記に修正。 5Set elmss = Driver.FindElementsByTag("a") 6 7'中身を書き出し 8Dim e As Variant 9Dim f As Variant 10Dim r As Long '<-行を表す変数を追加 11Dim s As Long 12r = 1 + s '<-2行目からスタート 13For Each e In elmss 14 'Range("a" & Format(r + 3)).Value = e.Text '<- 転記先の行を変数に置き換えてe.textを転記 15 'eはa要素で、このhref属性(=URL)を取得する必要があるので、 16 Range("a" & Format(r + 3)).Value = e.Attribute("href") 17 18 r = r + 1 '<-転記後は1行下へ移動 19Next

投稿2021/10/03 08:31

hatena19

総合スコア33620

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taakfue

2021/10/03 14:20

ありがとうございます。要素の配列は”a”であるのですね。勉強になりました。 実際にマクロを動かすと、URLを書き出すことが出来ました。 助かりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問