【问题标题】:Excel VBA - looping formula array and pass it into variablesExcel VBA - 循环公式数组并将其传递给变量
【发布时间】:2018-05-16 06:06:13
【问题描述】:

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

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

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

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

样品清单:

预期结果:

使用的数组公式:

=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))

【问题讨论】:

  • 我可能错了,但是……你不能通过简单地设置多级排序得到你想要的吗?

标签: excel excel-formula array-formulas vba


【解决方案1】:

我不完全清楚您想要哪个最大值和最小值,但如果您将日期字符串转换为实际日期,您可以使用数据透视表从日期获取最大值和最小值的任意组合,例如

以上内容:

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

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

这会生成一个实际日期。

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

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

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

关闭枢轴:


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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 2021-08-21
    • 2019-01-14
    • 1970-01-01
    • 2013-06-04
    相关资源
    最近更新 更多