ExcelマクロVBAサンプル集 | アメブロの記事本文をVBAでバックアップする3 | Excelマクロの実用サンプル、エクセルVBA集と解説



最終更新日:2013-06-02

アメブロの記事本文をVBAでバックアップする3


前回は、当該月の1ページだけの取得でしたので、

今回は、当該月のすべてのページを取得するようにします。


Sub 一覧取得()
  Const cnsUri As String = "http://blog.ameba.jp/ucs/entry/srventrylist.do?pageID=【NO】&entry_ym=【yyyymm】"
  Dim i As Long
  Dim j As Long
  Dim strID As String
  Dim strUri As String
  Dim strHref As String
  Dim objIE As New InternetExplorer
  Dim objITEM As Object
  Dim intNO As Integer
  Dim blnStop As Boolean
  With Worksheets("記事一覧")
    intNO = 1
    Do
      strUri = Replace(cnsUri, "【NO】", intNO)
      strUri = Replace(strUri, "【yyyymm】", .Cells(1, 2))
      objIE.navigate strUri
      Call untilReady(objIE)
      i = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
      For Each objITEM In objIE.Document.getElementsByTagName("h2")
        strHref = objITEM.getElementsByTagName("a")(0)
        j = InStr(strHref, "entry-")
        If j > 0 Then
          strID = Replace(Mid(strHref, j + 6), ".html", "")
          .Cells(i, 1) = strID
          .Hyperlinks.Add Anchor:=.Cells(i, 2), _
                  Address:=strHref, _
                  TextToDisplay:=objITEM.innertext
          i = i + 1
        End If
      Next
      blnStop = True
      For Each objITEM In objIE.Document.getElementsByTagName("a")
        If objITEM.innertext = "次へ" Then
          blnStop = False
        End If
      Next
      If blnStop = True Then
        Exit Do
      End If
      intNO = intNO + 1
    Loop
  End With
  objIE.Quit
  Set objIE = Nothing
  Set objITEM = Nothing
  MsgBox "オワッタッタッタッタッター"
End Sub


太字の部分が、前回より追加した部分になります。これは、

変数、intNoで、1ページから順次カウントアップします。

何ページあるかわからないので、

Do〜Loop で、終了条件を指定していません。

ループ内で、終了判断し、
Exit Do
で、ループを抜けるようにします。

そうです、問題は終了判断です。

例えば、6月に3ページの記事一覧があった場合、

http://blog.ameba.jp/ucs/entry/srventrylist.do?pageID=4&entry_ym=201306

この場合に、エラーになるならエラー判断で良いのですが、

エラーにならずに、3ページ目が表示されます。

ここで困ってしまいます。

4ページ目があるか無いかの判断をどうするかです。

HTMLソースを見て、いろいろと方法は考えられるでしょうが、

ここでは、

「次へ」ボタンに注目してみました。

「次へ」にリンクが無ければ、最終ページということです。

ただし、当該月に1ページしかない場合は、

そもそも、「次へ」が存在しないので、それも考慮しています。

つまり、「次へ」があってリンクが付いている場合のみ、次ページがあるという判断です。

複数ページの取得になりますので、時間もかかるようになってきます。

そこで、最期にメッセージボックスで表示します、ちょっとご愛嬌(笑)

さて、これで当該月の記事一覧が取得できました。

せっかくなので、記事編集ページへのハイパーリンクも付けてみましょう。

アメブロの記事本文をVBAでバックアップする 1 2 3 4 5 6




同じテーマ「ExcelマクロVBAサンプル集」の記事

数独(ナンプレ)を解くVBAに挑戦5
数独(ナンプレ)を解くアルゴリズムの要点とパフォーマンスの検証4
ナンバーリンク(パズル)を解くVBAに挑戦8
ナンバーリンクを解くVBAのパフォーマンス改善3

新着記事 ・・・新着記事一覧を見る

SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.定数と型宣言文字(Const)|ExcelマクロVBA入門
10.CSVの読み込み方法|ExcelマクロVBAサンプル集



  • >
  • >
  • >
  • アメブロの記事本文をVBAでバックアップする3

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。

    ↑ PAGE TOP