Bethは、開いているブックに依存する他のブックがあるかどうかを判断する方法があるかどうか疑問に思います。彼女は自分の開いているワークブックへの先行リンクを見つける方法を知っていますが、依存するものは知りません。

Bethは新しい仕事に就いており、影響を与える可能性のある他のファイルを知らずにワークブックを編集するリスクを冒したくありません。

ワークブックAとワークブックBがあり、ワークブックBにワークブックAへのリンクが含まれている場合、ワークブックBはワークブックAに依存し、ワークブックAはワークブックBの前例です。

ワークブックBでは、ワークブックで使用されているリンクを簡単に見つけることができます。ワークブックAがワークブックBの前例であることをご存知でしょう。ベスが言ったように、彼女はこの情報を見つける方法を知っています。

ワークブックAでは、ワークブックBにワークブックAへのリンクがあり、したがってワークブックAに依存していることを確認する方法はありません。したがって、ワークブックAに変更を加えて、誤ってワークブックBに影響を与える可能性があります。名前付き範囲を変更したり、ワークシートの名前を変更したり、不要になったと思われる情報を削除したりする可能性があります。次にワークブックBを開くと、ワークブックAで依存していた情報が利用できなくなったため、失礼な驚きがあります。

ワークブックAで行った変更の中には、ワークブックBに影響を与えないものもあります。たとえば、ワークシートの追加、名前付き範囲の追加、場合によっては列または行の挿入ができる必要があります。これらすべての場合において、ExcelはブックBに影響を与えることなく、変更に自然に適応する可能性があります。問題は、後でブックBを開くまで、悪影響があったかどうかわからないことです。また、ブックBを開かない限り、ブックBを開くことすらわかりません。 2つのワークブックの間に関係があることを事前に知っていました。

この問題を回避する1つの方法は、考えられるすべてのブックを同時に開き、Excelの監査ツールを使用して依存関係を確認することです。システム上のワークブックの数が非常に限られている場合、これはうまく機能します。ブックがたくさんある場合や、ワークブックがネットワーク上にある場合は、それほどうまく機能しません。

ローカルシステムの設定された場所(すべて単一のフォルダー)にワークブックがある場合は、マクロを使用して依存関係を判別してみてください。次の手順では、特定のディレクトリ内のすべてのExcelブックを調べ、現在開いているブックにリンクされているブックを数式で識別します。

Sub DiscoverDependentFiles()

Dim i As Integer     Dim iFile As String     Dim fLink As Variant     Dim sLink As String     Dim myFldr As String     Dim curFile As String

'Change the string here to look     'for a different link / file name     sLink = "[FileA.xlsm]"

curFile = ThisWorkbook.Name     'Change the string here to look     'in a different folder     myFldr = "C:\Users\User\mySub\"



'Look for both xlsx and xlsm extensions     iFile = Dir(myFldr & "*.xls?", vbNormal)

i = 1     'Loop through all of the files in the folder     Do While iFile <> ""

If iFile <> curFile Then             Workbooks.Open Filename:=myFldr & iFile             Set fLink = Cells.Find(What:=sLink, _               After:=ActiveCell, LookIn:=xlFormulas, _               LookAt:=xlPart, SearchOrder:=xlByRows, _               SearchDirection:=xlNext, MatchCase:= _               False, SearchFormat:=False)

If UCase(TypeName(fLink)) <> UCase("Nothing") Then                 Windows(curFile).Activate                 'Record names of dependent files                 'in your open workbook                 Worksheets(1).Range("D" & (i)).Value = _                   ActiveWorkbook.Name                 i = i + 1             End If             Workbooks(iFile).Close False         End If         iFile = Dir     Loop End Sub

このアプローチは、単純な状況ではうまく機能するはずです。ただし、Excel名、テキストボックス、グラフ、その他のオブジェクトなど、さまざまな場所でリンクを非表示にできるため、このようなマクロでは部分的な解決策しか提供できない場合があります。何かがチェックされないままになる可能性は常にあります。結果として、変更は、変更するワークブックに依存する他のワークブックに影響を与える可能性があるため、変更を加える前にワークブックファイルのバックアップを作成することをお勧めします。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(7799)は、Microsoft Excel 2007、2010、2013、および2016に適用されます。

Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります: