【发布时间】:2018-05-17 03:11:45
【问题描述】:
请看附图——
我的要求是-
- “如果
status null和Ref No. not unique那么
检查值2。如果 value2 不存在,检查 value1 并取平均值
示例:对于 ref number = 1,计算值为 (50+10)/2 = 30"
- "如果
status is selected或Ref no is unique那么
从 value2 复制,如果不存在则从 value1 复制
示例:对于 Ref No 3,值为 100,对于 Ref No 4,值为 20
总值= 100+30+20 = 150
我的尝试
For I = 2 To lrow 'sheets all have headers that are 2 rows
'unique
If Application.WorksheetFunction.CountIf(ws.Range("A" & fRow, "A" & lrow), ws.Range("A" & I)) = 1 Then
If (ws.Range("AW" & I) <> "") Then 'AW has value2
calc = calc + ws.Range("AW" & I).Value
Else: calc = calc + ws.Range("AV" & I).Value 'AV has value1
End If
'not unique
Else
'selected
If ws.Range("AY" & I) = "Selected" Then 'AY has status (Selected/Null)
If (ws.Range("AW" & I) <> "") Then
calc = calc + ws.Range("AW" & I).Value
Else: calc = calc + ws.Range("AV" & I).Value
End If
'not selected
Else
If (ws.Range("AW" & I) <> "") Then
calc1 = calc1 + ws.Range("AW" & I).Value
Else: calc1 = calc1 + ws.Range("AV" & I).Value
End If
calc1 = calc1/Application.WorksheetFunction.CountIf(ws.Range("A" & fRow, "A" & lrow), ws.Range("A" & I))
End If
End If
我的问题是——
- 在我的逻辑中两次获得 Ref No 3。
- 无法计算正确的平均值。
我怎样才能得到正确的输出?谢谢。
【问题讨论】:
-
所以你忽略了第 5 行?
-
为什么 Ref4 的值为 20?它是独一无二的,所以不应该是 40 吗?
-
嗨。是的,我们忽略第 5 行,因为在第 4 行中选择了 Ref 3 的值。而对于 Ref4,我们首先要检查 value2。如果它不存在,那么我们必须检查 value1。
-
感谢@Jeepad。您还可以帮助我改进获得正确输出的尝试吗?
标签: excel excel-formula vba