有没有办法记录Excel公式计算的顺序

时间:2016-09-20 07:42:31

标签: excel excel-formula

在VBA中按F9或调用Calculate时,Excel中的公式将被执行。但是,序列由Excel本身完成,直到公式依赖项中的依赖性约束。有没有办法记录计算过程?

例如,

  • 我将10放在A1中的20A2中的=A1+A2;
  • A3放在30中 显示=A1*A2;
  • A4放入200,显示=A3-A4;
  • A5放入 -170,它显示0

我希望有一种方法可以证明计算顺序是   - A1用于单元格A21   - A3用于单元格A42   - A5用于单元格Sub SortAndRemoveDUBS() Dim Rng As Range Dim LastRow As Long Dim i As Long Application.ScreenUpdating = False LastRow = Cells(Rows.Count, "B").End(xlUp).Row Set Rng = Range("A4:P" & LastRow) With Rng .Sort Key1:=Range("A4"), Order1:=xlAscending, key2:=Range("P4"), order2:=xlDescending, _ Header:=xlYes, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom End With Dim arr() As Variant Dim cnt As Long cnt = 0 For i = LastRow To 2 Step -1 If WorksheetFunction.CountIf(Range(Cells(2, "A"), Cells(i, "A")), Cells(i, "A")) > 1 Then ReDim Preserve arr(cnt) arr(cnt) = i cnt = cnt + 1 End If Next i If Len(Join(arr)) > 0 Then ActiveSheet.Range("A" & Join(arr, ",A")).EntireRow.Delete Application.ScreenUpdating = True End Sub

1 个答案:

答案 0 :(得分:2)

要确定最后使用的计算序列,您可以从XLSX / XLSM文件中提取计算链部分并对其进行解码。 请参阅https://msdn.microsoft.com/en-us/library/office/gg278336.aspx作为起点

对于小规模测试,您可以使用像这样的计算序列跟踪UDF http://www.decisionmodels.com/Downloads/CalcTrace.zip

但请注意,计算顺序会在每次计算时动态变化。 要使用CalcTrace解压缩XLA并取消阻止它(右键单击XLA->属性 - >取消阻止)。然后打开XLA,好像它是一本工作簿。对于每个公式,您要查看计算序列(例如A4和A5,在= CalcSeqCountRef(A4)和= CalcSeqCountRef(A5)旁边添加一个公式。这将返回每次计算CalcSeqCountRef时递增1的计数。由于CalcSeqCountRef (A4)取决于A4,它是在每次计算A4时计算的。