無効な参照の追跡(Microsoft Excel)
Joelは、何千もの数式が含まれているブックを閉じると、最近、「このワークシートの数式に1つ以上の無効な参照が含まれています」というメッセージが表示されると述べました。 Joelは、このワークブックの7つのワークシートのどれが参照されているかをどうやって知ることができるのか疑問に思います。誤った数式を見つけるにはどうすればよいですか?レポートの情報表示に問題はありません。
無効な参照を追跡することはイライラする可能性があります。あなたが見始めることができるいくつかの場所があります。 1つ目は、ワークシートにある数式にあります。 (はい、ワークブックのワークシートごとにこれらの手順を実行する必要があります。)[特別に移動]ダイアログボックス(F5キーを押して[特別]を選択)を使用して、エラーを含むセルのみに移動するように選択します。次に、Tabキーを使用して、Excelが選択したセル間を移動できます。
検索ツールを使用して、考えられるエラーを探すこともできます。 Ctrl + Fを押して、[検索と置換]ダイアログボックスの[検索]タブを表示し、#文字を検索します。数式内で検索を行うようにExcelに指示してください。見つかったものをすべて調べて、エラーかどうかを確認します。
また、ワークブックで定義されている名前付き範囲も確認する必要があります。 [名前マネージャー]ダイアログボックス([数式]タブ、[名前マネージャー]ツールをクリック)で各名前を確認し、[参照先]列にエラー表示が含まれていないことを確認します。
これらは、エラーが発生する可能性のあるすべての場所ではありません。 Excelは、多くの場所にエラーを存在させるのに非常に優れています。エラーを頻繁に検索する必要がある場合は、数式を調べて潜在的なエラーを探すマクロを試すことができます。
Sub CheckReferences() ' Check for possible missing or erroneous links in ' formulas and list possible errors in a summary sheet Dim iSh As Integer Dim sShName As String Dim sht As Worksheet Dim c, sChar As String Dim rng As Range Dim i As Integer, j As Integer Dim wks As Worksheet Dim sChr As String, addr As String Dim sFormula As String, scVal As String Dim lNewRow As Long Dim vHeaders vHeaders = Array("Sheet Name", "Cell", "Cell Value", "Formula") 'check if 'Summary' worksheet is in workbook 'and if so, delete it With Application .ScreenUpdating = False .DisplayAlerts = False .Calculation = xlCalculationManual End With For i = 1 To Worksheets.Count If Worksheets(i).Name = "Summary" Then Worksheets(i).Delete End If Next i iSh = Worksheets.Count 'create a new summary sheet Sheets.Add After:=Sheets(iSh) Sheets(Sheets.Count).Name = "Summary" With Sheets("Summary") Range("A1:D1") = vHeaders End With lNewRow = 2 ' this will not work if the sheet is protected, ' assume that sheet should not be changed; so ignore it On Error Resume Next For i = 1 To iSh sShName = Worksheets(i).Name Application.Goto Sheets(sShName).Cells(1, 1) Set rng = Cells.SpecialCells(xlCellTypeFormulas, 23) For Each c In rng addr = c.Address sFormula = c.Formula scVal = c.Text For j = 1 To Len(c.Formula) sChr = Mid(c.Formula, j, 1) If sChr = "[" Or sChr = "!" Or _ IsError(c) Then 'write values to summary sheet With Sheets("Summary") .Cells(lNewRow, 1) = sShName .Cells(lNewRow, 2) = addr .Cells(lNewRow, 3) = scVal .Cells(lNewRow, 4) = "'" & sFormula End With lNewRow = lNewRow + 1 Exit For End If Next j Next c Next i ' housekeeping With Application .ScreenUpdating = True .DisplayAlerts = True .Calculation = xlCalculationAutomatic End With ' tidy up Sheets("Summary").Select Columns("A:D").EntireColumn.AutoFit Range("A1:D1").Font.Bold = True Range("A2").Select End Sub
このマクロは、ワークシートのリンクで検出されたエラーに関する情報を一覧表示するために使用される「概要」と呼ばれるワークシートを作成します。
また、Excel MVPのビルマンビルのFindLinkプログラムを使用することもできます。このプログラムは、リンク内の情報を見つけるというすばらしい仕事をします。アドインを使用して、すべてのリンクで#文字を検索できます。これは、エラーを見つけるのに役立ちます。ファイルの最後の更新(この記事の執筆時点)は2011年であったため、アドインがExcel2013で機能するかどうかは不明です。試してみる価値はあります。 FindLinkの詳細については、こちらをご覧ください:
http://www.manville.org.uk/software/findlink.htm
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]
。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(8664)は、Microsoft Excel 2007、2010、および2013に適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。
link:/ excel-Tracking_Down_Invalid_References [無効な参照の追跡]
。