在VBA中按F9
或调用Calculate
时,Excel中的公式将被执行。但是,序列由Excel本身完成,直到公式依赖项中的依赖性约束。有没有办法记录计算过程?
例如,
10
放在A1
中的20
和A2
中的=A1+A2
; A3
放在30
中
显示=A1*A2
; A4
放入200
,显示=A3-A4
; A5
放入
-170
,它显示0
。我希望有一种方法可以证明计算顺序是
- A1
用于单元格A2
和1
- A3
用于单元格A4
和2
- 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
答案 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时计算的。