我希望使用Excel VBA找到非连续范围的最小值。范围不连续的主要原因是我希望用户能够选择范围。不幸的是,我还没能找到适合我情况的任何东西。
具体地,对于以下两组数据,用户可以选择单元格A1:A5,命中控制,然后选择单元格A7:A11。宏应该返回列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)。输出,位于"摘要" sheet,仅返回第一个数据块的最小值,0.10。结果应为0.05(细胞B7)。
我想过运行一个循环来找到范围的每个部分的最小值,但是我不确定如何分割" Selection.Address。"有没有人建议如何让宏返回整个非连续范围的最小值?
答案 0 :(得分: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))