【问题标题】:Finding the minimum and median values in a column if they match criteria using vba如果它们与使用 vba 的条件匹配,则在列中查找最小值和中值
【发布时间】:2018-11-16 05:10:06
【问题描述】:

我有一张包含大量数据的工作表,这些数据对应于某个组,在本例中为组 A、B、C、D 和 E。

我想运行一个宏,该宏将在另一张纸上,并会找到与表格第一列中的内容相对应的最小值和中值。

使用该图像,我想运行一个宏来查看单元格 F2 中的值,然后在 C 列中为我提供相邻单元格中具有“A”的最小值,依此类推。同样,我希望为每个组计算中位数

任何建议将不胜感激!

干杯

【问题讨论】:

  • 你有没有尝试过任何事情并遇到了障碍?我想网上有很多例子。你可能需要数组公式。
  • 我心情很好,所以在下面建议了一个答案,但以后你应该先努力。
  • 欢迎来到 Stack Overflow!请使用tour 并阅读How do I ask a good question? 你最好的选择是做你的研究,search 以获取有关 SO 的相关主题,并试一试。如果您在进行更多研究和搜索后卡住并且无法摆脱卡住,请发布您的尝试示例Minimal, Complete, and Verifiable,并具体说明您卡在哪里。人们会很乐意提供帮助。祝你好运!

标签: vba excel criteria median minimum


【解决方案1】:

G2 及以下

=min(if(b$2:b$20=f2,c$2:c$20))

下半年及以下

=median(if(b$2:b$20=f2,c$2:c$20))

根据需要调整范围。

以数组公式的形式输入两者 - 使用 Ctrl + Shift + Enter 确认。如果正确完成,大括号将围绕公式。

【讨论】:

  • 您好,感谢您的留言!我正在寻找用 vba 代码而不是 excel 公式编写的。所以报告可以完全自动化。到目前为止,我尝试过的任何方法都没有奏效!
  • 您可以在输入公式的同时录制宏吗?等我有时间再看看。
【解决方案2】:

这是一个 UDF,尽管我会接受已经给出的答案。

函数GetMinMedianIf:

根据 arg3 返回 arg1 中指定的范围的最小值或中值,其中范围 (arg1) 第一列中的值与 arg2 范围的值匹配。

  1. Arg1 rng:整个数据范围
  2. Arg2 searchValue:包含要匹配的值的范围,例如D2(即 A)
  3. Arg3 MinMedian:要执行的计算。 Min 表示最小值,中位数表示中位数

代码:

Option Explicit

Public Sub TEST() '<== This is just a test sub to run
    Debug.Print GetMinMedianIf([A2:B16], [F2], "Min") ' or "Median"
End Sub

UDF:

 Public Function GetMinMedianIf(ByRef rng As Range, ByVal searchValue As Range, ByVal MinMedian As String) As Long
    'MinMedian args: "Min" for Min; "Median" for Median
    Dim arr(), i As Long, counter As Long

    If searchValue.Cells > 1 Then
        GetMinMedianIf = CVErr(xlErrValue)
        Exit Function
    End If

    arr = rng.Value
    Dim arr1()
    ReDim arr1(0 To UBound(arr, 1) - 1)

    For i = LBound(arr, 1) To UBound(arr, 1)
        If arr(i, 1) = searchValue Then
            arr1(counter) = arr(i, 2)
            counter = counter + 1
        End If
    Next i

    ReDim Preserve arr1(0 To counter)

    Select Case MinMedian
    Case "Min"
        GetMinMedianIf = Application.WorksheetFunction.Min(arr1)
    Case "Median"
        GetMinMedianIf = Application.WorksheetFunction.Median(arr1)
    End Select
End Function

在工作表中的使用

【讨论】:

  • @huw96 可以使用上面的功能
猜你喜欢
  • 1970-01-01
  • 2013-05-08
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
相关资源
最近更新 更多