エクセルVBA値の取得

このQ&Aのポイント
  • エクセルVBAを使用して、特定の要素の値を取得する方法について説明します。
  • ソースコード内のgetElementByIdやgetElementsByNameメソッドを使って要素の値を取得する方法を試しましたが、うまくいきませんでした。
  • 別のアプローチを試してみる必要があるかもしれません。
回答を見る
  • ベストアンサー

エクセル VBA 値の取得

<div id=result name=result class='resultleft'><div class='finalresult'> 結果 </div> </div> 上記のソースの”結果 ”という値を取り出したいのですが実現できません。 Set IE = CreateObject("InternetExplorer.Application") Cells(1, 1) = IE.Document.getElementById("result").Value や Cells(1, 1) = IE.Document.getElementsByName("result").Value は、駄目なのでしょうか。

  • fisica
  • お礼率77% (235/305)

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

  • ベストアンサー
回答No.1

VBAというより、JavaScriptの問題ですが、 <div> には、 Valueというプロパティーはありませんので やるのなら ~ = IE.Document.getElementById("result").innerHTML でしょうけど、これだと、その内側の 「<div class='finalresult'> 結果 </div>」 を取り出してしまいます。 もし、 「結果」だけ欲しいのなら、 ・HTML側で内側のdivに idを付けてそれを指定するか ・取り出した文字列を vbaの文字列関数を使って文字列の一部取り出しを行うか ・= IE.Document.getElementById("result").firstChild.innerHTML を使うかでしょう。

fisica
質問者

お礼

ありがとうございました。 解決できました。 何でもValueで"値"が得られるわけではないのですね。 勉強になりました。

