Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1799 / 13645 ツリー ←次へ | 前へ→

【71816】リンク切れURLチェックについて あさみ 12/4/12(木) 0:42 質問[未読]
【71817】Re:リンク切れURLチェックについて とおりすがり 12/4/12(木) 8:22 発言[未読]
【71827】Re:リンク切れURLチェックについて あさみ 12/4/12(木) 21:36 発言[未読]
【71836】Re:リンク切れURLチェックについて hint 12/4/13(金) 23:14 発言[未読]
【71839】Re:リンク切れURLチェックについて あさみ 12/4/14(土) 14:21 お礼[未読]

【71816】リンク切れURLチェックについて
質問  あさみ  - 12/4/12(木) 0:42 -

引用なし
パスワード
   エクセルVBA(2003/2010)超初心者です。

エクセルに1000件程の企業名とURLがあります。
そのURLが正しいかどうか(リンク切れしていないかなど)を判断できるコードは組めますか??

1、エクセルのA列に企業名、B列にURLがあり、そのURLのステイタス(200、404など)をC列に書き出す。(※存在すれば”OK”、存在しなければ”NG”でも可)

↑これは可能でしょうか?

2、リンク切れしていた企業URLの正しいURLが存在するならば、D列にURLを書き出す。
↑できればここまでやりたいのですが・・可能でしょうか??

----------------------------------------------
A列  B列  C列   D列(最新のURL)
A社  URL  200   
B社  URL  404   最新URL
----------------------------------------------

上記のような結果を書き出したいのですが、、
ちなみに"200"を返したとしても、実際は「サービスを終了しました」のような
サイトもありますよね。。であれば、ステータスコードではなく、「ページが
見つかりません」、「404 Not Found」などを含んでいれば、その文字を返すようなコードは可能でしょうか?

質問がわりづらかったらすみません。
C列までだけでも書き出せるコードがあればご教授お願いします><

【71817】Re:リンク切れURLチェックについて
発言  とおりすがり  - 12/4/12(木) 8:22 -

引用なし
パスワード
   もちろん可能ですが、VBAの超初心者なら、
フリーソフトなどを探したほうがよいと思う。
ht tp://www.vector.co.jp/vpack/filearea/win/net/htmledit/link/
安易に超初心者を名乗るのは得策じゃないよ。

【71827】Re:リンク切れURLチェックについて
発言  あさみ  - 12/4/12(木) 21:36 -

引用なし
パスワード
   ▼とおりすがり さん:
ありがとうございます。
VBA勉強中なので質問させていただきました。
ネットなどで調べて実行してみたのですが、"200"で返ってくるURLの中にも
"ホームページが見つかりません"や"サービス提供を終了しました"などが
混じってしまうので、なにか判別する方法はないかと・・
コードを教えていただければと思います。

【71836】Re:リンク切れURLチェックについて
発言  hint  - 12/4/13(金) 23:14 -

引用なし
パスワード
   参考までに、コードの一例を末尾に示します。下敷きにして下さい。

◇--------------
>「ページが見つかりません」,「404 Not Found」などを含んでいれば、
> その文字を返すようなコードは可能でしょうか?
これはあなたがトライすべきです。
警告文は定型ではないので、自動的な判断は難しいでしょう。

◇--------------
> リンク切れしていた企業URLの正しいURLが存在するならば、
> D列にURLを書き出す。

Redirectされていれば、status code 3xxを返すので、それで判断可能。
例外だろうから、移転先は個別に追っていった方が早いかも。
(Locationヘッダで移転先を返してくるが、XMLHt tpは対応していない。
 普通にブラウザで開けば、自動で転送先に行くからそれで判る。)

しかし、単に200を示すだけのサイトなら、手の打ちようがない。
正しいURLを自動で探すといっても無理でしょう。
そのページのリンクを追っていく方法もあるかもしれないが、
普通のサイトは、いくらでもそのなかにリンクがあるから、
移転先リンクなどというものを判断するのは困難と見るのが普通。
(そういうときは普通、Redirectを使ったページにするでしょう。)

◇--------------
コード例です。

Sub test()
  Dim HReq
  Dim myStatus As Long
  Dim uri As String
  Dim k As Long
  
  Set HReq = CreateObject("Microsoft.XMLHT TP")
                ' 半角スペースを取って下さい
  
  For k = 2 To Range("A2").End(xlDown).Row
    Debug.Print k
    uri = Cells(k, 1).Value
    HReq.Open "GET", uri, False
    On Error Resume Next
    HReq.send
    On Error GoTo 0
    Cells(k, 2).Value = HReq.Status
    Cells(k, 3).Value = HReq.statusText
    If HReq.Status = 200 Then
      Cells(k, 4).Value = Left(HReq.responseText, 500)
      Cells(k, 5).Value _
      = Left(StrConv(HReq.responseBody, vbUnicode), 500)
    End If
  Next
  Set HReq = Nothing
End Sub

正規表現かなにかで特定の文字列をマッチさせても良いけれど、
定型文字列に限らないから、
シートに書き出して目で確認するのも一法だろう。(字数は調整してください)
UTF-8のサイトは4列目で読める。
S-JISのサイトは5列目で読める。
(EUC-JPはいずれもダメだがご愛敬。AODDB.Streamなどで変換すればよいかも。)
---------------------------
なお、
指摘があったが、確かに、こんなことにトライする超初心者はあり得ない。
だからコードに関する質問に答えるつもりはありません。
回答がつかないのは、超初心者と名乗る意図があざとすぎて、敬遠されているのだろう。
どこまでできているのか、自分の手の内を示して、堂々と質問すべきでしょう。
(このような質問文を寄せる超初心者はいないが、万一、真の超初心者なら、
もっと適切なテーマに取り組むべきでしょう。)

【71839】Re:リンク切れURLチェックについて
お礼  あさみ  - 12/4/14(土) 14:21 -

引用なし
パスワード
   ▼hint さん:
ありがとうございます!
参考にさせていただきます。

1799 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free