• ベストアンサー

【エクセル】ハイパーリンク先のチェック

【エクセル】ハイパーリンク先のチェック いつも、ご回答いただきありがとうございます。 現在、エクセル内に2000個弱のハイパーリンクがあります。 そのハイパーリンク先のホームページが実際にあるのかどうか、 リンク切れチェックをしたいのですが、手動&目視でやるには時間が かかり過ぎてしまいます。 マクロで自動的にチェックできるスクリプトなどは無いでしょうか? ご存知の方がいらっしゃいましたら、ご助言いただけないでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#1~#3です。 直接の回答になっておりませんが、IEのbookmarkからURLを抽出して試行してみました。その結果、訳の分からない実行時エラーで止まったり、12000番台のWinInetのエラーが出てみたりと、なかなか奥が深いです。下記コードで、200番台を戻さないURLはリンク切れと判断してよいかと思います。当方のbookmarkでは正常につながるものは、すべて200を返しました。ほかは0(実行時エラー)または12000番台のエラーが多く、404と503がそれぞれ一個でした。(URL100個中)なお、キャッシュされますので、二回目以降の実行時は配慮が必要です。 Sub test() Dim targetRange As Range, myCell As Range Dim myURL As String Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Set targetRange = Range(Range("A1"), Range("A" & Rows.Count).End(xlUp)) For Each myCell In targetRange.Cells myURL = myCell.Hyperlinks.Item(1).Address '必要によりキャッシュ削除 下記URL参照 'http://hanatyan.sakura.ne.jp/vbhlp/DelUrl.htm myCell.Offset(0, 1).Value = checkUrlLink(myURL) Next myCell Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub Private Function checkUrlLink(myURL As String) As Long Dim req As Object Set req = CreateObject("Microsoft.XMLHTTP") req.Open "GET", myURL, False On Error Resume Next req.send On Error GoTo 0 If Err.Number = 0 Then checkUrlLink = req.Status Else checkUrlLink = 0 End If Set req = Nothing End Function

参考URL:
http://support.microsoft.com/kb/193625/ja
hamu1985
質問者

お礼

ご回答頂きありがとうございます。 お礼が遅くなり申し訳ありません。 まさしくこれを求めていました!使わせていただきます。 ありがとうございました^^

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

その他の回答 (3)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

#1&#2です。後学のために動かしてみました。XL2010でやっていますが、XL2000の知識で組んでいます(^^;) A列にA1からハイパーリンクが入っているとします。B列にチェックした結果を戻します。False=リンク切れ。 失礼してOKWaveの質問のURLを100個作成して試験してみましたが、約2分10秒かかりました。(11g無線LAN環境)やってみて分かった事は、OKWaveは質問が存在しなくても、「質問がみつからない」というhtmlを戻すので、Falseにならないという事です。という事で、本当の試験はできておりませんが、ご参考まで。 Sub test() Dim targetRange As Range, myCell As Range Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Set targetRange = Range(Range("A1"), Range("A" & Rows.Count).End(xlUp)) For Each myCell In targetRange.Cells If checkUrlLink(myCell.Hyperlinks.Item(1).Address) = True Then myCell.Offset(0, 1).Value = True Else myCell.Offset(0, 1).Value = False End If Next myCell Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub Private Function checkUrlLink(myURL As String) As Boolean Dim req Set req = CreateObject("Microsoft.XMLHTTP") req.Open "GET", myURL, False req.Send If Not (req.Status >= 200 And req.Status < 300) Then checkUrlLink = False Else checkUrlLink = True End If End Function

hamu1985
質問者

お礼

ご回答いただき、ありがとうございます。 返事が遅くなり、申し訳ありませんでした。 さっそく、mitarashiさんのマクロを使わせていただきました。 まさしくこのようなマクロを求めていました(笑) しかし、いくつか問題がありました。 リンク先が確実にあるものに関しては、問題がなかったのですが、 マクロ実行中に、このようなメッセージが出てマクロが止まってしまう事が あります。なぜでしょうか? ○ オートメーションエラー ○ 書き込みができません mitarashiさんのマクロが原因ではない(私のデータだと・・・)と思いますが、 これはどのようにしたらよいのでしょうか? ちなみに、このメッセージが出るURLに関しては、true、falseは入力されず、 空白のままになって、マクロが停止します。 初歩的な質問かもしれませんが、ご助言頂けないでしょうか? よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

