[英]Min of non-contiguous range in VBA Excel
我希望使用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)。 位於“摘要”表中的輸出僅返回第一個數據塊的最小值0.10。 結果應為0.05(細胞B7)。
我想過運行一個循環來找到范圍的每個部分的最小值,但我不確定如何分割“Selection.Address”。 有沒有人建議如何讓宏返回整個非連續范圍的最小值?
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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.