如果它们与使用 vba 的条件匹配,则在列中查找最小值和中值

Posted

技术标签:

【中文标题】如果它们与使用 vba 的条件匹配,则在列中查找最小值和中值【英文标题】:Finding the minimum and median values in a column if they match criteria using 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,并具体说明您卡在哪里。人们会很乐意提供帮助。祝你好运! 【参考方案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 范围的值匹配。

    Arg1 rng:整个数据范围 Arg2 searchValue:包含要匹配的值的范围,例如D2(即 A) 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 可以使用上面的功能

以上是关于如果它们与使用 vba 的条件匹配,则在列中查找最小值和中值的主要内容,如果未能解决你的问题,请参考以下文章

数组中多个 if 语句的 VBA 代码

如何使用模式列表在列中查找字符串并将匹配的模式添加到下一列的同一行

Excel VBA - 搜索范围和连接的 SQL ADODB 记录集以在列中匹配写入结果集

使用 VBA 将用户定义的函数输入到列中

EXCEL VBA 或 Function VLookup - 基于多个条件来查找值

是否有可以在列中查找非整数的 sql 条件?