我有以下专栏
12 A
11 M
12 B
12 C
11 A
9 M
13 N
11 M
12 C
11 B
15 M
我想通过选择范围仅根据我所做的女士来计算中位数。
我想使用列而不是范围。有什么解决方案吗?谢谢你的帮助
答案 0 :(得分:1)
如果您有2010年或以后使用此公式:
=AGGREGATE(17,6,(A:A/(B:B="M")),2)
如果您有2007或更早版本,请尝试以下数组公式:
=MEDIAN(IF(B:B="M",A:A))
这是一个数组公式,必须使用Ctrl-Shift-Enter确认。
虽然使用完整列引用会减慢计算时间,因为它将遍历所有行,全部为104万。优良作法是限制对最大数据范围的引用以帮助抵消这种消耗。将C:C更改为$ C $ 1:$ C $ 10000,然后它只会循环10,000次。
答案 1 :(得分:0)
作为VBA用户,我喜欢使用VBA,其他人可以使用你的技巧使用公式,并且如果你擅长公式,则完全正确。这是我的答案,我希望能帮到你。
想象一下你有这个:
+----+------------+--------------------+---------------+
| 1 | Values (A) | Criteria Range (B) | Criteria ( C) |
+----+------------+--------------------+---------------+
| 2 | 14 | B | A |
| 3 | 1 | M | |
| 4 | 15 | A | |
| 5 | 15 | E | |
| 6 | 10 | A | |
| 7 | 3 | M | |
| 8 | 11 | A | |
| 9 | 8 | M | |
| 10 | 14 | A | |
| 11 | 5 | M | |
| 12 | 9 | M | |
| 13 | 10 | M | |
| 14 | 11 | N | |
| 15 | 9 | A | |
| 16 | 2 | M | |
| 17 | 15 | M | |
| 18 | 11 | A | |
| 19 | 12 | S | |
| 20 | 9 | M | |
| 21 | 11 | A | |
| 22 | 15 | V | |
+----+------------+--------------------+---------------+
在单元格E2中,您有=MedianIf($A$2:$A$22,$B$2:$B$22,C2)
,结果必须为11
因为在VBA的常规模块中你放了这个函数。
Function MEDIANIF(RangeIf As Range, Criteria_Range1 As Range, Criteria1 As String) As Double
Dim i
Dim Counter
Dim tmp()
Dim subCouter
subCouter = 0
For Each i In Criteria_Range1
Counter = Counter + 1
If i.Value = Criteria1 Then
subCouter = subCouter + 1
ReDim Preserve tmp(1 To subCouter)
tmp(subCouter) = RangeIf(Counter)
End If
Next i
Dim a
MEDIANIF = Application.WorksheetFunction.Median(tmp())
End Function
功能如下:
RangeIF = is the range with the values that you want to get the MEDIAN
Criteria_Range1 = Is the range where you have all the criteria, is the same size as RangeIF
Criteria1 = Is the criteria you use to filter the data.
答案 2 :(得分:0)
这种低技术解决方案如何: