.Value = Evaluate(“ SUMPRODUCT”)返回#VALUE,但.Value =“ = SUMPRODUCT”是否正常工作?

时间:2019-03-20 16:44:54

标签: excel vba excel-formula sumproduct

我有一个脚本,可以从数据集中生成报告。数据集与票证/跟踪号的客户支持日志有关,具有基本的票证信息,例如何时打开票证,将票证分配给谁以及主要问题/工作量是什么。我的目标是创建一个已经存在但通过数据透视表手动完成的报告(几乎没人知道如何使用它),并避免使用公式。

基本报告是每个员工每月完成多少工作量。数据透视表很容易实现,但大多数人不知道如何做。这个excel公式可以得到我想要的=SUMPRODUCT((data!Column1="Employee1")*(data!Column2="Workload A")*(data!Column3>=DATEVALUE("2019-1"))*(data!Column3<DATEVALUE("2019-2")))一月的价格。数据的缺点是日期是格式为短日期的日期值。我在VBA中拥有的解决方案:

Cell.Value = "=SUMPRODUCT((data!" & AssigneeCol.Address & "=""" & Assignee.Value & """)*(data!" & WorkloadCol.Address & "=""" & Workload.Value & """)*(data!" & DateCol.Address & ">=DATEVALUE(""" & Worksheet.Name & """))*(data!" & DateCol.Address & "<DATEVALUE(""" & Year & Month2 & """)))"

这在excel中留下了一个巨大的公式,该公式引用到data工作表中,该工作表将不包含在报告中(尽管我认为它可能是隐藏的)。我更喜欢使用值来使工作表更易于管理。我尝试使用Evaluate,但它使单元格值#VALUE!

CheckCell.Value = Evaluate("=SUMPRODUCT((data!" & AssigneeCol.Address & "=""" & Assignee.Value & """)*(data!" & WorkloadCol.Address & "=""" & Workload.Value & """)*(data!" & DateCol.Address & ">=DATEVALUE(""" & Worksheet.Name & """))*(data!" & DateCol.Address & "<DATEVALUE(""" & Year & Month2 & """)))")

这是由于Evaluate()的固有限制,即:DATEVALUE中的SUMPRODUCT吗?据我所知它应该可以工作,但是我不知道。

1 个答案:

答案 0 :(得分:2)

没有解决有关评估的问题,但是您仍然可以使用单元内公式,然后用结果替换公式

With Cell
   .Formula = "=SUMPRODUCT((data!...  etc etc"
   DoEvents
   .Value = .Value
End With