5

Excelには、(メニューを介して)セルのprecedentsおよびをトレースする機能があります。たとえば、にある場合、 Excelは(の前例である)に依存するトレースを行うことができます。dependentsTools > Auditing= C3 + 1C4C4C3C3C4

VBAコードはExcelセルにも影響を与えるため、VBAコードとExcelセル間の依存関係を追跡するツールがあるかどうかを知りたいと思います。

たとえば、VBAコードの行がある場合、依存している可能性のあるRange("C4").Value = Range("C3").Value + 1トレースするツールはありますか?C4C3

また、VBAコードの行がある場合、このコードによって変更される可能性のあるRange("C4").Value = 5トレースするツールはありC4ますか?

4

3 に答える 3

2

VBA による変更は簡単には追跡できません (セルが関数によって任意の方法で変更されたり、文字列として関数に渡されたりする可能性があるため)。

できることはありますが、少しトリッキーで、満足できるものではないと思います。セルに依存関係があるかどうかを検出できます。

使い方?次のようなマクロを記述します。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
End Sub

変更されたセルを即時ウィンドウに記録できます。セルの値を変更すると、すぐに表示されるウィンドウに、変更したセルに依存するすべてのセルが表示されます。短所?

  • 残念ながら、逆のプロセスは不可能です。セルを選択して、そのすべての依存関係を表示することはできません。
  • 通常、コードからはセルの有効な値がわからないため、プロセスを (実際には) 自動化することはできません (セルの種類によって推測することはできますが、規則のために「0」が有効な値である可能性があり、「1 「いいえ、たとえば)。
  • すべての依存関係を実際に検出することはできません (2 つの指定された値がセルに変化をもたらさない場合、その依存関係は表示されません)。
  • 大きなワークシートの場合はかなり面倒なので、小さなセルのセットに適用する場合にのみ示されます (このセルを変更/移動するとどうなりますか?何かに影響しますか?)
于 2012-04-24T11:52:21.320 に答える
0

以下があなたの質問に答えているかどうかはわかりませんが、役に立ったと思いました.

RangeオブジェクトにはandPrecedentsプロパティDependentsがあります。これにより、VBA 内から、メニューTools->auditingが UI で行うことを行うことができます。(これを教えてくれたこの最近の質問https://stackoverflow.com/a/20635795/1967396に対する@Bathshebaの回答を認めなければなりません…)。

Dim prec, p
Set prec = [C4].Precedents  ' [C4] is shorthand for Range("C4")
For Each p in prec
  Debug.Print "Precedent found: " & p.Address
next p

Set注 - ;が必要です。そうしないと、オブジェクトへの参照ではなく、先例のになってしまいます(この場合、アドレスを見ることができませんでした…)

.Dependents明らかに、で同じことができます:

これは、「リレーションシップを作成する VBA コードの行があるかどうか」という質問には答えません。これは、可変で予測不可能なオフセットによってセルを変更できるため、特に注意が必要です。

For j = 1 To n
  [B5].Offset(j+3, 2+k) = [A2].Offset(Int(DateValue(Now)) Mod 3, 1)
Next j

このスクリプトを実行する日付によって、どのセルが何に依存するかが決まります…</p>

于 2013-12-17T15:01:56.547 に答える