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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

450閲覧

【Excel VBA】指定した要素が存在するかチェックし、あればそのリンクをクリック、なければ別の指定した要素が存在しないかチェック...を複数パターン行いたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/08/15 14:22

前提・実現したいこと

ebayの商品リサーチを行う前に、ExcelのVBAを使用して位置情報を事前に設定しようとしております。

(1)ebayの商品ページを開く
(2)「Shipping and payments」をクリックする
(3)「Change country: 」に「United States」を、「ZIP Code: 」に「90024」を入力する
(4)「Get Rates」をクリックする

という一連の動作を自動で行おうとしているのですが...

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

商品ページの中には、稀に「This listing was ended by the seller because the item is no longer available.(商品がなくなったのでこの項目は取り下げられました)」というようなエラーメッセージが記載されているページがあり、この場合、(2)~(4)の動作を行うためには、一度「See original listing(元の項目を閲覧する)」をクリックし、元の商品ページに移動する必要があります。

(例)https://www.e■■■bay.com/itm/Good-Smile-Kantai-Collection-Kancolle-Ooi-Nendoroid-Figure-OnlineShop-Limited/122259763088?hash=item1c773fef90:g:HXYAAOSwnHZYSRkb

(例)https://www.e■■■bay.com/c/28030310275#oid273544047936

※上記のURLをコピペする際は、「■■■」の削除をお願いいたします。

また、このエラーメッセージとリンクのテキストには、以下のような組み合わせがあります。

html

1<div id="msgPanel" ... >This listing was ended by the seller because the item is no longer available.< 2 3 <div class="vi-inl-lnk vi-cvip-prel3" ... >See original listing< 4 5 <div class="vi-inl-lnk vi-cvip-prel5" ... >See original listing< 6 7id="msgPanel" ... >This listing was ended by the seller because there was an error in the listing.< 8 9 <div class="vi-inl-lnk vi-cvip-prel3" ... >See original listing< 10 11 <div class="vi-inl-lnk vi-cvip-prel5" ... >See original listing< 12 13<div class="nodestar-item-card-details__header-text" ... >The listing you're looking for has ended.< 14 15 <div class="nodestar-item-card-details__view" ... >View original item< 16 17<div class="itemcard--content" ... >The listing you're looking for has ended.< 18 19 <div class="fake-btn fake-btn--large fake-btn--fluid" ... >View original item< 20

試したこと

例えば、

VBA

1 2'id="msgPanel"という要素のテキスト部分をA1セルに入力 3 4Range("A1").Value = ie.document.getElementById("msgPanel").outerText 5 6 'A1セルに「This listing was ended...」という文字列が含まれているかチェック 7 8 If InStr(Range("A1").Value, "This listing was ended by the seller because the item is no longer available.") > 0 Then 9 10 '含まれていれば、class="vi-inl-lnk vi-cvip-prel3"という要素の直下にあるaタグのテキスト部分をA1セルに入力 11 12 Range("A1").Value = ie.document.getElementsByClassName("vi-inl-lnk vi-cvip-prel3")(0).all.tags("a")(0).outerText 13 14 'A1セルに「See original listing」という文字列が含まれているかチェック 15 16 If InStr(Range("A1").Value, "See original listing") > 0 Then 17 18 '含まれていれば、そのリンクをクリック 19 20 ie.document.getElementsByClassName("vi-inl-lnk vi-cvip-prel3")(0).all.tags("a")(0).Click 21 22 Else 23 24 '含まれていなければ、class="vi-inl-lnk vi-cvip-prel5"という要素の直下にあるaタグのテキスト部分をA1セルに入力 25 26 Range("A1").Value = ie.document.getElementsByClassName("vi-inl-lnk vi-cvip-prel5")(0).all.tags("a")(0).outerText 27 28 'A1セルに「See original listing」という文字列が含まれているかチェック 29 30 If InStr(Range("A1").Value, "See original listing") > 0 Then 31 32 '含まれていれば、そのリンクをクリック 33 34 ie.document.getElementsByClassName("vi-inl-lnk vi-cvip-prel5")(0).all.tags("a")(0).Click 35 36 End If 37 38 End If 39 40 End If 41 42End If 43 44'商品ページに直接行けたにしろ、エラーページを経由する必要があったにしろ、最終的に以下の作業を行いたいと思っております。 45 46'ページ中部の「Shipping and payments」をクリックする 47ie.document.getElementById("viTabs_1").Click 48Application.Wait Now + TimeValue("00:00:05") 49 50'「Change country: 」に「United States」、「ZIP Code: 」に「90024」を入力し、「Get Rates」をクリックする 51ie.document.getElementById("shCountry").Value = "1" 52ie.document.getElementById("shZipCode").Value = "89106" 53ie.document.getElementById("shGetRates").Click 54Application.Wait Now + TimeValue("00:00:05") 55

というようなとても回りくどいコードを試しており、一応は機能しているのですが、できればもう少し簡略化したいと思っております。ご助力のほど、何卒よろしくお願い申し上げます。

補足情報(FW/ツールのバージョンなど)

Excel2016、Windows10、IE11

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

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

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

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

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

guest

回答1

0

ベストアンサー

ExcelのVBAを使用して位置情報を事前に設定しようとしております。

VBAで位置情報等取得できるんですか?という疑問がまず1点。

2点めとして質問内容を下記のような内容に推敲されたほうが良いかとおもいます。

GUIがあるのであれば、そのSSを貼り、ここをクリックしたら
稀にhogehogeとなり、メッセージはhogehogeから出力されています。

GUIで2~4を制御しているのはhogehoge であり
そのコードが以下のものです。

現状、こういう手順でhogehogeしたらxxxとなりますが
下記のようなhogehoge処理を行なっており、効率がよくありません
hogehogeは以下のコードです

このコードを簡略化する事は可能でしょうか?

のように、具体的に質問内容を変更したほうが
回答がくるかと思います。

現状の質問では何をどうしたらよいか第三者に伝わってないから
回答が来てないかとおもいます。

質問内容を変更したほうがよいかと思います。

投稿2019/08/22 06:44

nanami12

総合スコア1015

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問