我需要寫一個Function,實作這樣的功能,
Function Func1( rng As Object ) As Variant
輸入是在單元格上選定的多個整數,例如12個,通過計算會得到四個Double,
選定B1:B4,鍵入公式={Func1(A1:A12)},在B1到B4得到四個Double的值,該如何實作,謝謝。
uj5u.com熱心網友回復:
在單元格內顯示的內容,不是“數值”就是文本,因此你把函式回傳值型別定為 Variant 沒有什么意義。
應該按你的實際情況選擇合適的型別,你這兒就應該選為 Double型別。
Function Func1(rng As Range) As Double
' 我不知道你的具體演算法是什么,
' 就簡單的做了個“數值求和”示例
Dim v As Double
Dim i As Long
v = 0#
For i = 1 To rng.Rows.Count
v = v + rng.Cells(i, 1).Value
Next
Func1 = v
End Function
一個函式只能回傳一個值(回傳“陣列”時除外,但單元格內不可能顯示“陣列結果”),
你的B1:B4 也不可能一次就把公式輸入了;至少你得先在B1輸入公式,然后把公式復制到下面3個單元格。
看樣子,實際是你的這“一組資料”,經計算有“4個結果資料,分別顯示在4個單元格中”,
那么,其實你就應該給函式增加一個引數,指定它“回傳第幾個引數”。
這樣,你的函式就應該定義為:
Function Func2(rng As Range, w As Long) As String
' 開始一系列的計算…………
' …………
' …………
' …………
' 按 w 值,回傳相應的結果
Select Case w
Case 1: Func2 = "第⑴個結果"
Case 2: Func2 = "第⑵個結果"
Case 3: Func2 = "第⑶個結果"
Case 4: Func2 = "第⑷個結果"
Case Else: Func2 = "引數錯誤"
End Select
End Function
然后,在B1輸入公式: =Func2($A$1:$A$12,ROW())
再選定B1單元格,滑鼠拖動復制公式到下面幾個單元格就行了。
(注意: Func2() 的代碼,你自己參照這個改一下)
uj5u.com熱心網友回復:
我的回傳值不能是Double,實際上我輸入的12個值,經過計算后得到4個Double,我需要在四個單元格中顯示這四個值,第二個方法也是有問題的,這12個值,我需要經過比較復雜的計算,這個計算程序在C中用DLL實作的,所以我不可能呼叫4次,太費時間。uj5u.com熱心網友回復:
你既然要用“公式”,那么函式被多次呼叫是不可避免的。Excel表格本來就是這個屌樣。

如果要想提高效率,那么你就不要用公式。
在表格中畫一個按鈕,撰寫對應的事件代碼。
如果資料源的位置和區域、輸出資料位置都是固定的,那么直接呼叫事件程序。
簡單的說,就是直接在程序中,從A1到A12讀取資料,呼叫DLL進行計算,然后把結果填到B1到B4中。
如果資料源不固定,那么在按鈕事件程序中,用輸入框詢問資料源區域、輸出位置。
比如詢問資料源,你輸入 A1:A12,那么程序中就從A1到A12讀取資料;
詢問輸出位置,你輸入B1,那么計算結果從B1開始,連續的4個單元格中輸出這4個資料。
其余類推。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/72119.html
標籤:VBA
上一篇:VBA簡單建模
