- ベストアンサー
VBAでハイパーリンクを抽出することについて
VBAやHTMLに詳しい人に質問です。 webサイトからハイパーリンクの値を取得するVBAコードを10年近く前に書いたのですが、全く覚えていないので困っています。 例えば下記の南関競馬の年間日程表のページから、各日程のハイパーリンクの値(4月1日なら /program/20140401200101.do )を抜き出し1つの列に並べて表示するという動きです。実行すると画像のようになります。 https://www.nankankeiba.com/calendar/201404.do しかし、現在は南関競馬は大幅リニューアルしたらしく、HTMLの仕様も変わったようなので、上手く動きません。 下はコードの一部分ですが多分ですが、サイトがリニューアルした結果、下記の行での指定("EM") では上手くアクセスできないのかと思います。HTMLも全く知識がないので、詳しい方いましたら、アドバイスお願いします。 Set Doc = ie.document Set chNodes = Doc.getElementsByTagName("EM") 'getElementsByTagName On Error Resume Next For Each chNode In chNodes Set docPart = New HTMLDocument docPart.write chNode.outerHTML Set chNodes1 = docPart.getElementsByTagName("A") myCell.Value = Replace(chNodes1(0).href, "about:", "") Set myCell = myCell.Offset(1, 0) Next chNode
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- type0(@type0)
- ベストアンサー率52% (282/534)
関連するQ&A
- VBAでIEのページを(メニュー選択)進める
エクセルのVBAでIEのページを(メニュー選択)進める件ですが Dim tag As String Dim objtag As Object in_str = "新しく記事を書く" tag = "li" Set objtag = doc.getElementsByName(tag)(0) For Each objtag In IE.document.getElementsByTagName(tag) If InStr(objtag.outerHTML, in_str) > 0 Then Exit For End If Next Debug.Print objtag.outerHTML objtag.Click For は 機能していて、Debug は <LI><A href="?mode=editor&process=new">新しく記事を書く</A> で 止まっています。 で、叩く方法は?? Click が機能しないのですが objtag. の 後に お助け文字が全く出ませんので、行き詰りました。
- ベストアンサー
- Visual Basic
- VBAを使ってHTMLソースから特定の文字列を抽出
ExcelでVBAを使ってHTMLソースから特定のデータを抽出したのですが、VBAは浅学なのでアドバイスを頂きたいです。 例えば、ここサイトの「 http://www.nankankeiba.com/calendar/201304.do 」 <em></em>タグ内の<a href="URL">のURLだけを取得して並べたいのですが、可能でしょうか。 この部分。(http://uproda.2ch-library.com/799465NHT/lib799465.jpg) ここ辺りが参考になりそうなのですが、<em></em>タグ内に限定する方法がわかりません。詳しい方いましたら、アドバイスよろしくお願いします。 http://okwave.jp/qa/q5919101.html 理想としてはこんな感じで取り出せるようにしたいです。(「program/20130407200101.do」の部分だけでも良い) http://uproda.2ch-library.com/7995052y7/lib799505.jpg
- ベストアンサー
- Excel(エクセル)
- VBAを使ってHTMLソースから特定の文字を抽出2
前回ExcelでVBAを使って「http://www.nankankeiba.com/calendar/201204.do」のサイトからHTMLソースから<em></em>タグ内の<a href="URL">のURL情報だけを抽出するコードを教えて頂きました。 そこで、取り込んだデータの更に下に「http://www.nankankeiba.com/calendar/201210.do」からも同じように<em></em>タグ内のURLデータを取得して表示したいのですが、ページ移動しても同じ情報を取得したり上手くいかないのでアドバイス頂けないでしょうかm(_ _)m 上のURLだけを取り込むコードはこちらになります。 http://uproda.2ch-library.com/800072670/lib800072.txt イメージとしてこの様にしたいです。 http://uproda.2ch-library.com/800071Xz0/lib800071.jpg
- ベストアンサー
- Excel(エクセル)
- VBAのオブジェクト変数について
人に教えなければいけないことなので、、、 困っています。 あるVBAのテキストを見て、そのテキストをそのまま入力しても実行できません。 (条件としては、Book1.xlsとBook2.xlsというファイルを開いた状態で、Book1.xlsのほうに、以下のモジュールを入力します。) Sub Set1() Dim myBook As Workbook Dim mySheet As Worksheet Dim myCell As Range Set myWBook = Workbooks("Book2.xls") Set myWSheet = Worksheets("Sheet2") Set myCell = Range("A1:D10") myWBook.Activate myWSheet.Activate myCell.Value = "ABC" End Sub これを実行すると、アクティブな状態のファイルにしか、値"ABC"が入ってこないのです。テキストでは、Book2.xlsのSheet2のA1:D10に値"ABC"が入ってくると言っていますが、Book1.xlsに値が入ってしまったりします。 長くなってしまってすみません。 もちろん、他の方法で実現することができるのはわかるのですが、なぜこのコードが実行できないのかがわかりません。 理由を教えていただけたら・・・と思います。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- VBAのハイパーリンクにつきまして
以前に質問をさせていただき、こちらでベストアンサーを決定した後に急きょ変更があったところがあり、わからなくなってしまいこちらに戻ってきた次第です。 http://okwave.jp/qa/q8743521.html にて質問をさせていただきました内容について、以下のVBAで解決できております。 しかし、抽出したファイル名にハイパーリンクが欲しいという要望を受けてしまいました。 ハイパーリンクのVBAについていろいろ調べましたが、この記述方法に追加して実行する方法が全く分かりませんでした。 お分かりになる方がいましたら、この内容にハイパーリンクをつける方法をお教えいただけますでしょうか。よろしくお願いいたします。 Sub Macro1() Dim i As Long Dim myPath As String, Flnm As String ReDim Flnmfp(0) As String Dim WS1 As worksheet Set WS1=ThisWorkbook.sheets("sheet1") myPath="望みのフォルダパスを入力" Call fpFileName(myPath, Flnmfp ) 'フォルダ内のファイル名取得 If Ubound(Flnmfp)=0 Then 'フォルダにファイルが無ければ終了 Exit Sub End if For i =1 to Ubound(Flnmfp) Workbooks.open filename := Flnmfp(i) Flnm=Dir(Flnmfp(i)) With Workbooks(Flnm).sheets("sheet1") WS1.Cells(2, i).value=.Range("G5").value WS1.Cells(3, i).value=.Range("G6").value WS1.Cells(4, i).value=.Range("K7").value WS1.Cells(5, i).value=CStr(.Range("G9").value) & CStr(.Range("N9").value) & CStr(.Range("P9").value) '同じ要領で望みのセルを記入する WS1.Cells(8, i).value=Flnm End with Workbooks(Flnm).close Savechanges:=False Next i End Sub Sub fpFileName(ByVal myPath As String, ByRef Flnmfp() As String) 'サブフォルダも含め全部のxlsファイル名をフルパスで取得する Dim cnt As Long, buf As String, f As Object buf = Dir(myPath & "\*.xls") Do While buf <> "" cnt = Ubound(Flnmfp) + 1 ReDim Preserve Flnmfp(cnt) Flnmfp(cnt)= myPath & "\" & buf buf = Dir() Loop With CreateObject("Scripting.FileSystemObject") For Each f In .GetFolder(myPath).SubFolders Call fpFileName(f.Path, Flnmfp) Next f End With End Sub
- ベストアンサー
- Visual Basic
- VBAでのIE操作で、ENTERキーが押せません
VBAでIEの操作を勉強中です。 HTMLを整形するホームページ(https://lab.syncer.jp/Tool/HTML-PrettyPrint/)です。 左側のエリアにHTMLを入力すると右側に整形されたHTMLが表示されるものです。 手動ではなんら問題ありません。 作成したVBAから操作すると、左側のエリアにHTMLは入力されますが、右側に表示されません。 入力後にENTERキーが押されれば表示されるというところまでは解っています。 解っているんですが、VBAから押せません。 どなたかご教示願います。 以下作成したVBAです。 ----------------------------------------------------------------------- Sub testIE() Dim IE As Object Dim target As String Dim wText As String target = "https://lab.syncer.jp/Tool/HTML-PrettyPrint/" wText = "<html><head><title>test</title></head><body><h1>test</h1></body></html>" Set IE = CreateObject("InternetExplorer.Application") With IE .Visible = True .Navigate target Do While .Busy = True Or .ReadyState <> 4 DoEvents Loop Do While .Document.ReadyState <> "complete" DoEvents Loop .Document.getElementsByTagName("textarea")(0).Value = wText SendKeys "{ENTER}" MsgBox .Document.getElementsByTagName("textarea")(1).Value End With End Sub
- ベストアンサー
- Excel(エクセル)
- VBA シート内ハイパーリンク置換がうまくいかない
お世話になります。 今、エクセルシートのセルにあるハイパーリンクの置換をVBAで行おうとしています。 ファイルサーバの移設に伴い、ファイルサーバ内に保存されているエクセルファイル内のハイパーリンクの一部置換を実施すべく、下記のとおり作ってみましたがうまく置換してくれません。。 置換したいエクセルファイルはlist_TM.txtにフルパスでリスト化しており、ファイルを開く→ハイパーリンクがあれば置換→上書き保存して閉じる の繰り返しを実行しています。 下記を実行したあと、実際にファイルを開いて置換された結果を確認すると、\\server1\tantou\Datasave\sample.xls → C:\Datasave\sample.xlsとなってしまっており、当方が所望する\\server2\kyoyu\tantou\Share\Datasave\sample.xlsになっていませんでした。原因がよくわからず質問させて頂いた次第です。 なお途中でTargetRowとTargetColumnを挟んでいますが、この2行はハイパーリンクがある行と列をちゃんと拾ってくれているかどうか確認するために入れたので、無視してい頂いていいかと思います。 お力添えの程、宜しくお願い致します。 Sub Link_OKIKAE() Dim i As Long Dim buf As String Dim AWBN As String Dim HL As Hyperlink Open "C:\temp\test\list_TM.txt" For Input As #1 Do Until EOF(1) Line Input #1, buf Workbooks.Open buf AWBN = ActiveWorkbook.Name For i = 1 To Worksheets.Count Sheets(i).Activate For Each HL In ActiveSheet.Hyperlinks TargetRow = HL.Range.Row TargetColumn = HL.Range.Column HL.Address = Replace(HL.Address, "\\server1\tantou", "\\server2\kyoyu\tantou\Share") Next HL Next i Workbooks(AWBN).Save Workbooks(AWBN).Close Loop Close #1 End Sub
- ベストアンサー
- Excel(エクセル)
- VBAオブジェクト変数またはWithブロック変数
Access VBAについてお教えください。 VBAを使用しています。下記のようなコードでDOMの値を取得しようと思っています。 If IsNull(IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText) Or _ IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText = "" Then stocker = "" Else stocker = IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText End If IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText)にデータがある場合は、 問題なくstockerに値をセットすることができます。 ただし、IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText)にデータ(要素)が なにも無い場合は、エラーが発生します。 「実行時エラー91;オブジェクト変数またはWithブロック変数が設定されていません」 IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText)にデータが無い場合は、NULLが 帰ってくるとサイトで見かけたので、IF文を使って回避しようと思いましたが、成功しませんでした。 何が悪いと考えられるでしょうか?
- ベストアンサー
- Visual Basic
- VBAでWebページのボタン操作ができない
IEの操作を自動化するVBAを作っています。 色んなサイトでログイン、ログアウト、・・・など様々なボタンがあるかと思いますが、 VBAからボタン操作ができずに困っています。 例えば、gooメールのログイン画面にログインボタンがあり、ソースは <INPUT value=ログイン type=submit> です。 これに対し、VBAで以下の記述をしました。 For Each objContents In IE.document.getElementsByTagName("INPUT") If objContents.Value = "ログイン" Then objContents.Click '←※1 objContents.submit '←※1 Exit For End If Next 'ボタンは2番目のフォームの3番目の要素 IE.document.forms(1).submit '←※1 IE.document.forms(1).getElementsByTagName("input")(2).Click '←※1 しかしながら、※1の操作に何の反応もありません(ページが切りわらない) ただ、セットしていたIDとパスワードが消えました。・・・ここに何かヒントがある?? 自分はVBA以外は知識があまり無く、HTMLソースも見てみましたが、よく分かりませんでした。 まずはClickもSubmitも効かない理由が知りたいです。 (上記は一例にすぎず、色んな場面(色んなサイト)でこういった現象に遭遇するので、今後の勉強のためにも。) そしてもし上記ケースの対処法が分かる方がいらっしゃればご教示いただければ幸いです。 よろしくお願いいたします。
- ベストアンサー
- その他MS Office製品
- <pre>タグ内のテキストを取得 エクセル VBA
HTML文書で以下のようになっているテキストをエクセルVBAで取得しようと思います。 <pre class="fontsize3"><tt> テキスト </tt></pre> 以下のコードを書きましたが、失敗しています。 Dim htdoc As HTMLDocument Set htdoc = ie.Document Cells(1,1) = htdoc.getElementsByTagName("pre")(0).innerText 何がまちがっているのでしょうか。
- 締切済み
- Excel(エクセル)
- インターネット環境に関して、自宅のWi-Fiを速くするための設定方法を教えてください。
- また、Wi-Fiがたまに切れることについての対処法も知りたいです。
- この記事では、ASUSのルーターを使用したWi-Fiの最適な設定方法や、Wi-Fiが切れる原因と解決策について詳しく解説します。
お礼