从嵌套层级来看,第一个公式的嵌套层级较少,因此理论上计算速度会更快一些。
如数据量比较庞大,建议使用VBA,优化公式减少嵌套层级、使用数组公式等方法来实现。
例如您可以使用辅助列来存储中间结果: 在辅助列中计算 COUNTIF($B1317:$T1317,AA$1)=1 的结果,假设存储在 AA1321。 在辅助列中计算 COUNTIF($B1318:$T1318,Z$1)=0 的结果,假设存储在 Z1321。 在辅助列中计算 COUNTIF($B1319:$T1319,Y$1)=0 的结果,假设存储在 Y1321。 在辅助列中计算 COUNTIF($B1320:$T1320,X$1)=1 的结果,假设存储在 X1321。 然后,您可以将原始公式简化为: IF($V1320>每天!$AR$1268,IF(AND(AA1321, Z1321, Y1321),IF(X1321, 2, -2),),)
或
Sub OptimizeFormula()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
Dim v1320 As Variant
Dim ar1268 As Variant
Dim count1 As Long
Dim count2 As Long
Dim count3 As Long
Dim count4 As Long
Dim result As Variant
v1320 = ws.Range("V1320").Value
ar1268 = ws.Range("每天!$AR$1268").Value
count1 = Application.WorksheetFunction.CountIf(ws.Range("B1317:T1317"), ws.Range("AA1").Value)
count2 = Application.WorksheetFunction.CountIf(ws.Range("B1318:T1318"), ws.Range("Z1").Value)
count3 = Application.WorksheetFunction.CountIf(ws.Range("B1319:T1319"), ws.Range("Y1").Value)
count4 = Application.WorksheetFunction.CountIf(ws.Range("B1320:T1320"), ws.Range("X1").Value)
If v1320 > ar1268 Then
If count1 = 1 And count2 = 0 And count3 = 0 Then
If count4 = 1 Then
result = 2
Else
result = -2
End If
Else
result = Empty
End If
Else
result = Empty
End If
ws.Range("YourOutputCell").Value = result
End Sub
|