関連するQ&A

  • VBA オブジェクトが必要です

    ie.Document.getElementById("menu_2").Click で、オブジェクトが必要ですというエラー”424”が発生します やってることはIE操作でウェブページのメニューをクリックするという内容です いかに全コードを記載します Sub ********() Set ie = CreateObject("InternetExplorer.Application") 'IE起動 ie.Visible = True ie.Navigate "************" '開きたいサイトのURLを指定  Call IEWait(ie) 'IE待機 ie.Document.getElementsByname("${loginForm.loginId}")(0).Value = "**********" ie.Document.getElementsByname("${loginForm.password}")(0).Value = "*********" ie.Document.getElementsByname("Image7")(0).Click Call IEWait(ie) 'IE待機 ie.Document.getElementsByname("Image1")(0).Click Call IEWait(ie) 'IE待機 ie.Document.getElementById("menu_2").Click Call IEWait(ie) 'IE待機 End Sub 自分としてはie.Document.getElementsByname("Image7")(0).Clickでエラーが出ないのに getElementByIdではオブジェクトが必要と言われidで取得なのかnameで取得なのかしか、かわらないのにオブジェクトが必要です、となる意味がわからないです。 どなたかご教授お願いします。

  • Excel VBAで検索結果を取得するにはどうしたらいいですか?

    今、Googleの検索結果をコピーして、Excelに貼り付けたいと思って います。 IEで検索するところまで書けたのですが、それ以上がわかりません。 Sub shutoku() With CreateObject("InternetExplorer.application") .Visible = True .navigate ("http://www.google.co.jp/") While .Busy Or .readyState <> 4 DoEvents Wend .document.all.q.Value = "指定のキーワードを入れる" .document.all.btnG.Click End With End Sub これから先、どう書いたらいいか教えてもらえないでしょうか? よろしくお願いします!

  • VBAでオブジェクトがありません、となってしまう

    VBAを実行すると、 実行エラー424 オブジェクトが必要です。 となってしまいます。 エラーとなっている行は、 .Document.getElementById("q_d").Value = ActiveSheet.Cells(rowno, 1).Value です。 作成したリストは、以下のようになっています。 Sub MAP住所() Dim objIE As Object, rowno As Integer rowno = 1 Set objIE = CreateObject("InternetExplorer.Application") With objIE 'Google Map起動 .Navigate "http://maps.google.co.jp/" .Visible = True Do While (ActiveSheet.Cells(rowno, 1).Value <> "") 'IE待機 Do While .Busy = True DoEvents Loop '住所をテストボックスへ入力 .Document.getElementById("q_d").Value = ActiveSheet.Cells(rowno, 1).Value '送信ボタンクリック .Document.forms(0).submit '次の行 rowno = rowno + 1 Loop End With Set objIE = Nothing End Sub A列にある住所を読み込んで、グーグルマップに表示するスクリプトになります。 どう直して良いのか、皆目わかりません 御指南願います

  • JavaScript初心者です

    今、あるページに自動でログインした後で、特定のページまで移動する、という仕掛けを 作っています。ソースはこんなんです。 ------ここから----- main(); function main() { var ie = WScript.CreateObject("InternetExplorer.Application"); ie.visible = true; ie.navigate("URL"); while( (ie.Busy) || (ie.readystate != 4) ) { WScript.Sleep(100); } // ユーザID ie.document.getElementById("email").value = "メールアドレス"; // パスワード ie.document.getElementsByName("password").item(0).value = "パスワード"; ie.document.getElementsByName("menu_btn").value = "ログインページ"; ie.document.getElementsByTagName("form").item(0).submit(); while( (ie.Busy) || (ie.readystate != 4) ) { WScript.Sleep(100); } } var location; location.href = "移動先"; -----ここまで----- ログインは無事にできるのですが、そこのリンクを踏んで特定のページまで行くように location.hrefで指定してるのに飛ぶことができません。何がおかしいのでしょうか?

  • VBAでエクセルからツイッターに投稿

    VBAでエクセルからツイッターに連続投稿したいのですが難しいでしょうか?? 試しに作ってみたVBAです。 'モバイルなら投稿できるかも・・・? Sub tweet() Dim ie As InternetExplorer Dim txtAreaInput As HTMLTextAreaElement Set ie = CreateObject("internetExplorer.Application") 'IEを開く○ ie.Visible = True ie.Navigate "https://mobile.twitter.com/compose/tweet" 'ツイッターを開く○ Do While ie.Busy Or ie.ReadyState < READYSTATE_COMPLETE 'ページの読み込みを待つ○ DoEvents Loop Range("B2").Select '画像ファイルのセルをコピー○しかし連続となるとやり方わからないです。 Selection.Copy Set txtAreaInput = ie.Document.getElementsByName("textarea")(0) 'セルを選択× txtAreaInput.Value = ActiveSheet.Cells(2, 1).Value ObjIE.Document.all("camera-input").Click '画像パスを開く×そもそもカメラボタンが消えている?? SendKeys "^v{ENTER}" '画像ファイルのパスをペーストしエンター×効かない?? For Each Anchor In ie.Document.getElementsByTagName("A") 'ツイートを投稿×ボタンが押せない If Anchor.innerText = " ツイート " Then Anchor.Click Exit For End If Next End Sub

  • ExcelのvbaでHTMLの要素数を出力するには

    webサイト内で、classが"line-name"である要素の数を取得したく、 以下のようなコードを書きましたが、 型が一致しませんとのエラーが出て、うまく走りません。 修正点を教えていただけますでしょうか。 宜しくお願い致します。 -----以下コード----- Sub class数取得() Dim obIE As Object Dim el As Variant Set obIE = CreateObject("InternetExplorer.Application") obIE.Visible = True obIE.navigate "https://www.navitime.co.jp/transfer/railroadlist/?node=00005564&sNa...大宮(埼玉県)" While obIE.readyState <> 4 Or obIE.Busy = True DoEvents Wend Set el = obIE.document.getElementsByClassName("line-name").Length Cells(1, 6).Value = el End Sub

  • VBAでURLを指定する方法

    VBAを使用して、エクセルに記載しているテキストで開くURLを変えるプログラムを作成しようと思っております。 例えばA1に『yahoo』と入力されていれば、『http://www.yahoo.co.jp/』を開き、 『google』と入力されていれば、『http://www.google.com』を開くようにしたいです。 現在、下記のプログラムを使用していますので、 下記を流用できるようにして頂けると幸いです。 Sub test() Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "『特定URL』" Do While objIE.ReadyState <> 4 Do While objIE.Busy = True Loop Loop For Each Obj In objIE.Document.getelementsbytagname("input") If Obj.Name = "mail" Then objIE.Document.getelementsbyname("mail")(0).Value = Range("C1").Value Else If Obj.Name = "password" Then objIE.Document.getelementsbyname("password")(0).Value = Range("D1").Value Else objIE.Document.Links(1).Click End If End If Next End Sub 宜しくお願いいたします。

  • VBAでホームページから値を取得できない

    VBAでホームページから値を取得できない msnマネー残高照会サービス(https://zandaka.money.msn.co.jp/) は登録した各銀行、クレジットカード会社サイトから預金残高等を照会して 個人資産・負債のサマリー等を表示させるサービスですが、こちらの サイトから、毎日自動的に資産合計、負債合計、純資産※(資産合計-負債合計) の数字を取得して携帯にメールを送信したいと考え、VBAを作成中なのですが、 肝心のこれらの値をソースのどの部分から取得すればいいのかさえわからず まったくお手上げの状態です。もしヒントだけでもわかりましたら ご教授いただければと思います。よろしくお願いします。 Sub money_test() Dim objIE As Object Dim objSHELL As Object Dim newIE As Object Dim objINPUT As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "https://zandaka.money.msn.co.jp/" Do While objIE.Busy = True DoEvents Loop Sleep (2000) '画面が自動的に遷移するため、新しくオブジェクト取得 Set objSHELL = CreateObject("Shell.Application") Set newIE = objSHELL.Windows(objSHELL.Windows.Count - 1) Set objSHELL = Nothing newIE.document.F1.Password.Value = "******" For Each objINPUT In newIE.document.F1.all.tags("INPUT") If objINPUT.Value = "サインイン" Then objINPUT.Click Exit For End If Next Do While newIE.Busy = True DoEvents Loop Sleep (2000) ==============================   (上記項目を表示していると思われる該当部分のソース)  <!--★アカウント登録なし表示_end-->  <!-- コンテンツ_start -->  <!----sisan_start---->  <div id="aa_category_assets" class="box aa_category_assets"> <div class="boxtitle" style="float:none;"><span style="color:#669b3a;">資産・負債合計</span></div> <div style="padding:7px; padding-top:0px;"> <table class="toptable"> <tr> <th scope="col" style="width:30%;"> 資産合計</th> <th scope="col" style="width:30%;"> 負債合計</th> <th scope="col" style="text-align:center;"> 純資産※(資産合計-負債合計)</th> </tr> <tr> <td class="number"><span class="aa_assets_plus"></span></td> <td class="number"><span class="red aa_assets_minus"></span></td> <td class="number"><span class="aa_assets"></span></td> </tr> </table> </div>  </div>  <!----sisan_end---->

  • VBAで424エラーが出るPCと出ないPCがある

    マクロ初心者なのですが、ブラウザを操作していき、自動でフォーム登録を繰り返すプログラムを組みました。 職場のPC(win7 Excel2013 IE11)と自宅PC(win7 Excel2003 IE11)で確認したところ、問題なく動作していたのですが、依頼者の環境(win7 Excel2013 IE11)ではソース最後の《イベント名入力》の処理で424エラーが出てしまいます。 以下のような事を試してみたのですが、まったくわかりませんでした。 どなたか解決策をご教示ください!! ・Excelの参照設定確認⇒動作PCとすべて一致 ・IEの互換性表示設定⇒ 実施すると424エラーが91エラーになった ・getElementByIdをforms(0)にしてみた⇒動かず ・getElementByIdをgetElementsByNameにしてみた⇒動かず(91エラー) ・%temp%で検索し、Excel8.0のディレクトリを削除⇒影響なし デバッグ時にひっかかっている箇所の前に同じような処理('イベントコード)は動作しているのが逆に謎です。 以下、ソース冒頭から該当箇所まで Sub MainFlow() Dim objIE As Object 'IE起動 Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True '管理画面に接続 objIE.navigate "http://www.xxxxxxxxx.com" 'ループ回数の算出 endrow = Cells(Rows.Count, 1).End(xlUp).Row 'ループ処理 For myCnt = 2 To endrow 'IEを待機 Call IEWait(objIE) 'イベントコード objIE.document.getElementById("s_event_cd").Value = Worksheets("data1").Cells(myCnt, 1).Value 'コピー用開催日 objIE.document.getElementById("s_event_kaisai_ymd_from").Value = Worksheets("data1").Cells(myCnt, 2).Value '検索ボタン押下 Call IEButtonClick(objIE, "検索") 'IEを待機 Call IEWait(objIE) '編集ボタン画像をクリック For n = 0 To objIE.document.images.Length - 1 'イメージ数ループする。 Set objIMG = objIE.document.images(n) 'n番目のイメージを代入 If InStr(objIMG.src, "button_mod.gif") > 0 Then '"言語の入れ替え") '合致した画像のボタンの場合 objIMG.Click Exit For End If Next 'IEを待機 Call IEWait(objIE) 'サブミット Call IEButtonClick(objIE, "このイベントのコピーを作成") 'ビジーウエイト Call IEWait(objIE) 'イベント名入力 objIE.document.getElementById("event_name").Value = Worksheets("data1").Cells(myCnt, 3).Value 以下省略

  • javascriptでpostした値が取得できない

    javascriptのsubmit()を使ってpostした値が取得できません プログラム自体が素人に近い自分なのですが助けていただきたいです。。。 ページ内にある複数のボタンを5つ押した場合に違うページに押下したid配列と共に送りたいと考えました。 onoffの部分で5回ボタンが押されたら特定のページに遷移するところまではできたのですが、 遷移先でphpのvar_dump($_POST)で確認したところ array(0) { } が返ってきました。送信する前にデータが入ってるかalertで確認したのですが、そのときはちゃんと入っておりました。 取得方法が悪いのかはたまた送信方法が悪いのか混乱してしまい、今回質問させていただきました。 わかる方いらっしゃいましたらご教授よろしくお願いいたします。 member = new Array(); function cardonoff(id){ // ボタン押されてなければ if(document.getElementById("member"+id).value != "登録完了"){ document.getElementById("member"+id).value = "登録完了"; document.getElementById("member"+id).style.background = "#FF0000"; document.getElementById("member"+id).style.color = "#FFFFFF"; // ID追加 member.push(id); alert(member.length + "人のIDは" + member); if(member.length == 5){ alert("5人選択されました"); // 文字列に置き換え var memberlist = member.join(','); document.getElementById('memberid').value = memberlist; document.getElementById('memberselect').submit(); } } } form部分 <form id="memberselect" action="./" method="POST"> <INPUT type="hidden" id="memberid" value="" /> <?php foreach($result as $data){ ?> <section> <div class="category"> <h2> <input type="button" id="member<?php echo $data["id"]; ?>" value="メンバー登録" style="width:150px; height:30px" onClick="cardonoff(<?php echo $data["id"]; ?>)"> </h2> </div> </section> <?php } ?> </form>

専門家に質問してみよう