OuterTextとinnerTextの違いとは?

このQ&Aのポイント
  • 「OuterText」と「「innerText」」の違いについて質問です。
  • VBAを使用している場合、OuterTextとinnerTextの結果は同じですが、実際には異なるプロパティです。
  • OuterTextは要素の外側のテキストを取得し、innerTextは要素内のテキストを取得します。
回答を見る
  • ベストアンサー

「OuterText」と「「innerText」」

「OuterText」と「「innerText」」の違いは何でしょう? エクセルVBAです。 Sub test() Dim objLINK As Object Dim objIE As InternetExplorer Dim i As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.GoHome objIE.Visible = True Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop For Each objLINK In objIE.Document.Links i = i + 1 Cells(i, 1) = objIE.Document.Links(i - 1).OuterText ' Next objIE.Quit Set objIE = Nothing End Sub のOuterTextをinnerTextに変えても結果は同じなのですが、 「OuterText」と「「innerText」」の違いはなんでしょう? ヘルプを見ようと思ったのですが なぜか見れないので教えてください。

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

●ダイナミック コンテンツについて http://msdn.microsoft.com/ja-jp/library/cc344395.aspx の [テキストおよび HTML コードを操作する] - [テキストを使用する] の項に -- これより引用 -------------------------------------------- innerText および outerText プロパティは同じ情報を返すため、HTML 要素内のテキストが同じように認識されますが、プロパティを設定すると違いが表面化します。 -- ここまで引用 -------------------------------------------- と記載され、詳しい説明がその下に書いてあります。  ザクッとした理解から申せば、読み取りにおいては、常に innerText = outerText にはなるけれども、書き込む場合に、「innerText」は「テキスト部分のみの設定」、「outerText」は「テキストを囲む html タグも含めての設定」ということになりましょうか。  ということで、皆さんが、VBA で html を読みに行かれるときは、通例「読み取り」だけでしょうから、どちらでも構わないということになるかと存じます。

mcptcmhm
質問者

お礼

どうもありがとうございました。

その他の回答 (1)

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

他人さまのサイトへのリンクで恐縮ですが・・ http://www.ken3.org/vba/backno/vba119.html 「2.IE Elementオブジェクト(タグに対応した各要素)を探る」 に説明があります。 InnerHtml・OuterHtmlと対比して考えてみると、 結果として同じものを返してくるようですが、考え方が少々違うようですね。 2時間ほど試行してみましたが、違いが出るタグは見つかりませんでしたT-T 中途半端な情報で申し訳ないですT-T

mcptcmhm
質問者

お礼

いえいえ!2時間も検証して頂いたのですか! 申し訳ないです。 リンク先よく読んでみます。 ありがとうございました。

