• ベストアンサー

エクセルVBAでハイパーリンクについて教えてください

A列のA2以降に各ファイルのフルパスがあります。 フォルダを移動したり、削除したりでクリックしても「指定したファイルを開くことができません」となります。 これをブックを開くと同時に実在するか調べて、リンク切れであれば色を付けると同時に「赤色文字はリンク切れです。削除しますか?」とメッセージして、「はい・いいえ」で判断するようなコードを教えていただけないでしょうか。そもそもURLなら聞いたことがあるのですが、フォルダやファイルの有無や名前の差異を調べて・・・というのができることなのかわからないのですが・・・

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

再度の登場、onlyromです。 VBAのコードということでしたので、 当然ながら少々の修正であればできるだろうとの判断でのコードでした。 ただ、幾らなんでも >リンク切れしていないフルパスも「リンク切れです」とのメッセージになります これはありえません。 が、それを言っても詮無い事ゆえ、本題。 (前提条件) ●フルパスは、 A列に入力されてる ●フルパスは、 C:\任意フォルダ\売上.xls のような形で入力されいる もちろん、任意フォルダーはあってもなくてもOK。 上記を確認のうえちょこと修正した以下のコードを実行。 '----------------------------------------------------  Sub Auto_Open()  Dim R As Long  Dim myFile  Dim Msg  Sheets("Sheet1").Select  For R = 1 To Cells(Rows.Count, "A").End(xlUp).Row   If InStr(Cells(R, "A"), "\") > 0 Then    myFile = Dir(Cells(R, "A").Value)    If myFile = "" Then     Cells(R, "A").Interior.ColorIndex = 3     Msg = MsgBox(Cells(R, "A").Value & " は無い、リンク解除する?", vbYesNo, "確認")     If Msg = vbYes Then      Cells(R, "A").Hyperlinks.Delete     End If    End If   End If  Next R  MsgBox "リンク切れチェック終了" End Sub '---------------------------------------------- 上記コードで動作しないようなら、実際のデータを提示してくだされ。 それから、最初の質問では、A2以降にフルパスとなっているが、補足ではA3以降となっている。 提示したコードではそれは関係ないのですが、場合によっては関係することがあるので、 質問をするときは何度も読み返して投稿した方がいいでしょう。 以上。  

newme
質問者

お礼

ふたたびありがとうございました。快適に動作します。このようなコードつくれるようになりたいです。いろいろ教えてくださりありがとうございました。

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

その他の回答 (1)

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.1

質問の場合はファイルの有無を調べればいいから。 例えば、Sheet1 の A列1行目からフルパスがあるとして。   標準モジュールに以下のコードを。 '-------------------------------------------- Sub Auto_Open()  Dim R As Long  Dim myFile  Dim Msg    Sheets("Sheet1").Select  For R = 1 To Cells(Rows.Count, "A").End(xlUp).Row    myFile = Dir(Cells(R, "A").Value)    If myFile = "" Then      Cells(R, "A").Interior.ColorIndex = 3      Msg = MsgBox(Cells(R, "A").Value & " は無い、リンク解除する?", vbYesNo, "確認")      If Msg = vbYes Then      Cells(R, "A").Hyperlinks.Delete      End If    End If  Next R  MsgBox "リンク切れチェック終了" End Sub '---------------------------------------------------   (注意) プロシージャー名を Auto_Open にするとブックを開いたときに ここに書かれたコードが実行されるので名前は絶対に変更しないこと。 以上。  

newme
質問者

補足

onlyromさんありがとうございました。こうやってコード化できるのってすごいなぁと思います♪ 使わせていただいたところ、リンク切れしていないフルパスも「リンク切れです」とのメッセージになります。私のシート上の設定が悪いのかもしれません。今A1の見出しにはオートシェイプで「ハイパーリンク」と入れてあります。つまり文字は入力されていません。A2は都合上空白です。ハイパーリンク化されているフルパス、ハイパーリンク化されていないフルパスはA3以降にあります。なにかコードに邪魔しているでしょうか?

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

