Excel VBA - 循环公式数组并将其传递给变量

Excel VBA - looping formula array and pass it into variables

我正在做一个练习,其中有以下列

由于一年中不同的打开日期和关闭日期,主键将重复多次。所以目前我可以通过 vba 使用高级过滤功能并获得主键的唯一记录,但我还需要根据每个主键找到打开日期和关闭日期的最小值和最大值,并确定开盘价基于开盘日期的最小值,收盘价基于闭盘日期的最大值。

有人可以帮忙吗?因为我可以用 excel 中的数组公式解决这个问题,但是没有运气将每个数组公式转换为 vba 并将其传递给变量。

示例列表:

预期结果:

使用的数组公式:

=MIN(IF(A1:A70926=J2,B1:B70926))

=INDEX(C:C,MATCH(1,(J2=$A:$A)*(M2=$B:$B),0))

=MAX(如果($A:$A=J2,$B:$B))

=INDEX(F:F,MATCH(1,(J2=$A:$A)*(O2=$B:$B),0))

我不是很清楚你想要的最大值和最小值,但如果你将日期字符串转换为实际日期,你可以使用数据透视表table从日期中获取最大值和分钟的任意组合,例如

加上以上:

辅助列 F 在 F2 中有公式,当源设置为 Excel table.

时自动填充
=DATE(LEFT(B2,4),MID(B2,5,2),RIGHT(B2,2))

这会生成一个实际日期。

Ctrl+T,单元格 selected 在范围内,将数据转换为 Exceltable,然后Alt+N+V生成一个pivottable 来自 table.

然后随意安排。例如,在行区域中使用日期,您可以轻松地通过过滤器 select 最大和最小日期。您可以将代码作为页面字段过滤器或添加到转换日期前面的行。然后将打开和关闭的字段添加到值区域。您可以多次添加同一字段。确保在第一次添加时右键单击并执行值 > 字段设置 > min

重复添加相同的字段并设置为最大值。

关闭枢轴:


如果您想要所有时间的最大值和最小值,只需从行中删除日期字段:


如果您想要特定年份,当日期字段位于行区域时,右键单击并使用日期过滤器功能: