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 [無効な参照の追跡]