関連するQ&A

  • excel vbaでハイパーリンクを設定するには

    お世話様です。 Excecl2000での質問です。 C:の中に「SAISYO」というフォルダがあります。 この「SAISYO」の中には「TUGI」というフォルダや「ファイル1」というファイルがあります。 そして「TUGI」の中には「SONOTUGI」というフォルダや「ファイル2」というファイルがあります。 やりたいことは、Sheet1にあるボタンをクリックすると「SAISYO」の中のすべてのファイルのパスをハイパーリンク形式でA1.A2.A3・・・のセルに書き出したいんです。 最終的には書き加えたいことがあるので、ソフトの使用ではなくコードが知りたいのです。 色々試したのですがフォルダの中のフォルダの中のファイルのパスの取得とハイパーリンク形式で、というところがどうしてもわかりません。お詳しい方是非教えてください。 よろしくお願いします。

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

    エクセルの表の中にハイパーリンクで他のファイルを何十個もリンクしていたのですが、そのファイル群を別の場所に移動したら、リンク切れしてしまいました。 相対パスでリンクされていたからだと原因は分かったのですが、いちいち何十個のファイルをリンクし直すのは大変手間がかかります。これを簡単に変更するやり方はあるのでしょうか?

  • エクセルVBAハイパーリンクの自動設定について

    はじめて質問させていただきます。 エクセルVBAハイパーリンクの自動設定についてですが A列にAAA、BBB、CCC、DDD・・・という文字列が入っています。 D:\dataというフォルダーにAAA-01、BBB-02、CCC-01、DDD-05 という名前のファイル(.DOC)が入っています。 A列の文字列にハイパーリンクを貼りたいのですがどうしたらよいでしょうか? AAAの文字にAAA-01.docのハイパーリンクを自動で貼る。 -01はファイルのバージョンで更新されたら-02、-03と変わって いくため頭から3文字があえばリンクを貼るようにしたいのです。 よろしくお願いします。

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

    ファイル名の一覧で、フォルダ(実際のファイルの在るフォルダ、5個在ります)へのハイパーリンクをまとめて付けたいのです。以前、ファイル名毎にフォルダへのリンクを付けていた時は、問題無かったのですが、うっかりハイパーリンクの列を消してしまいました。フォルダ名は表に残っていますので、フォルダ名順に並び替え、一つハイパーリンクを付け、同フォルダのものに、それをコピーしました。その後ファイル名で並び替えると、ハイパーリンク出来ません。 ハイパーリンクを示す、手の表示が出ないものや、ハイパーリンク先が変わる行は出来ますが、同じリンク名が続くと出来ないようです。 よろしくお願いいたします。

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

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

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

    エクセル ハイパーリンクの設定について教えてください。 Excel のハイパーリンクで「(1)このBook(ファイル)の、(2)このSheetの、(3)このセルに」リンクするという 設定方法は分かるのですが、(3)のこのセルに、という部分で「この文字が入力されているセルに」リンク という細かい設定は出来るのでしょうか? 例) A1をクリックすると、別ファイル別シートの「確認」という文字列が入力されているセルにリンクする。 該当のセルが複数ある場合はどのセルでもOK。(出来れば一番上にあるセルがベストですが) 色んな書籍を漁ってみたのですが、とうとう分かりませんでした。 エクセルに詳しい方、どうか宜しくお願い致します。

  • Excel VBAで自動的にハイパーリンクを設定する方法について教えて

    Excel VBAで自動的にハイパーリンクを設定する方法について教えてください。 VBAについては、ほとんど初心者なので、どうやって良いのか分かりません。 やりたい作業については、あるExcelのブックに一覧表があり、その一覧表のIDと合致したファイルをハイパーリンクさせたいのです。 一覧表は、 ID    項目  ・・・VBA A-0001  aaaa B-0002  bbbb の様になって、VBA列のセルをアクティブにするとID列のセルに自動でハイパーリンクが設定される。 そして、リンクをさせたいファイル名が"A-0001 aaaa・・・"となっているので 頭の6文字が合致したら、そのファイルを選択してくれるようにしたいです。 説明が下手で申し訳ありませんが、皆様のお知恵をお貸しください。 出来れば・・・ボタンを押すとリンクが貼ってないIDは、全てリンクがかかるようにもしたいのですが・・・。 欲張りを言って申し訳ありません。 宜しくお願いいたします。

  • VBAでハイパーリンクをつける

    仕事で画像のファイル名をExcelに書き出し、書き出しものにハイパーリンクで見がうまくいきません。下記のものです。どこが悪いのでしょうか? Option Explicit Dim ドライブ As String Dim フォルダ As String Dim 拡張子 As String Dim 記入シート As String Dim パス As String Dim ファイル名 As String Dim 貼付行 As Integer Sub フォルダ中のファイル名をシートに書く() ドライブ = "C" フォルダ = "分析" 拡張子 = "*." & "JPG" 記入シート = "ファイル一覧" End Sub Private Sub 指定フォルダ中の指定拡張子のファイル名をシートに書く() Sheets(記入シート).Activate Cells.Clear Range("A1").Select パス = ドライブ & ":\" & フォルダ & "\" ファイル名 = Dir(パス & 拡張子) 貼付行 = 0 Do While ファイル名 <> "" 貼付行 = 貼付行 + 1 Cells(貼付行, 1).Value = ファイル名 ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=ファイル名, TextToDisplay:=ファイル名 ファイル名 = Dir() Loop End Sub 実行すると初めの一行だけリンクができ後は一行もできません。よろしくお願い致します。

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

    エクセルのハイパーリンクについてです。 ハイパーリンクをセルに指定すると、指定した先のファイル名やパスがセル内に記載されてしまいますが、 この記載をなくしたい場合、どうしたらよいでしょう? ちなみに現状は絶対参照がいやで相対参照としたいので、 セル内に直接 =HYPERLINK("..\上位階層\ファイルがある階層\各リンク付けしたフォルダ\・・・") としています。 上記のようにすると、「上位階層\ファイルがある階層\各リンク付けしたフォルダ\・・・」のリンク先が全てセル内に記載されてしまいます。 この記載をなくしたいです。

  • VBAでB列のファイルパスにリンクを貼りたい

    いつもお世話になっております。 特定のフォルダ内にエクセルファイルが毎月増えていくのですが、このフォルダに入っているエクセルファイルのフルパスの一覧を別のエクセルシートのB列に毎月コピペしています。 月10-20のエクセルファイルがリストに追加されていきます。 この増分のパス(B列)にリンクを貼りたいのです。 B列には既に400件以上のファイルパスが入っているので、毎回上からB列の全部のセルにリンクを貼り直すのではなく、増分(B列の最下行+1行目)以下のセルにリンクを張るBVAを教えて頂きたいのです。 当方教えて頂いたコードとマクロの記録の組み合わせがどうにか出来るレベルなので宜しくお願いします。 但し、B列の140行目迄には空白を含むパス以外の文字が入っています。 パスは141行目以降に空白なく入っていきます。

専門家に質問してみよう