簡體   English   中英

VBA Excel中非連續范圍的最小值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM