VBAでのIE操作・HTML操作について

このQ&Aのポイント
  • VBAを使ったIE操作やHTML操作について質問です。特定のURLを表示させることはできるのですが、表示されたウェブサイトのHTML内の特定の文字列と、アクティブなセル内のテキストが一致した時にリンクをクリックするマクロは書けるのでしょうか?
  • 具体的な例として、特定のウェブサイトコンテンツが夏にしか表示されない場合を考えます。エクセルのシートに「水着」という文字列がある場合、IEで表示されたウェブサイト内の「水着」という文字列がセルと一致したら、リンクをクリックするマクロを作成したいと考えています。
  • VBAを独学で学んでいる者ですが、IEやHTMLの操作について詰まってしまっています。質問として、VBAでIEを操作し、特定のURLを表示させることはできるのですが、表示されたウェブサイト内の特定の文字列と、アクティブなセル内のテキストが一致した場合にリンクをクリックするマクロを作成することは可能でしょうか?お知恵をお貸しください。
回答を見る
  • ベストアンサー

VBAでのIE操作・HTML操作について

VBAを独学で学んでいる者です。IEを操作させたく、学んでいます。 色々と検索などをしていましたが行き詰ってしまいました。 どうぞご助力願います。 学び始めて1週間程度ですので、うまく説明できないかもしれませんがご容赦ください。 VBAでIEを操作し、特定のURLを表示。←これは大丈夫です 表示されたウェブサイトのHTML内の特定の文字列(リンク)と、 アクティブなセル内のテキストが合致したリンクをクリックする、 ・・・といったマクロは書けるものでしょうか? <INPUT TYPE="submit" NAME="btn01" VALUE="ログイン"> 上記のようなHTMLソースですと「NAME="btn01"」を探せば、「objIE.document.all.btn01.Click」というものでできるかと思いますが、 動的に変化するウェブサイトの文字列と、あらかじめ用意していたセル内の文字列が合致した時にだけクリックするような方法を求めています。 例えば ・夏にしか出現しないウェブサイトコンテンツ「水着」。 ・エクセルのシートC2に「水着」。 ・IE起動。サイト内に「水着」という文字列があり、セルと合致するので「水着(リンク)」の箇所をクリック。 ・・・といった感じなのですが・・・。やはり難しいでしょうか・・・。 「水着」といった単語ではなく、もっと複雑な文字列を扱う予定です。 稚拙な表現ですみません。 皆様、どうぞ宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • t2hayashi
  • ベストアンサー率46% (102/219)
回答No.1

開いたHTMLから、全てのリンクURLと表示テキストを抽出し、列挙。 そのテキストに検索をかけて一致したリンク先URLを開く ではダメなんでしょうか?

参考URL:
http://www.ken3.org/vba/backno/vba170.html
metal3100c
質問者

お礼

ご回答がヒントになり、試行錯誤の末、やりたいことができました!! 参考URL先のソースを以下のように改変いたしました。 'リンク情報からオブジェクトを探し.Clickする For n = 0 To objIE.document.Links.Length - 1 'リンク数分まわす Debug.Print objIE.document.Links(n).innerText 'デバックで表示する 'リンク先(.text)をチェックする(文字列比較する) If objIE.document.Links(n).innerText = "水着" Then objIE.document.Links(n).Click '.Clickでクリックしてみた Exit For '見つかったので強制的にループを抜ける End If Next

metal3100c
質問者

補足

ご回答ありがとうございます!! ご回答いただいた方法で大丈夫とおもうのですが、記述の仕方はどうすればいいでしょうか?? 検索エンジンや参考URL先などで調べましたが、突破口がつかめずにいます。 お忙しいところ失礼ですが、記述方法をご教授願えたら・・・と思います。 宜しくお願い致します。

関連するQ&A

  • エクセル VBA で IE操作 

    エクセルVBAにて IEを操作し リンクをクリックするには どのような記述になりますでしょうか? たとえば http://okwave.jp/mypage へアクセスし画面右上 カテゴリ をクリック 次に Excel(エクセル) をクリック という具合に 画面に表示されている文字を順番にクリックしたいです。 マクロを見つけてきましたが クリックというのはどう記述していいやらさっぱりです。 Sub testIE() Dim objIE As InternetExplorer 'IEオブジェクトを準備 Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット objIE.Visible = True 'IEを表示 objIE.navigate "http://okwave.jp/mypage" 'IEでURLを開く Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE '読み込み待ち DoEvents Loop

  • VBAからIEの操作

    グーグルをIEで開いてVBA(語句)を検索して見終わったら IEを閉じる作業をしたいのですが、検索窓にVBA(語句)を 入力するところでエラーとなります。初心者ですが、なんとか 勉強したいのでよろしくお願いいたします。 Sub ie_test_Navigate() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.google.co.jp/" IE.document.all.q.Value = "VBA" IE.document.all.btnG.Click If MsgBox("IEを閉じますか?", vbYesNo, "終了確認") = vbYes Then objIE.Quit End If Set objIE = Nothing End Sub

  • VBAでIE操作

    三流君を見てもよくわからなかったので教えてください。 三菱東京UFJ銀行に自動でログインできるようにエクセルVBAで操作していますが パスワードを入れた後のログインがうまく出来ません。 objIE.document.Forms(0).submit だと、サイトが更新されてしまいます。 ソースは <td class="buttons"> <a href="javascript:void(0)" onClick="gotoPageFromAA011(); return false;" tabindex="3"><img src="https://directg.s.bk.mufg.jp/refresh/imgs/DIRECT_IMAGE/LOGINOUT/btn_login.gif" alt="ログイン" onmouseover="this.src='https://directg.s.bk.mufg.jp/refresh/imgs/DIRECT_IMAGE/LOGINOUT/btn_login_over.gif'" onmouseout="this.src='https://directg.s.bk.mufg.jp/refresh/imgs/DIRECT_IMAGE/LOGINOUT/btn_login.gif'"></a> なので、 objIE.document.all.gotoPageFromAA011(); return false;.Click とやりたいところですが、VBAではエラーになってしまいます。 どうすればログインできるのでしょうか? http://www.ken3.org/cgi-bin/group/vba_ie_form.asp#Input_button_Click を見てみましたが私がうまく出来てないのか出来ませんでした。 ご回答よろしくお願いします。

  • エクセルVBA IEの操作

    こんにちは、 エクセルVBAでIEの操作の質問です。 IEで特定の文字列をクリックするマクロはどのような記述になりますでしょうか? たとえば OKWEBのランキングをクリックする場合はどのようになりますか? http://okwave.jp/mypage から 右上 ランキング という文字をクリックする場合です。 実際にやりたいことは、電子取引ホームページの (PHPで作成されているのかな? 動的なホームページです。)請求書番号を検索してそれを クリックして画面を保存という作業です。イントラなんで ここではURLを公表することが できないため、 OKWEBを一例とさせていただきました。  会社のパソコンでやりたいので UWSC等のフリーソフトも簡単に導入できないし、エクセルならVBA利用は制限されてないので VBAでやろうと考えてます。

  • なぜだめなのか教えてください ie操作 vba

    vbaでログインする時、ログインボタンの名前がmember_left_btn01なので、 With objIE.document .all("mail_ad").Value = 登録アドレス .all("pass_wd").Value = PW .all("member_left_btn01").Click End With としたら、オブジェクトが必要ですというエラーになりました。 ログインしようとしているサイトは、 https://www2.seibu.jp/usrinfo/clubon/internet/member.htmlのサイトです。 ログインの部分のソースを見ると <input class="member_left_btn01" type="image" src="../images/btn_login.gif" border="0"/> となっておりますが、classはnameではないから、 .all("member_left_btn01").Click だとエラーになるのでしょうか? .all.submit でも .submit でもログインできません。 ご教授よろしくお願いします。

  • excel VBAの操作について(新しいタブの操作

    excel VBAでIEを操作して、必要箇所に入力後実行ボタンをクリックすると新しいタブで表示された画面をすべてコピーしたいのですが、新しいタブの操作方法が分かりません。分かる方宜しくお願い致します。 Dim objIE As InternetExplorer Set objIE = New InternetExplorerMedium objIE.Visible = true objIE.Navigate “アドレス” ‘IEに入力 Call IEButtonClick(objIE,”実行ボタン”) End sub

  • 【VBAでキーボード操作する方法について】

    【VBAでキーボード操作する方法について】 ボタンをクリックしたら、とあるサイトが自動的に検索できるツールを作成しておりますが、私が対象としているとあるサイトのsubmitボタンにname属性が指定されておりません。どうにかしてEnterキーを押したときと同じ動作になるようにしたいのですが、VBAでキーボードを操作することは可能なのでしょうか。 以下のソースはコマンドボタン2をクリックするとGoogleが立ち上がり、自動的に検索条件に"教えてGoo"と入力し、検索ボタンを押下してくれます。 ですが、これは、検索ボタンに"btnG"というname属性が指定されていたから可能であり、私が対象としているサイトではGoogleのようにsubmitボタンにはname属性は指定されておりません。 どうにかして自動的にEnterキーを押す(と同等な)ようなコードを記述することができないのでしょうか。 どなたか、お助けください。 Private Sub CommandButton2_Click() 'IEオブジェクト宣言 Dim objIE As Object 'IEオブジェクト作成 Set objIE = CreateObject("internetExplorer.application") '最前面に表示 objIE.Visible = True '対象URLへ移動 objIE.Navigate "http://www.google.co.jp/" '表示終了まで待つ Do While objIE.Busy = True DoEvents Loop '検索条件を指定 objIE.document.all.q.Value = "教えてGoo" 'ボタンを押してみる objIE.document.all.btnG.Click End Sub

  • VBAでアクティブなIEを操作

    現在VBAでIEを操作しようとしております。 URLやタイトルから指定してIEを操作することはできるようになりました。 今度はデスクトップの最善面にあるIEを操作したいと考えています。 下記を参考にして考えていますが、Hwndプロパティが読み取り専用らしく ハンドルから操作するIEを指定することができません。 http://okwave.jp/qa/q2147057.html そもそもVBAで可能なのかについても よく分からないのですが、恐れ入りますが代案を含め方法があれば教えてください。 ひとまず、煮詰まっていますが、 今残っているコードを載せておきます。 Public Declare Function GetForegroundWindow Lib "user32" () As Long ’--------------- Sub shell_test() Dim objie As Object Dim a as long Set obj = CreateObject("shell.application") a = GetForegroundWindow Debug.Print a End Sub

  • vbaでIEを閉じるだけの処理

    オフィス2003を使用しています。 「IEを開いて閉じる」は Sub TEST() Set ObjIE = CreateObject("InternetExplorer.application") ObjIE.Visible = True '見えるようにする '文字列で指定したURLに飛ぶ ObjIE.navigate "http://www.yahoo.co.jp/index.html" '表示終了まで待つ Do While ObjIE.Busy = True DoEvents Loop ObjIE.Quit End Sub と言うことがわかったのですが 開くのは他の作業をしたときに行うので 「閉じる」だけをvbaで行いたいのですがどうすればいいのかわかりません。 Sub TEST2() Set ObjIE = CreateObject("InternetExplorer.application") ObjIE.Visible = True '見えるようにする ObjIE.Quit End Sub だと また新たなIEが起動してしまい「現在起動しているIEを閉じる」と言うことができません。 アドバイスをお願い致します。

  • VBAからIE操作でログインできない

    社内の業務管理システムにエクセルVBAでログインしようとしています、が、ログインはもとより、IDを入力する部分に私のID情報すら入力されません。 とりあえずID枠に入力する方法をアドバイスをお願いします。 ◆htmlソース <table> <tr> <td>ID</td> <td><input type="text" name="UserId" id="UserId" /></td> </tr> <tr> <td>PW</td> <td><input type="password" name="UserPass" id="UserPass" /></td> </tr> ◆VBAでは以下のいずれの文も失敗(ID入力枠に何も入らない。エラー発生。) ※右辺のD12セルには私のID情報を入力しています。 ObjIE.Document.all.UserId.Value = Worksheets("MyData").Range("D12").Value ObjIE.Document.all("UserId")(0).Value = Worksheets("MyData").Range("D12").Value ObjIE.Document.all("UserId").Value = Worksheets("MyData").Range("D12").Value ObjIE.document.forms(0).elements("UserId").Value = Worksheets("MyData").Range("D12").Value ObjIE.document.forms(0).elements("UserId")(0).Value = Worksheets("MyData").Range("D12").Value ObjIE.Document.getElementById("UserId").Value = Worksheets("MyData").Range("D12").Value ObjIE.document.all.Item("UserId").Value = Worksheets("MyData").Range("D12").Value 上記コードの何が間違っているのでしょうか? あるいは、上記の原因特定するために、何を試せばよいでしょうか? 宜しくお願いいたします。

専門家に質問してみよう