在VBA Excel中,非连续范围的最小值

3
我正在寻找使用Excel VBA查找非连续范围的最小值。范围为非连续是因为我希望用户能够选择范围。不幸的是,我还没有找到适合我情况的解决方案。
具体而言,对于以下两组数据,用户可以选择A1:A5单元格,然后按下Control键,再选择A7:A11单元格。该宏应返回所选列B中所有单元格的列C中的最小值(在本例中为所有单元格)。
     A     B
1    1    0.1
2    2    2.0 
3    3    3.0
4    4    4.0 
5    5    5.0

6    6    0.05
7    7    0.2
8    8    0.3
9    9    0.4
10   10   0.5   

以下是我一直在使用的内容,但它只返回范围第一个连续部分的最小值。
Sub testa()

Dim RngA, out As Range
Dim MSA As Single


    Set RngA = Range(Selection.Address)
    MsgBox RngA.Address
    MSA = WorksheetFunction.Min(RngA.Offset(0, 1).Value)

    Set out = Worksheets("summary").Range("C13")

    out = MSA

End Sub

MsgBox只是为了验证所选范围是否正确。看起来它是正确的($A1:$A5,$A7:&A11)。输出在“summary”工作表中,仅返回第一组数据的最小值0.10。结果应该是0.05(单元格B7)。 我考虑运行一个循环来找到范围的每个部分的最小值,但我不确定如何拆分“Selection.Address”。有人有建议吗?如何让宏返回非连续范围的最小值?
1个回答

1

MIN函数对于非连续范围完全有效,我无法重现您的问题。以下代码按预期工作:

Sub test_min_in_non_contiguous_range()
    Dim area As Range: Set area = ActiveSheet.Range("$A$1:$A$3, $A$5:$A$11")
    Debug.Print Application.WorksheetFunction.Min(area)
End Sub

请告诉我如果您在此过程中遇到问题 :) 编辑: 刚刚意识到您的代码存在问题。
MSA = WorksheetFunction.Min(RngA.Offset(0, 1).Value)

应该是

MSA = WorksheetFunction.Min(RngA.Offset(0, 1))

这解决了问题。我对vba(以及编写代码)还很陌生,仍在努力弄清何时/如何使用value属性,以及为什么在这种情况下不需要它。我相信文档明确指出,无论如何都不能从不连续的单元格范围中获取值。 - dolecek21

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接