如何在vba中使用excel lambda函数?

gtlvzcf8  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(252)

我有一个excel工作簿,我在其中创建了许多lambda函数,每个函数都在名称管理器中命名。例如,我有一个名为WeatherTbl的表,如下所示:

Date      Place   Humidity Temp    Windspeed
1/1/2022  Athens     87      12       4
2/1/2022  Athens     83      11       3
3/1/2022  Athens     81      13       3
4/1/2022  Athens     79      10       4

我创建了一个名为Temp的lambda函数,它返回Temp列的date 1和date 2之间的值:

Temp=LAMBDA(date1;date2;INDEX(FILTER(WeatherTbl;(WeatherTbl[Date]>=date1)*(WeatherTbl[Date]<=date2));;4))

在excel工作表中,Temp函数工作得很好,返回一个动态数组。我的问题是:我可以通过VBA访问这个函数吗?在VBA函数中,我想获取返回的动态数组并在计算中使用它下面我给予了一个抽象的例子,说明我想如何使用它。

Dim TempArray As Object
set TempArray=Temp("1/1/2022","4/1/2022")
For Each element In TempArray
   if a.value=4 then a.value=5
Next element

该命令

ActiveWorkbook.Names(Temp)

返回字符串=LAMBDA(日期1;日期2;索引(过滤器(天气表;(天气表[日期]〉=日期1)*(天气表[日期]〈=日期2));;4))我不能用。

agxfikkp

agxfikkp1#

您可以使用Evaluate方法执行LAMBDA。
你需要创建一个字符串来表示函数调用,包括LAMBDA能理解的形式的参数。
在这种情况下,您的LAMBDA需要日期序列号。
注1:您的日期是不明确的。它们可能都是一月,或者都是一个月的第一天。您需要调整演示代码的日期常量以匹配您的数据。
注2:在LAMBDA公式中,您的本地使用;,我的使用,。在Evaluate字符串中,您 * 可以 *(我不确定)将,更改为;

Sub Demo()
    Dim TempArray As Variant
    Dim d1 As Date
    Dim d2 As Date
    Dim OutputRange As Range
    
    d1 = #1/2/2022#  ' Date constants are in M/D/Y
    d2 = #1/3/2022#
    
    TempArray = Application.Evaluate("TEMP(" & CLng(d1) & "," & CLng(d2) & ")")
    
    ' do something with the array
    Set OutputRange = ActiveSheet.Cells(20, 5)
    OutputRange.Resize(UBound(TempArray, 1), 1) = TempArray
    
    
End Sub

相关问题