• ベストアンサー

エクセルでシートの参照先を調べたい

エクセル2000です。 特定のセルの参照先なら、メニューの「ツール」から「ワークシート分析」で調べられますが、これは、ひとつずつ、セルをアクティブにしていかないと調べられません。 アクティブにしたシート(または選択したセル範囲)のどこかのセルを、他のシートのどこかのセルが参照しているかどうかを一度に調べる方法はないでしょうか?

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。KenKen_SP です。 考え方は #1 ご回答のとおりで、検索時に   ・数式を対象   ・検索値を調べるシート名 で曖昧検索すれば良いのだと思います。VBA でもこの応用で Find で探せ ば良いのですが、下記マクロでは数式セルを For Each ~ で順次チェック にしました。なんとなく。Find の方が多分早いかな? > または選択したセル範囲 シート単位ならともなく、選択したセル範囲ってかなり面倒そうです。 だから聞かなないでね(´・ω・`) ちなみに Range しか調べてませんよ。 ' // 他シートからアクティブシートを参照している数式の列挙 Sub Macro1()   ' Dependents はアクティブ シートのみで、リモート参照をトレースできない   ' 力技で数式に対象シート名があるかどうかで判定^^;   Dim Sh     As Worksheet   Dim rUse    As Range   Dim C      As Range   Dim sShName   As String   Dim Result()  As String   Dim i      As Long      sShName = ActiveSheet.Name   i = -1   For Each Sh In Worksheets     If Sh.Name <> sShName Then       ' 23: All Value Type       Set rUse = Sh.Cells.SpecialCells(xlCellTypeFormulas, 23)       For Each C In rUse         If InStr(C.Formula, sShName) > 0 Then           i = i + 1           ReDim Preserve Result(1, i)           Result(0, i) = Sh.Name & "!" & C.Address           Result(1, i) = "'" & C.Formula         End If       Next C       Set rUse = Nothing     End If   Next   ' 出力   If i > -1 Then     Application.ScreenUpdating = False     Set Sh = Worksheets.Add     For i = 0 To UBound(Result, 2)       Sh.Hyperlinks.Add Anchor:=Sh.Cells(i + 1, "A"), _                Address:="", _                SubAddress:=Result(0, i), _                TextToDisplay:=Result(0, i)       Sh.Cells(i + 1, "B").Value = Result(1, i)     Next i     Sh.Columns("A:B").AutoFit     Set Sh = Nothing     Application.ScreenUpdating = True   Else     MsgBox "このシートを参照している数式はこのブック内にありません", vbInformation   End If   Erase Result End Sub

merlionXX
質問者

お礼

うっ!!すごい!! 何と、ブック内の他シートすべてを検索しちゃってるんですね。 マクロならこそ出来るワザですねえ。 しかも、それを配列にしてまとめて出力してハイパーリンクをつけるなんて至れり尽くせり・・・。 すごすぎます。恐れ入りました。 ありがとうございます。(o。_。)oペコッ.

その他の回答 (2)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

#2 です。忘れてました。 > Set rUse = Sh.Cells.SpecialCells(xlCellTypeFormulas, 23) > For Each C In rUse ここで該当セルが無いとエラーが発生するので、適当にトラップして 下さい。先頭に On Error Resume Next で良いかと。 > マクロならこそ出来るワザですねえ。 Excel 2002 以降なら検索ダイアログに「全て検索」コマンドがあるので、 マクロを使わなくても同様のことはできますよ。 でも、確かお使いになってるのは Excel2000 でしたよね? それで、マクロにしました。

merlionXX
質問者

お礼

ありがとうございました。

  • onara931
  • ベストアンサー率25% (141/545)
回答No.1

他のファイルを参照にしているかどうかでしたら、全てのシートを選択して「=c:\」を検索すると見つかります。 (お使いのパソコン環境によっては、ドライブ名を複数指定して検索する必要があるかも)。 同一ファイル内でしたら同じようにシートを全部選択して、「!」を検索すると見つけることが出来ました。 ただ「!」が文中に多数使われていると時間がかかるかも。(^^;

merlionXX
質問者

お礼

あら、onara931さん、さきほど倍数の質問に答えておきましたよ。 で、わたしの質問は、「参照元」ではなく「参照先」なんですよぉ。 他シートを参照しているかではなく、他シートから参照されているかを調べたいんです。