• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:サイトの記事をエクセルに落としたいのですが・・・)

サイトの記事をエクセルに落とす方法とエラーの修正方法

このQ&Aのポイント
  • サイトの記事をエクセルに落とす方法について、プログラムの組み方と修正方法を教えてください。
  • エラーが発生し、原因が分からない状態です。どのように修正すればいいのか教えてください。
  • また、もっと別の方法で記事をエクセルに落とすことができるなら、教えてください。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

http://okwave.jp/qa/q7630144.html の続きでしょうか。 ご提示のコードでは、 >TITLE = 0 ですから、 >Cells(TITLE, PART) = Myhtml ここで Cells(0, 1)...で、0行目を指定してしまってエラーになります。 だからといって、TITLE = 1 から始めればいいかというと、 "http://syarecowa.moo.jp/1/1.htm" このURLのページは存在しませんから、目的のページを取得できません。 それに、Do Loopステートメントの中で変数 TITLE と PART を増分させてないので無限Loopです。 Excelの基本機能に[外部データの取り込み]、Webクエリというものがあります。 これを使うとWebページの取り込みができますから、操作をマクロ記録して参考にしてみてください。 実際には、前回のQAで取り込むページのリンク先URLが取得できたわけですから、 その続きで、取得したURLだけをLoop処理すれば良いです。 Sub try2()   Const url = "http://syarecowa.moo.jp/"   Dim x  As Object   Dim y() As String   Dim i  As Long   With CreateObject("InternetExplorer.Application")     .Navigate url & "menu001.htm"     .Visible = True 'False     Do While .Busy Or (.ReadyState <> 4)       DoEvents     Loop     'リンク先を配列に記憶     ReDim y(1 To .Document.Links.Length)     For Each x In .Document.Links       If x.href <> url & "menu.html" Then         i = i + 1         y(i) = x.href       End If     Next     .Quit   End With   '配列を有効データの個数にリサイズ   ReDim Preserve y(1 To i)   Application.ScreenUpdating = False   With Sheets.Add     For i = 1 To UBound(y)       .Cells(1, i).Value = y(i)       'Webクエリの繰り返し。次URLは列方向に書き出す。       With .QueryTables.Add(Connection:="URL;" & y(i), _                  Destination:=.Cells(2, i))         .FillAdjacentFormulas = False         .PreserveFormatting = False         .RefreshStyle = xlOverwriteCells         .AdjustColumnWidth = False         .WebSelectionType = xlEntirePage         .WebFormatting = xlWebFormattingNone         .WebPreFormattedTextToColumns = False         .WebSingleBlockTextImport = False         .WebDisableDateRecognition = True         .Refresh BackgroundQuery:=False         .Parent.Names(.Name).Delete         .Delete       End With     Next   End With End Sub

xoden
質問者

お礼

end-u様 前回に引き続き、本当にありがとうございます。今思っている感謝は、どう言っても言葉にしつくせません。見ず知らずの私にこんなによくして下さる方がいらっしゃるとは、夢にも思いませんでした。 end-u様のマクロを実行してみて、自分の思い描いた以上の処理がババっとできた画面を見て、涙で画面がにじみました。このデータが取れなかった場合は、大幅に研究テーマを修正するしかないという瀬戸際だったものでして… >Excelの基本機能に[外部データの取り込み]、Webクエリというものがあります。 >これを使うとWebページの取り込みができますから、操作をマクロ記録して参考にしてみてください。 ありがとうございます。Webクエリの存在自体は知りマクロなども参考にしてみたのですが、どう応用させればいいのか分からずに結局放置していました…取得したURLをWebクエリで処理すればよかったんですね。 また、ReDimの使い方も大変勉強になりました。入門編等では再定義できることのありがたみが理解できなかったので。 今回end-u様に組んでいただいたコードを勉強して、しっかりと次に活かせるように致します。また、end-u様のBLOGの方も大変参考になるものが多いので、勉強させて頂きます。 なにより、今回のend-u様のご厚意を無駄にせぬよう、精一杯研究に活かして参ります。 重ね重ね、厚く御礼申し上げます。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel VBAでブラウザのリンクをクリックするには

    Excelのバージョンは2003です。 VBAで出発地から到着地からNavitimeのサイトに接続して距離を取得するようなプログラムを作成していますが… 下記のように記述しています。 Private Sub Workbook_Open() Dim ie As InternetExplorer Dim addr0 As String Dim addr1 As String Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True addr0 = "住所1" addr1 = "住所2" ie.navigate "http://www.navitime.co.jp/?keyword0=" & urlEncode(addr0) & _ "&keyword1=" & urlEncode(addr1) & _ "&ctl=0604" Do While ie.Busy = True Do While ie.readyState <> 4 DoEvents Loop Loop End Sub Public Function urlEncode(str As String) As String Set sc = CreateObject("ScriptControl") sc.Language = "Jscript" Set js = sc.CodeObject urlEncode = js.encodeURIComponent(str) End Function リンクをクリックするにはどのようにすればいいのでしょうか。 アドバイス宜しくお願いします。

  • VBA:最下層のファイルを取得

    最下層にあるファイルのファイル名を取得したく下記の様なプログラミングを組んでみたところ、 「ファイル名または番号が不正です」というエラーが表示されてしまいます。比較演算子などをいじって 試行錯誤してみましたが、どうしてもできません。どのように修正すればよいのでしょうか。ご回答よろしくお願いいたします。 http://syarecowa.moo.jpというサイトのmenu001.htmの下にある"1/3ケタの数字.htm"のファイル名を全て取得したいと考えています。 現在組めているコードは下記の通りです Dim cnt As Long ---------------- Sub Macro5(Path As String)    Dim buf As String, f As Object    buf = Dir(Path & "/#/###.htm")  ★★ここでエラーが生じていしまいます★★    Do While buf <> ""    cnt = cnt + 1    Cells(cnt, 1) = buf    buf = Dir()    Loop    With CreateObject("Scripting.FileSystemObject")     For Each f In .GetFolder(Path).SubFolders    Call Macro5(f.Path)    Next f    End With End Sub -------------------------- Sub Macro6() Dim URL As String 'ファイルパス Dim IE As Object 'オブジェクト Dim Myhtml As Variant 'HTMLタグデータ    'インターネットに接続    Set IE = CreateObject("InternetExplorer.Application")    With IE    .Navigate "http://syarecowa.moo.jp/menu001.htm"    .Visible = Flase    Do While .Busy = True    DoEvents    Loop    'Macro5呼び出し     cnt = 0     Call Macro5("http://syarecowa.moo.jp/menu001.htm")    End With    End Sub

  • VBA IEを操作。ファイルダウンロード

    IEを操作して、ファイルをダウンロードしようと思います。 色んなサイトからとってきて、使わせてもらっています。 '---------------------------------IEを開くときに使う Sub IE_OPEN(webUrl As String) Dim objShell Dim writesheet As Worksheet Dim n As Long Dim ID As String, Password As String Set objShell = CreateObject("Shell.Application") Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate2 webUrl Do While ie.Busy Or ie.readyState <> 4 DoEvents Loop Dim objINPUT Set objINPUT = ie.document.getElementsByTagName("INPUT") 'ループで頭からテキストが 次へ を探す For n = 0 To objINPUT.Length - 1 '※ type="submitボタンなので、.InnerTextじゃなくて、.Valueです ※※注意 If InStr(objINPUT(n).Value, "ログイン") > 0 Then '文字列の中から見つけたら Worksheets("Sheet1").Activate Do While ie.Busy Loop objINPUT(n).Click '見つけたINPUTタグのオブジェクトをクリック Do While ie.Busy Loop Exit For End If Next Set objINPUT = Nothing 'オブジェクト変数解放 End Sub '------------------------------IEを開く(この段階では既に開いてあります。) Private Sub CommandButton1_Click() Do While ie.Busy Or ie.readyState <> 4 DoEvents Loop ie.document.all.ah_ehName.Value = Me.ComboBox1.List(Me.ComboBox1.ListIndex) 'ID Do While ie.Busy Loop Dim objINPUT Dim n As Long Set objINPUT = ie.document.getElementsByTagName("INPUT") For n = 0 To objINPUT.Length - 1 If InStr(objINPUT(n).Value, "ダウンロード") > 0 Then objINPUT(n).Click Do While ie.Busy Loop Exit For End If Next Do While ie.Busy = True DoEvents Loop SendKeys "%S", True'保存 Do While ie.Busy = True DoEvents '何もしないループ(笑) Loop SendKeys "%O",True'ファイルを開く? Do While ie.Busy = True DoEvents Loop 'ie.Quit End Sub ’==================- 面倒なので、IEはPublic変数として モジュールに書いています。 (色んなモジュールを経由する必要があるため、このような手段を取りました) SendKeysをIEに送るというのが出来ずに困っています。 ダウンロードというボタンを押してのダウンロードなので、 ダウンロード用のURL等は分かりません。 Excel2003を使っています。 どうにかSendkeysで出来ないでしょうか? もしくは、もう少し分かりやすい方法は無いでしょうか。 (ファイルを保存しますか?のダイアログの「保存」をクリックして  所定の場所におき、開きたい。 そのまま開くのでもいいけれど、動作が不安定になるのは困る) 以上、よろしくお願い致します。

  • VB.NETでIEに表示中のHTMLを得る方法について

    インターネットのhtmlデータを解析したくて下記のプログラムでインターネットエクスプローラーから 表示されている内容のhtmlを取得しているのですが、 ジャバスクリプトを実行後に表示されるページの場合 マウスの右クリックで表示するソースと、ブラウザの「表示(V)」、「ソース(C)」で 表示する方法とで内容が違うのですが、マウスの右クリックの時に表示される ソースを取得したいのですが、どんなプログラムにすれば良いでしょうか? Dim IE As Object Dim Url1 As String Dim HtmlData As String Url1 = "http://www.yahoo.co.jp" IE = CreateObject("InternetExplorer.Application") With IE .Navigate(Url1) Do While .Busy = True Loop Do While .document.ReadyState <> "complete" Loop .visible = True HtmlData = .document.DocumentElement.outerHTML End With

  • ExcelVBAについて質問です。

    ExcelVBAについて質問です。 Webのデータを取得したいのですがたまにエラーがでます。 そこで1回エラーが出たら再度同じ処理をして、2回目もエラーが出たら エラーメッセージを表示させたいです。 しかし1回目エラーで2回目取得できたらうまくいくのですが 2回連続でエラーになったら途中で止まってしまいます。 2回連続でエラーになった時の処理方法を教えてください。 Public Sub クリック_Click()  On Error GoTo Err1  Dim エラー As Integer For エラー = 0 To 1  'HTML読み込み   Dim fff As String 'ファイルパス   Dim objIE As Object 'オブジェクト   Dim Myhtml As Variant 'HTMLタグデータ  '制御htmlファイル   phn = ThisWorkbook.Path   fff = "URL"  'Webページ表示   Set objIE = CreateObject("InternetExplorer.Application")   objIE.Navigate fff  '画面表示待ち   Do While objIE.Busy = True    DoEvents   Loop  Myhtml = objIE.Document.Body.innerHTML  objIE.Quit  Sheets("シート").Range("A1").Value = Myhtml Exit Sub Err1:  Next エラー  MsgBox "エラー発生" End Sub

  • エクセル マクロ WEBエクセルデータ 取込方法

    いつも大変御世話になっております。 【D:\test】フォルダ内に、1つのエクセルファイル【sample.xls】(Excel2003)があります。 そのエクセルファイルのマクロボタンを一つ作成しておきます。そのボタンを押すと以下の処理が 可能なコードを作成中です。 (1)WEBサイト【http://www.sample.co.jp/book1.xls】を開く。  ※ここでのURLは例 (2)(1)で開いたエクセルファイル"A1:B10"の箇所をコピー。 (3)sample.xlsのシート【web_data】のセルA1に、(2)でコピーしたものを貼り付け。 (4)(1)で開いたエクセルファイルを閉じる。 コード>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Option Explicit Sub test() Dim IE As Object, buf As String Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True IE.Navigate "http://www.sample.co.jp/book1.xls" Do While IE.busy = True DoEvents Loop Do While IE.document.readystate <> "complete" DoEvents Loop buf = IE.document.body.innertext IE.Quit MsgBox buf Set IE = Nothing End Sub コード>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 途中まで作成しましたが、どうもWEB上のセル内をコピー出来ません。 もしご存知の方がいらっしゃるようでしたら、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • エクセル excelVBA で 自動ログイン

    エクセルvba を使ったシステムトレードをしようと思い 初心者ながらVBAをいじっています. まずはじめにsbi証券に自動ログインをしようとする vbaを作ろうとおもい,インターネットを駆使して コードを書いてみましたが documentメソッドは失敗しましたというエラーがでてしまいます. 自分なりに色々と見返したりしたのですが どこが悪いのかいまいちわかりません. もしよろしければどこが悪いのか指摘していただけないでしょうか? よろしくお願いします. 以下ソース ******************************** Option Explicit Sub test() Dim ie As Object Dim strUserName, strPassword As String strUserName = Range("C5").Value strPassword = Range("C7").Value Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate "https://k.sbisec.co.jp/bsite/visitor/top.do" IE_Complete ie ' Do While ie.Busy = True '何もしないループ(笑) ' DoEvents ' Loop ie.Document.All.UserName.Value = strUserName 'ユーザー名 ie.Document.All.Password.Value = strPassword 'パスワード ie.Document.All.login.Click 'クリック End Sub Public Sub IE_Complete(ByVal ie As Object) 'IE読み込みが完了するまで待つ Do While ie.Busy = True DoEvents Loop Do While ie.Document.ReadyState <> "complete" DoEvents Loop End Sub

  • エクセルマクロでIE操作

    IEをエクセルマクロで操作する際に現在は下記のようなコードで立ち上げでいます。 この時、1回目の処理が終わり、もう一度同じボタンを押してコードを実行する際 あたにIEが立ち上がってしまいます。 同じURLのIEがすでに立ち上がっている際には そのIEを利用して処理を行うにはどのようにしたらよいでしょうか? ption Explicit 'Sleepを使用する場合のお約束 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public Declare Function CloseWindow Lib "User32" (ByVal hwnd&) As Long Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Dim objIE As Object '変数を定義 Dim Obj As Object '変数を定義 Sub 間接() 'IEテストする。 Dim txtSelect As HTMLSelectElement Dim objTAG As Object 'IEの起動 Dim objIE As Object '変数を定義します。 Set objIE = New InternetExplorerMedium objIE.Visible = True '可視、Trueで見えるようにします。 '処理したいページを表示します。 objIE.Navigate "https://www.google.co.jp/?gws_rd=ssl" Sleep (1000) Do While objIE.ReadyState <> 4 'サイトが開かれるまで待つ(お約束) Do While objIE.Busy = True 'サイトが開かれるまで待つ(お約束) Loop Loop

  • 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

  • エクセル内のURLからHPのタイトルを抽出したい

    エクセル内のA列にURLがあるのですが、B列にそのURLのHPのタイトルだけを抽出する方法はありますか? 色々調べて ------------------------------------------ Public Sub ReadTitle() Dim IE Dim url As Range Dim i As Integer Set url = Range("A2") Set IE = CreateObject("InternetExplorer.Application") i = 0 Do While (url.Offset(i, 0).Value <> "") IE.Navigate (url.Offset(i, 0).Value) While IE.busy: Wend While IE.Document.readyState <> "complete": Wend url.Offset(i, 1).Value = IE.Document.Title url.Offset(i, 3).Value = url.Offset(i, 2).Value '前回日付 url.Offset(i, 2).Value = IE.Document.LastModified i = i + 1 Loop End Sub このようなマクロで抽出は出来たのですが、URLは1万件以上あり、PCのスペックの低さのせいか、何時間もかかってしまいます。 もっと早く、タイトルだけを抽出する方法は無いでしょうか? よろしくお願いします。