2017-01-03 76 views
0

我正在嘗試使用另一個用戶定義函數中的用戶定義函數創建的數組。對於這個練習,我有兩個獨立的功能。如何調用由不同函數創建的數組?

第一個函數將從範圍輸入創建一個數組,並對這些值進行求和(是的,我知道有一個excel內置求和函數,但這只是用於練習)。

第二個函數將調用在第一個函數中創建的數組,並將值與第二個範圍輸入相加。請參閱以下代碼。

  Function first_funct(list_1 As range) As Double 

       Dim extent As Integer 
       extent = list_1.rows.Count 

       Dim main_array() As Double 
       ReDim main_array(1 To extent) 
       Dim i As Integer 

       first_funct = 0 

       For i = 1 To extent 
        main_array(i) = list_1(i).Value 
        'main_array will be used again in second function 

        first_funct = first_funct + main_array(i) 
       Next i 

      End Function 

      Function second_funct(list_2 As range) As Double 

       Dim extent As Integer 
       extent = list_2.rows.Count 
       'Assume the extent of list_2 is equal to extent of list_1 in first function. 

       Dim i As Integer 

       second_funct = 0 

       For i = 1 To extent 
        second_funct = second_funct + main_array(i) + list_2(i).Value 
        'How do I call upon main_array created from list_1 in the first function? 

       Next i 

      End Function 

我的問題是:我怎麼使用第一函數創建的main_array,這樣我可以使用它的第二個。

實際上,我有數百個需要計算的單元格,並且爲每個單元格創建相同的數組效率不高。我想創建一個數組(在本例中爲函數#1)並使用一個更簡單的函數(函數#2)來調用保存的數組,從而爲我節省了許多代碼和時間。

在此先感謝。

+0

全局變量是許多函數和子函數中使用的變量。你可能想讓你的數組成爲全局的。 –

+0

添加到@ A.S.H,只需在兩個函數之上移動Dim'main_array()As Double'行即可。應該管用。 – nightcrawler23

+0

您將數組作爲參數傳遞,或者如果只有一個和程序的主要點,則將其聲明爲全局。適度使用Globals,通過簡單化來加速程序。 – 2017-01-03 04:46:11

回答

1

將數組存儲到全局變量中是一種方法。但是這種方法存在的一個問題是,你已經將依賴關係引入到Excel無法看到的第二個func中。解決這個問題比將數組設置爲全局更復雜。

因此,您必須以某種方式確保first_func在second-func之前在此Excel會話中計算出來,並且還要重新計算first-func(例如因爲list_1已更改)所有second-Func重新計算。

所以,你必須做這樣的事情:

  • 在你Workbook_Open事件中,你需要重新計算第一FUNC(以 處理,當你重新打開的情況下工作簿和全局數組是空的,需要重新創建)
  • Second_func需要具有引用 要麼包含第一函數功能(以便Excel重新計算細胞的附加參數 它每當LIST_1變化和當FUNC-1 recalcs)
+0

全局變量有效,你是對的second_funct現在給我的問題,因爲依賴。現在我的目標是避免這種方法,因爲出現了這些問題。你介意看看我的新代碼嗎?請參閱鏈接:http://stackoverflow.com/questions/41477553/pass-array-created-in-first-function-to-second-function由於某些原因代碼給我的麻煩。我的目標是確保一切都會自動計算。 – Soto

相關問題