具有数组切片的Excel VBA MinIfs

问题描述 投票:0回答:1

我正在编写代码,在其中我将一个表的范围分配给二维数组,然后对该数组进行一些分析。该数组是变量类型,具有第3、4和5列,其中包含项目名称,日期和一个值。布局类似于以下内容:

Column 3    Column 4    Column 5
Item A  01/09/1987  0
Item A  01/10/1987  0
Item A  01/11/1987  1455
Item A  01/12/1987  1863
Item A  01/01/1988  1882
Item A  01/02/1988  1890
Item A  01/03/1988  0
Item A  01/04/1988  0
Item A  01/05/1988  0
Item B  01/09/1987  0
Item B  01/10/1987  2041
Item B  01/11/1987  1130
Item B  01/12/1987  1452
Item B  01/01/1988  1863
Item B  01/02/1988  1683
Item B  01/03/1988  1605
Item B  01/04/1988  1614
Item B  01/05/1988  1544

然后我创建一个临时数组(全局数组远远超出我需要的功能的65k项限制),一次分配一个项的相应日期和值。然后,我尝试使用Minifs函数,如下所示:

KPIMat(jCount, 3) = Application.WorksheetFunction.MinIfs( _
    Application.WorksheetFunction.Index(TempArr1, 0, 4), _
    Application.WorksheetFunction.Index(TempArr1, 0, 5), _
    ">0")

KPIMat是一个用于存储数据KPI的数组。当我运行代码时,我收到“运行时错误424,对象必需”消息。我认为这与Minifs函数需要一个范围并且我正在传递一维数组有关。如果是这样,有人以前遇到过这个问题吗?除了编写我自己的UDF来解决此问题外,我一直在尝试寻找基于代码的解决方案。

感谢您的帮助

arrays excel vba slice
1个回答
0
投票

正如您所发现的,MINIFS需要一个范围而不是一个数组。

只需自己迭代数组并使用临时变量:

Dim minTemp As double
minTemp = 1E+99

Dim i As Long
For i = LBound(TempArr1, 1) To UBound(TempArr1,1)
    If temparr(i, 5) > 0 And temparr(i, 4) < minTemp Then
        minTemp = temparr(i, 4)
    End If
Next i

KPIMat(jCount, 3) = minTemp
© www.soinside.com 2019 - 2024. All rights reserved.