• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルシートの無効リンクの確認)

Excelシートの無効リンク確認方法

このQ&Aのポイント
  • Excelシートの無効リンクを確認する方法について解説します。シート内のリンクを一括でチェックし、リンクの切れた部分を特定する方法をご紹介します。
  • Excelシートの無効リンクの確認方法について解説します。リンク切れの可能性がある部分を自動的に特定し、効率的にリンクの修正を行う方法をご紹介します。
  • Excelシートの無効リンクを見つける方法について解説します。リンクが切れたセルを検出し、迅速に修正できる手順をご紹介します。

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.1

なにやら、私の名前が登場していますが、私がポストしたコードでしたっけ? ともあれ、次のようなコードを提案します。 よかったら試してみてください。 Option Explicit '// リンク状況確認 Sub LinkCheck()  Dim Rowcnt As Long  Dim wklink As String  With ThisWorkbook.Sheets(1)   Rowcnt = 2   Do    If .Cells(Rowcnt, 4).Value = "" Then Exit Do    Worksheets(2).Cells(Rowcnt, 1) = .Cells(Rowcnt, 4).Value    Worksheets(2).Cells(Rowcnt, 2) = .Cells(Rowcnt, 4).Address    If .Cells(Rowcnt, 4).Hyperlinks.Count > 0 Then     wklink = .Cells(Rowcnt, 4).Hyperlinks(1).Address     Worksheets(2).Cells(Rowcnt, 4) = wklink     If FileExists(wklink) = True Then      Worksheets(2).Cells(Rowcnt, 3) = "ファイルあり"     Else      Worksheets(2).Cells(Rowcnt, 3) = "ファイル無し"     End If    Else      Worksheets(2).Cells(Rowcnt, 3) = "リンク未設定"    End If    Rowcnt = Rowcnt + 1   Loop  End With End Sub '// ファイル有無判定関数 Function FileExists(ChkFile As String) As Boolean  FileExists = True  On Error GoTo ErrorHandler     ' エラー処理ルーチンを定義  FileDateTime (ChkFile)  On Error GoTo 0          ' エラーのトラップを無効にします。  Exit Function           ' エラー処理ルーチンが実行されないように Sub を終了 ErrorHandler:            ' エラー処理ルーチン  FileExists = False  Resume Next End Function

akira0723
質問者

お礼

昨夜リストの結果を検証して間違いないことを確認しました。 特定の部署のフォルダーが一式抜けていることが分かりました。 恐らくフォルダーを移動させたと思われます。 この業務は最近引き受けたものでメンテの方法が見えました。 前回のご回答を含め、改めて感謝!&お礼申し上げます。

akira0723
質問者

補足

早々のご回答、試してみて驚きの結果です。 なんと1発で全997件の検索結果が、しかも希望通りのリスト表記で得られました。(やはり多くのファイルが移動、削除されていました) 詳細な検証結果はこれからやりますのでBS(締め切り)はそれからにさせて頂きます。(当方の場合何か起こると対処できないレベルですので) ●質問にアップしたコードは >別の方から回答頂いた下記のコードで動作確認できたのでBSを選んで締め切った・・・ ということでHohoPapaさんではありません。 ============================== <別件> 先日教えて頂いた、”エクセルシートをpdfファイルで添付して、メールを起動させる”、というコードは試行してみて動かなかったので、「当方には難しすぎて使えそうもない」とギブアップ宣言してあきらめたのですが、その後良くヨク見て、どうもセル番地が(1,1)(1,2)となっているようなので、無駄と思いながら試しに所定のセルの行,列を入れて見たところ、なんと目的の結果が得られ、ビックリX2しました。 定型書式が多いのでセル番地が同じなので、シート名に関係なく全シートで使えるのは本当に有用です。 ワードからのコードのコピペで他ファイルへの適用が可能! しかし、補足欄もお礼欄も使ってしまっていましたので、この場をお借りして改めて御礼申し上げます。(これが今回指名させて頂いた理由の1つでもあります) お手数をお掛けしました。 今後ともよろしくお願い致します。(長々と失礼)

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

関連するQ&A

  • エクセルシートの無効リンクの確認

    HohoPapa-さん いつもいつもお世話になっております。 さて、以前同じ質問(2019/1/10)に下記のご回答を頂いて、今月に入って一覧表のリンク切れを修正すべく試してみたのですが、リンクが生きているのに「ファイルなし」とノイズがかなりの数発生しました。 ちなみに385件のファイル無しが抽出されますが、155件はリンクが生きていました。 (ご回答いただいた時点では、12月に表を配布した後だったのでいくつかのリンク切れを確認してうまくいくと思ってしまいました) いつもながらの負んぶに抱っこの質問で恐縮ですが何か抽出精度を上げるアドバイスいただけたら幸いです。 1500件の表から385件の確認で済むのでこれでもかなりありがたいのですが。。。 Option Explicit '// リンク状況確認 Sub LinkCheck()  Dim Rowcnt As Long  Dim wklink As String  With ThisWorkbook.Sheets(1)   Rowcnt = 2   Do    If .Cells(Rowcnt, 4).Value = "" Then Exit Do    Worksheets(2).Cells(Rowcnt, 1) = .Cells(Rowcnt, 4).Value    Worksheets(2).Cells(Rowcnt, 2) = .Cells(Rowcnt, 4).Address    If .Cells(Rowcnt, 4).Hyperlinks.Count > 0 Then     wklink = .Cells(Rowcnt, 4).Hyperlinks(1).Address     Worksheets(2).Cells(Rowcnt, 4) = wklink     If FileExists(wklink) = True Then      Worksheets(2).Cells(Rowcnt, 3) = "ファイルあり"     Else      Worksheets(2).Cells(Rowcnt, 3) = "ファイル無し"     End If    Else      Worksheets(2).Cells(Rowcnt, 3) = "リンク未設定"    End If    Rowcnt = Rowcnt + 1   Loop  End With End Sub '// ファイル有無判定関数 Function FileExists(ChkFile As String) As Boolean  FileExists = True  On Error GoTo ErrorHandler     ' エラー処理ルーチンを定義  FileDateTime (ChkFile)  On Error GoTo 0          ' エラーのトラップを無効にします。  Exit Function           ' エラー処理ルーチンが実行されないように Sub を終了 ErrorHandler:            ' エラー処理ルーチン  FileExists = False  Resume Next End Function

  • EXCELでのリスト作成について

    このサイトでこのようなマクロを教えてもらいました。 そこでこれはシートの左側からリストシートに表示していくのですが、右側からリストにしていく方法はないでしょうか? よろしくお願いします。 ------------------------- Sub テスト() ActiveWindow.WindowState = xlNormal Dim i As Integer, r As Range With Worksheets("リスト") .Hyperlinks.Delete .Range("B4:B65536").ClearContents For i = 2 To Worksheets.Count Set r = .Cells(((i - 2) Mod 20) + 4, 2 + Int((i - 2) / 20)) r.Value = Worksheets(i).Name .Hyperlinks.Add Anchor:=r, Address:="", _ SubAddress:=Worksheets(i).Name & "!A1" Next i End With Columns("B:B").EntireColumn.AutoFit End Sub -------------------------

  • VBA 複数のホルダー・Sheet名を変数に

    VBAの初心者です。 サーバ内の各ホルダーに入っているファイル情報をSheetに書き出しさらにそのファイル名にハイパーリンクをつけてファイルを参照するマクロをWebから例を参照させて頂き作成しました。 マクロを作成した目的は、頻繁に更新されるネットワーク越しのファイルを ユーザ単位で指定したホルダー分参照出来るようにしたい為です。 そして、VBAを意識せず安易に誰でもこのマクロを実行出来るようにする事です。 とりあえず、下記マクロ文で、M:\01_仕事\10_仕様書ホルダー内のファイル情報を  Sheet名=仕様書へ書き込む事は出来て、ハイパーリンクも貼れてファイル内の参照は出来ています。 作成したSheetを画像添付しました。 しかし、下記点が旨く出来ません、ご教示頂けたらと思います。 ・このマクロ内で複数、参照したいファイルのホルダー名と書き出すSheet名を、変数や配列などに  記述して一挙に作成したい。 ・下記マクロ内のPrivate Sub FileDisp(strPath, i)ではWorksheetsの所で変数名が使えない為、  Worksheets("仕様書").Cells(i, 2)などと、Sheetの名前をいちいち記述しました。  複数のホルダーに対応させるにはどうしたら良いか? ---------以下はマクロ文 ------------------------------------------------------------------------------------- Private Sub test7() 'Private Sub Auto_Open() Dim a As String Dim b As String a = "仕様書" b = "M:\01_仕事\10_仕様書" Call SHEETNAME(a) Call FORDERR(a, b) End Sub Sub SHEETNAME(a) 'SheetAddDelの使用例 SheetAddDel (a) End Sub Sub SheetAddDel(shname As String) '現在のWorkbookに同名のSheetがないか確認する。 'あれば、そのSheetを削除する。 'それから、新しいSheetを挿入する Dim sh As Object For Each sh In Worksheets If sh.Name = shname Then Application.DisplayAlerts = False sh.Delete Application.DisplayAlerts = True End If Next sh Sheets.Add.Name = shname End Sub Private Sub FORDERR(a, b) strPath = b Range("c1").Value = strPath Worksheets("仕様書").Cells(3, 2) = " " Range("A3", ActiveCell.SpecialCells(xlLastCell)).ClearContents Range("A3").Select i = 3 FileDisp strPath, i End Sub Private Sub FileDisp(strPath, i) Dim WSname As String Dim WSvalue As String 'Application.ScreenUpdating = False '画面を固定する事により高速化しま Set objFs = CreateObject("Scripting.FileSystemObject") Set objFld = objFs.GetFolder(strPath) Worksheets("仕様書").Cells(i, 2) = objFld.Path 'sak With Worksheets("仕様書").Cells(i, 2).Font 'sak .Bold = True 'sak End With 'sak With Worksheets("仕様書").Cells(i, 2).Interior 'sak .ColorIndex = 6 'sak .Pattern = xlSolid 'sak End With 'sak i = i + 1 ' サブフォルダ名を入れるsak For Each objFl In objFld.Files Worksheets("仕様書").Cells(i, 2).Select WSname = objFl.ParentFolder.Path & "\" & objFl.Name 'hyperlink用sak WSvalue = objFl.Name 'ヘルプの「Addメソッド」から「Hyperlinks オブジェクトの Add メソッド」を参照 Worksheets("仕様書").Hyperlinks.Add anchor:=Cells(i, 2), _ Address:=WSname, ScreenTip:=WSname, TextToDisplay:=WSvalue With Worksheets("仕様書") .Cells(i, 2).Font.Size = "11" .Cells(i, 3) = objFl.ParentFolder.Path & "\" & objFl.Name ' フルパスに変更sak .Cells(i, 4) = Int(objFl.Size / 1024) .Cells(i, 5) = objFl.Type .Cells(i, 6) = objFl.DateCreated .Cells(i, 7) = objFl.DateLastAccessed .Cells(i, 8) = objFl.DateLastModified End With i = i + 1 Next For Each objSub In objFld.SubFolders FileDisp objSub.Path, i Next End Sub ------------------------------------------------------------------------------------------------------------------------------

  • アクティブでないシートのセルを選択

    Excel VBAでアクティブでないシートのセルをSelectすることはできないのでしょうか。 Selectメソッドというのは,もともとそういうものなのでしょうか。 エラー: 「RangeクラスのSelectメソッドが失敗しました。」 コード Sub aaa() With Worksheets("Sheet2") .Range(.Cells(44, 1), .Cells(48, 21)).Select End With End Sub

  • Excel VBAシートの同一番地のセルのリスト化

    別々のシートの同一番地のセルの値をリスト化するのにこのようなVBAを見つけました。 シートは追加せず、既存のシートを指定したくて、色々と書き換えをチャレンジしましたがうまくいきません。 既存のシートを指定し、この作業を行うにはどうしたらよいのでしょうか? ご教示いただけますと幸甚です。 Sub Test1() Dim TmpSheet As Worksheet, i As Integer i = Worksheets.Count Set TmpSheet = Worksheets.Add(After:=Sheets(Sheets.Count)) With TmpSheet For i = 1 To i .Cells(i, 1).Value = Worksheets(i).Name .Cells(i, 2).Value = Worksheets(i).Range("E5").Value Next End With End Sub

  • 下記エクセル列の並び替えマクロで、Callの際に変数が引き継がれません

    下記エクセル列の並び替えマクロで、Callの際に変数が引き継がれません。 何か方法はありませんでしょうか。 Sub 各学校() Dim i As Integer Worksheets("Sheet1").Activate For 元列 = 1 To 16 If Cells(1, i) = "学校" Then 新1列 = 元列 ElseIf Cells(1, i) = "住所" Then 新2列 = 元列 ElseIf Cells(1, i) = "電話" Then 新3列 = 元列 (略) End If Next Call 列の並び替え End Sub Sub 列の並び替え() Worksheets("Sheet2").Activate Cells.Clear Worksheets("Sheet1").Columns(新1列).Cut Worksheets("Sheet2").Columns("A").Insert Worksheets("Sheet1").Columns(新2列).Cut Worksheets("Sheet2").Columns("B").Insert Worksheets("Sheet1").Columns(新3列).Cut Worksheets("Sheet2").Columns("C").Insert (略) End Sub

  • excel正しくリンク貼り付けができません

    Windows10,microsoft365使用の超初心者です。 シート集計を表1、ひょう2にリンク貼り付けするため 次のコードを実行したところ、表2を見ると E40:AI73でなく、E6:AI39がリンク貼り付けされています。 原因がわかりません。困ってます。よろしくお願いいたします。 Sub 表1にリンク貼り付け() Dim my_cell Dim i Worksheets("集計").Activate Range("E6:AI39").Select i = 1 For Each my_cell In Selection Worksheets("表1").Cells(i, 1).Value = "=集計!" & my_cell.Address i = i + 1 Next my_cell End Sub Sub 表2にリンク貼り付け() Dim my_cell Dim i Worksheets("集計").Activate Range("E40:AI73").Select i = 1 For Each my_cell In Selection Worksheets("表2").Cells(i, 1).Value = "=集計!" & my_cell.Address i = i + 1 Next my_cell End Sub

  • VBA 任意のシートからコピーを始める。

    教えてください。 全てのシートをコピーして一つのシートにまとめるプログラムシートを作成しました。 1番目のシートからコピーを始める場合は For i = 2 To Worksheets.Count 2番目のシートからコピーを始める場合は For i = 3 To Worksheets.Count とすればよいのですがこれだといちいちモジュールコードを出して数字を変更しなければならず面倒です。 そこでユーザーフォームのコンボボックスに任意の数字を入れてクリックを押せば希望するシートからコピーを始めるプログラムを作成してみましたがうまくいきません。どなたか教えてくださいませんか。 Sub matome() Dim i As Integer Dim lRow As Long, lCol As Long, lRow2 As Long, lRow3 As Long, SNo As Integer '----何番目からコピーを始めるかを決定します With UserForm2 SNo = .ComboBox1.value End With For i = 1 + SNo To Worksheets.Count With Worksheets(i) lRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 lCol = .Cells(1, Columns.Count).End(xlToLeft).Column '----シートのデータが2行以上の場合にコピーします If lRow >= 2 Then lRow2 = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row + 1 If lRow2 < Worksheets(1).Cells(Rows.Count, 5).End(xlUp).Row + 1 Then lRow2 = Worksheets(1).Cells(Rows.Count, 5).End(xlUp).Row + 1 .Activate .Range(Cells(2, 1), Cells(lRow, lCol)).Copy Worksheets(1).Cells(lRow2, 1) End If End With Next i

  • Excel 2007 マクロ 別シートの情報を反映する方法

    Excel 2007 マクロ 別シートの情報を反映する方法 Sheet1とSheet2があります。 Sheet1のD列とSheet2のM列で同じ値があれば、 Sheet1のE列の値をSheet2のN列に反映するマクロを 作成しました。 下記が正しいと思っていたのですが、エラーメッセージは出ずに 値が反映されません。 マクロに問題点があればご指摘ください。 よろしくお願いいたします。 Sub Rist() Dim i, j As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") For i = 2 To ws1.Cells(Rows.Count, "D").End(xlUp).Row For j = 2 To ws2.Cells(Rows.Count, "M").End(xlUp).Row If ws2.Cells(j, "M") = ws1.Cells(i, "D") Then ws2.Cells(j, "N") = ws1.Cells(i, "E") End If Next j Next i End Sub

  • 数行ごとの折り返しについて

    このようなマクロを作りました。 ------------------------------------------------ Dim i As Integer, r As Range With Worksheets("リスト") .Hyperlinks.Delete .Range("B4:B65536").ClearContents For i = 2 To Worksheets.Count Set r = .Cells(i + 2, 2) r.Value = Worksheets(i).Name .Hyperlinks.Add Anchor:=r, Address:="", _ SubAddress:=Worksheets(i).Name & "!A1" Next i End With ------------------------------------------------ これだけでは、B列に並んでしまうだけなのでこれを20データごと次の列に入力できるようにしたいのですがいろいろ調べたのですがわかりませんでした。 わかる方がいましたらよろしくお願いします。

専門家に質問してみよう