簡體   English   中英

Excel:將數組傳遞給用戶定義的函數(VBA)

[英]Excel: Passing Array to User Defined Function (VBA)

編輯:解決方案 - 請參閱以下原始問題

在將像{1,2,3}這樣的數組傳遞給UDF時,我發現了兩件事需要考慮:

  • 語言環境 - 請參閱答案1.德語系統上的列表分隔符(通常)是“;” 因此我需要使用{1 ; 2 ; 3}。

  • 傳遞的數組在函數中顯示為二維數組。 因此,它的第n個元素必須以myArray(n, 1 )為目標。 無視這個給了我#VALUE! 錯誤。

因此,一個簡短的“選擇案例”-UDF可能如下所示:

Function SelCase(a1, a2, a3)
    For i = 1 To UBound(a2)
        If a2(i, 1) = a1 Then SelCase = a3(i, 1)
    Next
End Function

叫(德語區域設置!):

=SelCase(A1;{1;2;3};{"a";"b";"c"})

根據A1保持1,2或3,在結果中給出“a”,“b”或“c”。

比較詳細的“選擇案例” -UDF找到這里


原始問題:

我想將像{1,2,3,4}這樣的數組傳遞給Excel 2002中的用戶定義函數 - 並且無法找到執行此操作的方法。

我使用的是德語版本,因此“,”是我的小數分隔符,並且還將水平(1D-)數組中的值分開- 編輯:這是錯誤的 - ,wheras“;” 如我所知,在Sheet中調用公式中的參數中的參數,並在垂直(1D-)數組中分隔值。

我試過類似的東西

Function test(myArray)
Function test(myArray())

喜歡的東西

=test({1,2,3,4})
{=test({1,2,3,4})} (with ctrl+shift+enter)

在我的工作表中,但Excel總是要求我更正我的公式,如“= test({1,234})”這不是我想要的。

如果我嘗試類似的東西

=test({1;2;3;4})
=test(1,2,3,4)
=test(1;2;3;4) <- ok this would be for paramArray

作為表格中的公式,我得到一個#VALUE! 錯誤。

我不能使用paramArray'因為我最終必須傳遞兩個數組(可變大小)和一個單值作為3個參數。 在工作表和VBA中我需要什么語法來傳遞數組(未定義為范圍)?

先感謝您! 馬丁林登勞夫

編輯:

我正在嘗試構建的是“Select Case”的簡寫UDF,如:

Function SelCase() As Variant
a1 = "b"
a2 = Array("a","b","c")
a3 = Array("e1","e2","e3")
For i = 0 To UBound(a2)
    If a2(i) = a1 Then SelCase = a3(i)
Next
End Function

a1,a2,a3未在函數內定義但通過函數調用傳遞

=SelCase(A1;{"a","b","c"};{"e1","e2","e3"})

根據A1 =“a”,“b”或“c”給出“e1”......“e3”。

我可以通過CHOOSE()和MATCH()來實現這一點,但我經常討論它 - >喜歡有一個很好的“短版本”,順便說一句。 我想了解我在使用數組和UDF時遇到的問題......謝謝。

編輯2:

我在這里找到了“選擇案例UDF”的工作方法。 一般問題仍然存在:如何將一種{1,2,3}注釋中的數組傳遞給UDF(如果可能的話)。

你是這個意思嗎?

Excel公式:

=sumArray({1,2,3,4,5},2,{9.5,8.7,7.3,6,5,4,3},D1:D11)

UDF:

Function sumArray(ParamArray arr1() As Variant) As Double

    sumArray = WorksheetFunction.Sum(arr1(0)) + arr1(1) + _
        WorksheetFunction.Average(arr1(2)) + WorksheetFunction.Sum(arr1(3))

End Function

更新:

上面的代碼和公式肯定使用英國語言​​環境與下面的設置。 如果出現錯誤,則替換控制面板中的符號或使用正確的列表分隔符和小數符號更新公式。

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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