2017-08-02 77 views
1

我有一個電子表格與多個動態命名區域,如HR_B1,數組最小值HR_B10等在Excel中利用VBA determinine從命名區域

我想創建一個函數,將發現的最小從函數中插入任何一個範圍的值,即用戶函數將輸入兩個值到函數say 3和6中,並且它將在範圍HR_B3到HR_B6上找到最小值。

我創建了一個數組和循環存儲陣列中的命名範圍的名稱。

但是我不能得到WorksheetFunction.Min代碼來讀取該陣列的內容作爲命名區域,並輸出最小值。

我的代碼是:

Public Function HR_Min_Range(minval As Integer, maxval As Integer) As Variant 

Dim fullrange() As Variant 
Dim total_birds As Integer 
Dim i As Long 

total_birds = (maxval - minval) 

ReDim fullrange(total_birds) 

For i = 0 To total_birds 

fullrange(i) = "HR_B" & (i + minval) 
Next i 

HR_Min_Range = WorksheetFunction.Min(Sheets("HR_Depths").Range(fullrange)) 

End Function 
+0

「我不能讓WorksheetFunction.Min」 爲什麼呢?你有什麼嘗試? –

回答

0

正確的語法是這樣的:

Worksheetfunction.min([named]) 

WorksheetFunction.min(activesheet.range("named")) 

WorksheetFunction.min(tabelle1.Range("named")) 

Worksheetfunction.Min(worksheets("Tabelle1").range("named")) 

Worksheetfunction.Min(tabelle1.[named]) 

Worksheetfunction.Min(worksheets("Tabelle1").[named]) 

隨意挑不出什麼:)這是在的情況下,該工作表與標題和代號Tabelle1和命名範圍被命名爲named


在你的情況下,你是不是把fullrange括號或[。這兩個選項都應該有效。

+0

Hi Jeeped, 您的代碼有效,但我不知道如何。 你能解釋一下循環中發生了什麼嗎? 謝謝 – Timm

+0

@Timm - jeeped的答案在上面。 – Vityata

1

嘗試,因爲,

Option Explicit 

Public Function HR_Min_Range(minval As Integer, maxval As Integer) As Variant 

    Dim i As Long 


    HR_Min_Range = Worksheets("HR_Depths").Range("HR_B" & minval).Cells(1) 

    For i = minval To maxval 
     HR_Min_Range = Application.Min(HR_Min_Range, Worksheets("HR_Depths").Range("HR_B" & i)) 
    Next i 

End Function 
+0

我想我得到了Jeeped的代碼。在循環中,application.min添加了一個用於每個命名範圍的新參數,因此如果有5個命名範圍,它將運行帶有5個參數的application.min。那是對的嗎? – Timm

+0

是的,考慮到您的示例,這可以從命名範圍HR_B3,HR_B4,HR_B5和HR_B6中找到最小值。 – Jeeped

+0

我相信我現在明白了。在application.min中只有兩個參數,第一個是固定的,第二個是隨着每個循環增加一個額外的命名範圍到application.min正在查看的整個區域。 謝謝 – Timm