#1です。 Microsoft.XMLHTTPを用いる例をみつけました。 HTTPサーバからクライアントに向けた応答コードで判別しているので、こちらの方がスマートですね。 http://www.excel.studio-kazu.jp/kw/20100729161514.html?t=185707 なお、HTTPサーバの戻すコードの解説は下記にあります。 req.Status >= 200 And req.Status < 300 の意味が理解できます。 http://www.h2.dion.ne.jp/~micased/http.html

全文を見る
すると、全ての回答が全文表示されます。
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

IE6なら下記のNo.2のコードが使えると思いますが、IEのバージョンが新しいとひとひねりが必要らしいです。当方インストールするつもりはないので、検証できません。あしからず。 文中のリンク先(長いので探し出すのに苦労しますが)ではWebbrowserを用いる例が載っていますが、試してみておりません。ご参考まで。 http://okwave.jp/qa/q4082853.html

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

関連するQ&A

  • エクセルで画像にハイパーリンクを張りつけたい

    エクセルに、画像を張り付けてハイパーリンクを設定しているんですが、エクセルからはリンク先に飛んでくれるのですが、PDFに変換するとリンク先が解除されてしまいます。 エクセルは2003を使用しています。 いつもはセルに直接ハイパーリンクを張り付けて、convert to Adobe PDFから変換しています。 セルからだとリンク先に飛んでくれるのですが、画像からだとうまくできません。 画像にハイパーリンクを張り付け、PDFに変換するには、どうしたらいいでしょうか。 よろしくお願いします。

  • エクセル・ハイパーリンク

    エクセルのハイパーリンクについて質問です。 ハイパーリンクでリンク先を 例)c:\Program Files\office とリンクさせたいとき、エクセルのA1のセルにProgram Files、B1のセルにofficeと書いてそれを参照し、c:\A1\B1 のような感じでできる方法はないのでしょうか? またVBA等でマクロを組んで似たようなものを作る事はできるのでしょうか? 稚拙な文章で申し訳ないですがよろしくお願いします。

  • excel vba ハイパーリンク

    excelでハイパーリンクからwebサイトを呼び出そうとして不適切なURLだと 「サイトへのリクエストが正しくありません」とメッセージを表示してくれる便利な機能があります この機能を呼び出して不適切であるかどうか判定してハイパーリンク先をあらかじめチェックするマクロを組みたいのですが、どのように記述すればよろしいでしょうか?

  • Excelで条件をつけてハイパーリンクで飛ばしたいのですが・・・

    いつもお世話になっております。 さて、Excelで条件に合うシートへのハイパーリンクを貼りたいと考えています。 具体例: 条件1のセル…朝 条件2のセル…ご飯 としておいてボタンなどを押すと、「朝」シートの「ご飯」セルに飛ぶようにしたいです。 条件1と条件2については、リストで選択できるようになっています。 (条件1:朝、昼、夜) (条件2:時間、ご飯、カロリー) リンク先が固定ならばハイパーリンクを貼れば良いと思うのですが、条件によってリンク先が変わるので、 マクロを組まないとムリかもしれない、とは考えていますが、何分不勉強なもので、 マクロはさっぱりわかりません。 OKWave内の検索もしましたが、しっくりくるものがなかったので、新規に質問させていただいています。 お分かりになる方、どうぞご教授のほどお願いいたします。

  • エクセルでハイパーリンクを連続的に設定する方法(マクロをなるべくなら使わない方法)

    エクセルでハイパーリンクを設定し、PDFファイルが開くように設定するのですが、   エクセルのセル   リンク先   A0001     ⇒ \ディレクトリ\A0001.pdf   A0002     ⇒ \ディレクトリ\A0002.pdf   ・・・ というようになっているので、一つ一つリンク先を入力しないで、自動で連続的にリンク先を設定することはできるでしょうか? マクロを使ったことがないので、マクロを使ってしかできない場合は、その方法を教えてください!!!! Windows2000/Office2000 使用

  • EXCELでハイパーリンク先が変わってしまいます

    EXCELで別フォルダにあるファイルにハイパーリンクを貼っています。 CドライブのAフォルダにBとDというフォルダがあり、 BにEXCELファイル、Dにリンク先のファイルがあります。 社内ではわたしの席と別の人の席で正常動作を確認しているのですが、 取引先に送ったところリンク先が開かないと言われました。 現場で見たわけではないのでよくわかりませんが、 ハイパーリンクのセルにカーソルを合わせたときに出てくるリンク先が file:///C:\A\D\ファイル名 となるべきなのに file:///C:\D\ファイル名 となってしまっているようです。 クリックすると「指定されたファイルを開くことができません」というダイアログが出るとのこと。 相対パスでリンクされているはずなのですが、環境によってこのように変わってしまうことがあるのでしょうか? 解消方法がわかりましたら、是非教えてください。 よろしくお願いいたします(T-T)

  • エクセルのハイパーリンクエラーについて

    エクセル(2002)で 同じパソコン内にあるファイルをリンク先とする ハイパーリンクを設定しました。 そのままでしたら ちゃんとリンク先が開くのですが ハイパーリンクを設定したファイルを移動したら エラーになります。 (リンク先は移動していません) これは何故でしょうか? そういうふうにエクセルが出来ているのでしょうか?

  • エクセルのハイパーリンク先が毎回ずれるのを修正するには

    担当店舗検索データというのをエクセルのハイパーリンク機能を使って作っています。具体的にはシート1に47都道府県名を記載し、全てにハイパーリンクを挿入する。そしてシート2の店舗一覧(これは1枚のシートに複数店舗データが並んでいるものです)。シート1のハイパーリンクは各該当店舗の頭にセル(A4など)を指定していますが、リンクを実行した際、該当店舗が参照シートの真ん中に表示されないのです。上に行ったり、ぎりぎりしたのセルで参照して表示される。これをリンク先の店舗データがシートの真ん中に必ずくるようにする方法、またはマクロで設定することは可能でしょうか。(マクロはまったくの素人です)ご教示お願いいたします。

  • エクセルのハイパーリンク

    ウェブから、リンクつきの表をコピーして、エクセル2000に落とすと、リンクつきでペーストされます。それをまとめて、外したいのですが、できません。 自分がやっている手順はリンク部分のセルを全て選択して、右クリック。 セルの書式設定から、保護でロックを外します。 その後、リンクのついているセルをひとつだけ選択して 右クリック、ハイパーリンクからメニューでリンクを削除します。ハケのアイコン(書式のコピー/貼り付け)をクリックしてから、リンクを外したひとつのセルを選択。そのままドラッグしてリンクがついたセルを全て選択して離すと、青いリンクは外れるのですが、実際はアイコンが指マークに変わってリンクが外れていません。エクセルの98だと、単純に全部セルを選択して右クリック、ハイパーリンクをクリックすると表示されるダイアログの中に、リンクを削除というボタンがあって、押すときれいさっぱり消えるのですが・・・2000だと一つ一つ手動で消すしかないのでしょうか?

  • ハイパーリンク設定をマクロに記録したい(エクセル2000)

    フォルダ内のファイルの一覧をエクセルで作り、目次のようにハイパーリンクでジャンプするようにします。1フォルダ、1シートとします。 エクセルの文字列を選択して、ハイパーリンク設定画面で、リンク先のフォルダを指定するところまでをマクロに記録し、ショートカットキーに登録して作業を早くしたいのです。 ところが、リンク設定が完了するまでマクロ記録の終了ができません。フォルダ指定までのマクロでないと他の文字列に使えません。 リンク設定の途中でマクロ記録を終了する方法はないでしょうか?

専門家に質問してみよう