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

このQ&Aのポイント
  • ExcelのVBAを使用して、webサイト内の特定の要素の数を取得する方法について教えてください。
  • 上記のコードでは、型が一致しないエラーが発生しているため正しく動作しません。修正方法を教えてください。
  • 以下のコードは、指定したwebサイト内の要素(classが'line-name')の数を取得し、セルに表示するVBAコードです。正しく動作させるための修正点を教えていただけますか?
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (716/1482)
回答No.1

Set el = obIE.document.getElementsByClassName("line-name").Length のSet を外して下さい。 obIE.document.getElementsByClassName("line-name").Length は数字(long)なので、set があると入りません。 Dim el As Longにしても大丈夫です。

lime_3059
質問者

お礼

なるほど! 無事解決いたしました。 ありがとうございます。

関連するQ&A

  • ExcelのVBAでGooglemapの検索

    現在、ExcelのVBAでGooglemapにアクセスし、検索した後、検索結果の住所を抜き出すコードを書きましたが、うまくいきません。 具体的には、検索窓に検索ワードが表示されるだけで、検索結果が表示されませんでした。 そこで、検索文字が入力された状態で、検索ボタンを押すコードを付け加えましたが、 今度は、「オートメーションエラーです。エラーを特定できません」となりうまくいきません。 修正点のご指導の方、お願いいたします。 Sub 住所をmapで検索() Dim obIE As Object Dim el As Variant Dim button As HTMLInputElement Set obIE = CreateObject("InternetExplorer.Application") obIE.Visible = True obIE.navigate "https://www.google.co.jp/maps/place/原宿駅/" obIE.document.getElementById("searchbox-searchbutton").Click While obIE.readyState <> 4 Or obIE.Busy = True DoEvents Wend Set el = obIE.document.getElementsByClassName("widget-pane-link")(13) Cells(1, 1).Value = el.innerText End Sub

  • ExcelのVBAの正規表現で二重引用符を含む文字列を検索できるようにしたい

    二重引用符を含む文字列を検索できるようにするには 下記の記述の re.Pattern = "<hr class=\"separate\">" の部分をどのように直せばよいのでしょうか? Sub tagCount() Dim cnt As Integer Dim IE As Object Dim HTML As String Set IE = CreateObject("InternetExplorer.Application") IE.Navigate ("http://www.yahoo.co.jp/") While IE.busy: Wend While IE.Document.readyState <> "complete": Wend HTML = IE.Document.body.innerHTML IE.Quit Dim re As RegExp Dim mc As MatchCollection Dim m As Match Set re = New RegExp re.Pattern = "<hr class=\"separate\">" re.Global = True re.IgnoreCase = True Set mc = re.Execute(HTML) MsgBox mc.Count End Sub ご存知の方がおられましたらご回答をよろしくお願いします。 使用OS:Windows XP 使用ソフト:Microsoft Excel 2003

  • ExcelのVBAでHTML内の特定のタグの出現回数を調べたい

    たとえばYahoo!JapanのサイトのHTMLのTDタグの出現回数を調べる場合 下記のVBAに何を付け加えればよいのでしょうか? Sub tagCount() Dim cnt As Integer Dim IE As Object Dim HTML As String Set IE = CreateObject("InternetExplorer.Application") IE.Navigate ("http://www.yahoo.co.jp/") While IE.busy: Wend While IE.Document.readyState <> "complete": Wend HTML = IE.Document.body.innerHTML IE.Quit 'td_count = ここの部分がわかりません。 '文字列の出現回数をカウントする関数はないのでしょうか? MsgBox td_count End Sub ご存知の方がおられましたらご回答をよろしくお願いします。 使用OS:Windows XP 使用ソフト:Microsoft Excel 2003

  • DocumentCompleteイベントプロシジャに制御が渡らない

    VB6(VBA)でIEを操作し、表示ページのソースの読込みの確認にDocumentCompleteイベントを使用することを考えています。それで下記のテストプログラムを作成しますたが、DocumentCompleteイベントプロシジャに制御が渡りません。 その原因をご教示して頂きたくお願いします。 Dim WithEvents objIE As InternetExplorer --------------------------------------------------------------- Private Sub CommandButton1_Click() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" While objIE.readyState <> 4 While objIE.Busy = True DoEvents Wend Wend objIE.Navigate "http://www.goo.ne.jp/" While objIE.readyState <> 4 While objIE.Busy = True DoEvents Wend Wend End Sub ------------------------------------------------------------- Private Sub objIE_DocumentComplete(ByVal pDisp As Object, URL As Variant) MsgBox "ソースの読込み完了" 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 だとうまく動きません。 どう、変更すればよろしいですか?

  • EXCEL VBA で URL内容を 取得できない

    EXCEL VBAで URLの内容を取得しようとしていますが、URLの内容中に FINNAIRの広告ラベル? がトップにでてくる場合には URLの内容が取得できません。広告ラベルが 時々に変更されますが、FINNAIR以外の 広告ラベルの場合は URLの内容を取得できます。 FINNAIRの 広告ラベルも 取得できるようにするには、どうすればいいのでしょうか? FINNAIRの広告ラベルは、短時間のうちに 変化しているようです。なぜ、取得できないのか、まったくわかっていません。 解決方法を教えていただきたく、よろしくお願いします。 Sub IEデータ取得() Dim IE As Object Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True IE.navigate "http://www.japantimes.co.jp/news/" While (IE.readyState <> 4) Or IE.busy = True DoEvents Wend DoEvents IE.document.body.Focus IE.ExecWB 17, 0 IE.ExecWB 12, 0 Excel.Application.CutCopyMode = False Sheets.Add.name = "Formatテキスト" Range("A1").Select ActiveSheet.PasteSpecial Format:="テキスト" IE.Quit Set IE = Nothing End Sub

  • タグ名取得でエラー

    エクセル2003VBAで以下のコードを実行するとBrowser1がエラーとなります。 どなたか解決法がわからないでしょうか。 よろしくお願いします。 \'IEのウィンドウハンドルを取得 Dim hwnd As Long hwnd = FindWindow(\"IEFrame\", vbNullString) \'ウィンドウを前面に表示する If hwnd = 0 Then MsgBox \"IEが起動していません\" Exit Sub End If SetForegroundWindow hwnd Dim Browser1 As Object Dim elm As Object Dim i As Integer Const READYSTATE_COMPLETE As Long = 4 \'次の画面が表示されるまで待機 While Browser1.ReadyState <> READYSTATE_COMPLETE While Browser1.Busy = True DoEvents Wend Wend Set elm = Browser1.document.getElementsByTagName(\"INPUT\") For i = 0 To elm.Length - 1 If (elm(i).Name = \"q\") Then elm(i).Focus: Exit For Next i

  • WEB画面をエクセルのセルに貼り付けるマクロ

    過去の回答を参考にエクセルでWEB画面をすべて選択しエクセルの所定のセルに貼り付けするマクロを作成しました。処理を追加していった結果、下記のようなマクロが完成しました。ステップインで動作確認できましたが、マクロ実行から動かすと途中で止まります。 止まる箇所は、 While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True DoEvents Wend DoEvents この記述でWEBが遅く開く時に対応するよう作成しましたが、ここで止まります。(抜け出せません) また、この記述を削るとステップインではうまく動きますが、マクロの実行から動かすと何回目かで objIE.ExecWB 17, 0 すべて選択するときに止まります。 どこが悪いのか教えていただけないでしょうか? 使用、作成したのは、excel2007 及びexcel2010です。どちらでも動きません。 よろしくお願い致します。 Sub test() Dim URL As String Dim URL2 As String Dim URL3 As String Dim CD As String Dim i As Integer For i = 1 To 199 CD = Worksheets("CD").Cells(i + 1, 1).Value URL2 = "貼り付けたいWEBのURL" URL3 = CD ’縦一列にコードを入力しているシート URL = URL2 & URL3 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.navigate URL While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True DoEvents Wend DoEvents objIE.ExecWB 17, 0 objIE.ExecWB 12, 0 Sheets.Add ActiveSheet.Name = 199 - i Range("A1").Select ActiveSheet.PasteSpecial Format:="HTML" objIE.Quit Set objIE = Nothing Next End Sub よろしくお願いいたします。

  • VBAで全ての受信トレイの数ではなく受信メールの数

    VBAで全ての受信トレイの数ではなく受信メールの数を取得する方法は? Sub めーる数() Dim myNaSp As NameSpace Dim myFolder As MAPIFolder Set myNaSp = GetNamespace("MAPI") Set myFolder = myNaSp.GetDefaultFolder(olFolderInbox) Debug.Print myFolder.Items.Count Set myNaSp = Nothing Set myFolder = Nothing End Sub このコードだと、「受信トレイ」のメールの数しか取得できません。 フォルダは画像のように、サブフォルダがあります。 この場合、全ての受信メール(受信トレイ+サブフォルダ)の数を取得するにはどうすればいいでしょう?

  • Excel VBA

    外部からモジュールを読み込めるようにしました。 ーーーーーーーーーーーーーーーーーーーーー Sub moduleImport_All() 'インポートしたいファイルのあるフォルダを指定 Dim sImportPath As String sImportPath = "C:\VBA\module\" 'FileSystemObjectの作成 Dim oFso As Object Set oFso = CreateObject("Scripting.FileSystemObject") 'フォルダオブジェクトを取得 Dim oDir As Object Set oDir = oFso.GetFolder(sImportPath) 'ファイル名を順次取得 Dim fFile As Object For Each fFile In oDir.Files 'ファイルの拡張子を取得 Dim sExt As String sExt = oFso.GetExtensionName(fFile.Name) '拡張子からモジュールだけを取得、インポート Select Case LCase(sExt) Case "bas", "cls", "frm" '指定のモジュールをインポート ThisWorkbook.VBProject.VBComponents.Import sImportPath & fFile.Name End Select Next MsgBox "完了" End Sub ーーーーーーーーーーーーーーーーーーーーー しかし、上書きがなされない為、1,2,3とモジュールが増えてしまいます。 読込みたいフォルダ内のファイルと同じ名前であれば全て上書きするにはどのように修正したらよいでしょうか?