【问题标题】:VBA Type Mismatch on Year Function as CountIfs criteria作为 CountIfs 标准的年份函数的 VBA 类型不匹配
【发布时间】:2013-11-04 13:00:34
【问题描述】:

我收到以下代码的类型不匹配错误:

blattZFq3.Cells(month, siaw) = Application.WorksheetFunction.CountIfs(Worksheets(i).Range("AF10:AF290"), month, Year(Worksheets(i).Range("AE10:AE290")), minYear)

我猜这是第二个条件的问题,更具体地说,Year 函数作为范围的条件,因为代码在以前的版本中运行良好,只有第一个条件并使用 countif

minYear 被声明为 Variant,并已由之前的函数分配了 2012 的值。

基本上,我希望blattZFq3 范围内的单元格包含与month 匹配的数字在列中出现的次数,但前提是同一行但不同列中的日期年份匹配minYear .

有人有什么建议吗?

提前谢谢....

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    您不能对数组执行此功能:Year(Worksheets(i).Range("AE10:AE290")),因为它需要检查第二个区域的范围。
    另外,我会避免使用单词Month 作为变量名,因为它也是函数的名称。

    您必须编写具有 3 个条件的函数来绕过限制,或者将公式写入目标区域。

    具有 3 个条件的函数:

    blattZFq3.Cells(MyMonth, siaw) = _
        WorksheetFunction.CountIfs(Worksheets(i).Range("AF10:AF290"), MyMonth, _
        Worksheets(i).Range("AE10:AE290"), ">=" & DateSerial(minYear, 1, 1), _
        Worksheets(i).Range("AE10:AE290"), "<=" & DateSerial(minYear, 12, 31))
    

    作为公式进入单元格:

    blattZFq3.Cells(MyMonth, siaw).Formula = _
        "=SUMPRODUCT(--(SheetName!AF10:AF290=" & MyMonth & ")," & _
        "--(YEAR(SheetName!AE10:AE290)=" & minYear & "))"
    

    【讨论】:

    • 我同时解决了它有点不同...我在子的开头添加了一个函数,它遍历带有日期的列(总共 4 个)并将年份编号写入 4列在使用部分的右侧。然后,我可以像处理月份一样引用这些列。感谢您提供有关变量名称的提示,我会记住这一点...
    【解决方案2】:

    处理日期有时很棘手。你用的是英文版吗? 您可以尝试在 Excel 中编写相同的公式代码并在放入 VBA 之前对其进行测试。您也可以尝试以下方法:

    blattZFq3.Cells(month, siaw) = "=CONTIFS(.....)"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 2013-06-05
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多