使用两列计算中值

时间:2016-02-03 20:09:47

标签: excel

我有以下专栏

12	A
11	M
12	B
12	C
11	A
9	M
13	N
11	M
12	C
11	B
15	M

我想通过选择范围仅根据我所做的女士来计算中位数。

我想使用列而不是范围。有什么解决方案吗?谢谢你的帮助

3 个答案:

答案 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)

这种低技术解决方案如何:

  1. 在C栏中,制定: = IF(B2 =" M",A2,"")(在第2-12行中,基于您的数据,并假设第1行包含标题)
  2. 在单元格D2(或其他任何地方)中,制定: = MEDIAN(C:C)