関連するQ&A

  • vbaie操作 新しく開いたウインドウを操作したい

    こんばんは。いつもお世話になっております。 新たに開いたウインドウをVBAでキャッチ(?)して、 オブジェクトの中に入れたいのですがやり方が分かりません。 OS:XP、オフィス2003です。 http://okwave.jp/qa/q7643293.html を参考に、 --------------------------------------------------------- Option Explicit Sub test1() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.goo.ne.jp/" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop Do While objIE.Document.ReadyState <> "complete" DoEvents Loop ’安否情報確認サイト 【J-anpi】をクリックする For i = 0 To objIE.Document.Links.Length - 1 If objIE.Document.Links(i).href = "http://anpi.jp/" Then objIE.Document.Links(i).Target = "_blank" objIE.Document.Links(i).Click Exit For End If Next i objIE.Document.all("name").Value = "test" 'エラーになる Set objIE = Nothing End Sub --------------------------------------------------------- を実行した時に、 http://anpi.jp/top のページの“名前“をVBAで入れたいのですが、実行時エラー91になります。 理由は、 objIEには、http://www.goo.ne.jp/が入ってるから、 http://anpi.jp/topのページは操作できないのが原因だと思うのですが Dim objIE2 As InternetExplorer のように新たなオブジェクトを作って、 objIE2にhttp://anpi.jp/topを入れて操作するにはどうすればいいでしょうか? 最初から、 objIE.Navigate http://anpi.jp/top を開いたり、 objIE.Navigate2 http://anpi.jp/top , 2048 で新たなタブを開く方法以外でお願いします。 Debug.Print objIE.LocationURL を見ると、 http://www.goo.ne.jp/ が返ってきます。(そりゃそうか) 本当はこのサイトはサンプルで実際は、 vbaで objIE.Document.Links(i).Target = "_blank" objIE.Document.Links(i).Click をクリックした場合、 新たに開いたウインドウをVBAでテキストに文字を入れたり、ボタンを押したりの操作する方法を知りたいのです。 objIE.document.Links(i).Click このタイミングで、 objIEにhttp://anpi.jp/topがはいればいいなーって思ってます。 --------------------------------------------------------- Sub test2() Dim objIE As InternetExplorer Dim objIE2 As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") Set objIE2 = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.goo.ne.jp/" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop Do While objIE.Document.ReadyState <> "complete" DoEvents Loop ’安否情報確認サイト 【J-anpi】をクリックする objIE2.Navigate "http://anpi.jp/top" objIE2.Visible = True objIE2.Document.all("name").Value = "test" 'エラーになる Set objIE = Nothing Set objIE2 = Nothing End Sub --------------------------------------------------------- これにするしかないのでしょうか? ご回答よろしくお願いします。

  • Document.Links.Length 

    Sub testA() Dim objIE As Object Dim i As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.yahoo.co.jp/" objIE.Visible = True Do While objIE.Document.ReadyState <> "complete" DoEvents Loop For i = 0 To objIE.Document.Links.Length - 1 Debug.Print objIE.Document.Links(i).href Next i End Sub の、「Document.Links.Length - 1」の-1ってなぜ必要なのですか? 「Document.Links.Length」はリンクの最大数ですよね? マイナス1しちゃうと一番最後のリンクが取得されなくなってしまいませんか? 試しにマイナス1を削除したら iの最大値で 実行時エラー91になりました。 そもそもなんでFor i = 0で始まってるのでしょうか? リンクの数が300個だとしたら 0から299個目までループしてる事にならないのですか?

  • 三菱東京UFJ銀行に自動ログインしたいのですが

    どうもうまくできません。 ログインボタンが押せません。 Sub tset() Dim objIE As Object Dim i As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.navigate "https://entry11.bk.mufg.jp/ibg/dfw/APLIN/loginib/login?_TRANID=AA000_001" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop With objIE.document .all("KEIYAKU_NO").Value = "test" .all("PASSWORD").Value = "PASSWORD" End With For i = 0 To objIE.document.Links.Length - 1 If objIE.document.Links(i).innerHTML Like "*alt=ログイン*" Then objIE.document.Links(i).Click Exit For End If Next i For i = 0 To objIE.document.Links.Length - 1 If objIE.document.Links(i).innerText = "ログイン" Then objIE.document.Links(i).Click Exit For End If Next i End Sub でも、押せないのですが、ご教授いただけませんか? よろしくお願いします。

  • MSXML2で、サイトのタイトルを取得したい

    アクセスvbaです。 InternetExplorerの方法だと、 **************************************************** Sub Sample1() Dim ObjIE As InternetExplorer Set ObjIE = CreateObject("InternetExplorer.Application") ObjIE.Navigate "http://www.yahoo.co.jp/" ObjIE.Visible = True Do While ObjIE.Busy = True DoEvents Loop Do While ObjIE.Document.ReadyState <> "complete" DoEvents Loop Debug.Print ObjIE.Document.Title Debug.Print ObjIE.LocationName ' 同じ ObjIE.Quit Set ObjIE = Nothing End Sub **************************************************** で、該当のサイトのタイトルを取得できるのですが、 これではなく、 **************************************************** Sub Sample2() Dim objMSXML2 As Object Dim myObj As Object Dim myAll As Variant Set objMSXML2 = CreateObject("MSXML2.XMLHTTP") objMSXML2.Open "GET", "http://www.yahoo.co.jp/", False objMSXML2.Send myAll = objMSXML2.responseText 'ソースを抜き出す ’タイトル取得 Set objMSXML2 = Nothing End Sub **************************************************** の方法で、サイトのタイトルを取得したいのですが、 可能でしょうか? コードをご教授ください。よろしくお願いします。

  • サイトのソースのsubmitボタンの数を取得したい

    サイトのソースのsubmitボタンの数を取得したいのですが Sub test() Dim objIE As InternetExplorer Dim MyRow As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.coneco.net/" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop Debug.Print objIE.Document.all.tags("input").Type("submit").Count Set objIE = Nothing End Sub だとうまく動きません。 どう、変更すればよろしいですか?

  • DoEvents

    VBSでDoEventsは使えないのでしょうか? *************************** Dim ObjIE dim i Set ObjIE = CreateObject("InternetExplorer.Application") ObjIE.Navigate "http://oshiete.goo.ne.jp/" ObjIE.Visible = True Do While ObjIE.Busy = True DoEvents Loop Do While ObjIE.Document.ReadyState <> "complete" DoEvents Loop Set ObjIE = Nothing *************************** だと、エラーになりました。 Wscript.sleep 3000 ならエラーにならずにコードは動きました。 VBAならDoEventsは使えるのに VBSで使えない理由を教えてください。

  • ie操作 ログインボタンを押せないです

    こんばんは。いつもお世話になっております。 ie操作でうまく行かないので教えてください。 イトーヨーカドーのサイトにログインしたいのですがログインボタンが押下できません。 Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://www.iy-net.jp/" Do While objIE.Busy = True DoEvents Loop objIE.Document.all("userId").Value = ID objIE.Document.all("password").Value = PW objIE.Document.forms(0).submit Set objIE = Nothing End Sub --------------------------------------------------------- だと、 「ハイフンを除く7ケタを半角数字でご入力ください」になってしまいます。 ログインボタンが押せてないのかもしれないけど、よくわかりません。 --------------------------------------------------------- Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://www.iy-net.jp/" Do While objIE.Busy = True DoEvents Loop objIE.Document.all("userId").Value = ID objIE.Document.all("password").Value = PW For i = 0 To objIE.Document.Links.Length - 1 If objIE.Document.Links(i).innerText = "ログイン" Then objIE.Document.Links(i).Click Exit For End If Next i Set objIE = Nothing End Sub --------------------------------------------------------- にすると、 https://www.iy-net.jp/nspc/logininput.do のURLが表示されて会員認証の画面になってしまいます。 だからって objIE.Navigate "https://www.iy-net.jp/" を https://www.iy-net.jp/nspc/logininput.do にして objIE.Document.forms(0).submit すると https://www.iy-net.jp/nspc/searchresult.do のページが表示されて 「再度 TOPページよりログインいただけますようお願い申し上げます。」 になってしまいます。 ログインする方法を教えていただけますか? ご教授よろしくお願いします。

  • 「オブジェクトの破棄」と「メモリの解放」は同じ意味

    「オブジェクトの破棄」と「メモリの解放」は同じ意味ですか? ********************************* Sub Sample1() Dim objIE As Object Dim buf As String Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "http://oshiete.goo.ne.jp/" Do While objIE.busy DoEvents Loop Do While objIE.Document.readyState <> "complete" DoEvents Loop Set objIE = Nothing End Sub ********************************* の場合の「Set objIE = Nothing」は、 「オブジェクトの破棄」でしょうか? 「メモリの解放」でしょうか? どちらでもありますか? ご回答よろしくお願いします。

  • 2ページ目が表示されるまで待つには?

    target="_blank" で開かれるリンクで、開いた先が完全に表示されるまで待つにはどうすればよいでしょう? 例えば ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Sub Sample() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "http://www.tagindex.com/html_tag/link/a_target.html" 'これは1ページ目を表示させるまで待つ Do Until objIE.Busy = False And objIE.readyState = 4: Loop For i = 0 To objIE.document.Links.Length - 1 If objIE.document.Links(i).innerText = "新しいウィンドウで表示します" Then objIE.document.Links(i).Click 'ここで2ページ目を表示させるまで待つには? Exit For End If Next Set objIE = Nothing End Sub ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ という状態で、 objIE.document.Links(i).Clickを実行した後の表示を待つにはどうすればいいでしょう? (http://www.tagindex.com/html_tag/link/target_example.htmlのページです) objIEの値は、"http://www.tagindex.com/html_tag/link/a_target.html"のままなので、 新しくobjIEを作ればいいのでしょうか? ご回答よろしくお願いします。

  • 「ページが表示されました」まで取得したい

    IEを立ち上げてステータスバーのテキストを取得して、 「ページが表示されました」を取得出来たら、次のコードへ進みたいのですが、 下のコードでStatusTexttを書き出しても「ページが表示されました」まで取得できません。 Sub test() Dim objIE As InternetExplorer Dim i As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.goo.ne.jp/" objIE.Visible = True Workbooks.Add Cells(1, 1) = objIE.StatusText i = 2 Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Cells(i, 1) = objIE.StatusText i = i + 1 Loop Cells(i, 1) = objIE.StatusText Set objIE = Nothing End Sub Do While objIE.Busy = True Or objIE.ReadyState <> 4 ここら辺のコードを弄ればいいような気がしますが、うまくいきません。 ご回答よろしくお願いします。

専門家に質問してみよう