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

时间:2018-05-16 06:06:14

标签: excel-vba excel-formula array-formulas vba excel

我正在进行一项练习,其中我有以下专栏

  • 主键的第一列
  • 第二栏开放日期
  • 开放价格的第三栏
  • 关闭日期的第四栏
  • 第五栏收盘价

由于不同的开放日期和截止日期,主键将重复多次。因此,目前我可以通过vba使用高级过滤功能并获得主键的唯一记录,但我还需要根据每个主键找到开放日期和结束日期的最小值和最大值,并根据基准确定开放价格基于最近截止日期的开放日期和已结算价格的最小值。

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

样本列表:

sample list

预期结果:

expected result

使用的数组公式:

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

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

= MAX(IF($ A:$ A = J2,$ B:$ B))

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

1 个答案:

答案 0 :(得分:0)

我并不完全清楚您想要的最大值和分钟数,但如果您将日期字符串转换为实际日期,则可以使用数据透视表来获取该日期的最大,分钟组合。

Example

以上:

辅助列F在F2中具有公式,当源设置为Excel表格时自动填充。

=DATE(LEFT(B2,4),MID(B2,5,2),RIGHT(B2,2))

这会生成一个实际日期。

Ctrl + T ,在范围内选择一个单元格,将数据转换为Excel表格,然后 Alt + N + V 从该表生成一个pivottable。

然后按你的意愿安排。例如,通过行区域中的日期,您可以轻松地通过过滤器选择最大和最小日期。您可以将自动收报机作为页面字段过滤器或添加到转换日期前面的行。然后将值打开和关闭的字段添加到值区域。您可以多次添加相同的字段。确保在第一次添加时右键单击并执行值>字段设置>分钟

value field settings

Min

重复添加相同的字段并设置为max。

关闭枢轴:

Pivot

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

Example

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

Date filters