Excel VBA函数出现#VALUE错误

在我的Excel电子表格中,我有两列。

  • A包含值为“是”,“否”或“可能”的string。
  • B包含一年的string。

我需要一个函数来确定B列中一年出现的次数,A列中的等价值是'是'。

我目前有以下代码:

Function CountIfYearAndValue(Rng As Range, YNM As String, Year As String) As Integer Dim count As Integer count = 0 For Each c In Rng.Cells If (StrComp(Abs(c.Value), Year, vbTextCompare) = 0) And (StrComp(Cells(c.Row, A), YMN, vbTextCompare) = 0) Then count = count + 1 Next CountIfYearAndValue = count End Function 

这个代码的思想是,我们遍历给定范围内的每个单元格(B列的范围),并检查年份是否等于Year参数。 如果A列上的等价单元格等于YNM参数,我们就增加countvariables。

出于某种原因,当我使用以下参数时,此代码不起作用:

 =CountIfYearAndValue('Years'!B1:B7,"Yes","Year 7") 

它只是执行#VALUE错误,并拒绝显示任何结果。

任何帮助将非常感激。

编辑:两个单元格中的所有值都是未格式化的数据types(“常规”),没有单元格为空。

这听起来像是在重新发明轮子…已经有一个内置的函数( 优势:比UDF快得多 ), 完全符合你的要求。 它被称为COUNTIFS()

Year 7 1至10行中的Year 7年的所有YESES。

=COUNTIFS(B1:B10, "Year 7",A1:A10, "Yes")


我只是简单地看了一下你的代码,我想可能有几个原因可能导致你的原始代码无法正常工作。

  • YNM是一个有效的列名,因此它不应该被用作variables名。 你应该避免像这样命名你的variables – 给它一个更有意义的名字

  • YNM != YMN就像你在代码中一样( 参见函数定义,然后在StrComp()函数中拼写错误

  • Year是一个有效的VBA内置函数,因此再一次您应该避免使用它作为variables名称,因为你暴露自己的命名冲突。

  • 在你的模块的顶部添加Option Explicit 。 这需要你把所有的variables都调出来。 总是有很多原因。

  • rngvariables是Rangetypes的,所以你不需要明确地添加.Cells属性。 尽pipe在某些情况下可能会有所帮助,但在更高级的层面上,您可能会遇到一些运行时types兼容性问题。 ( 运行时可能会将您的范围variables转换为二维数组等

  • c.Offset(0, -1)周围的第二个StrComp()函数中添加了显式转换,因为您不希望运行时( 很less但仍可能 )将Yes转换为Boolean型数据types。 显式转换为一个String只是给你额外的保护 ; p(lol)

因此,像这样的东西返回正确的价值

 Function CountIfYearAndValue(rng As Range, choice As String, myYear As String) As Long Dim count As Long count = 0 Dim c As Range For Each c In rng If (StrComp(c, myYear, vbTextCompare) = 0) And (StrComp(CStr(c.Offset(0, -1)), choice, vbTextCompare) = 0) Then count = count + 1 End If Next c CountIfYearAndValue = count End Function 

对,我希望这可以帮助你理解点点滴滴:)任何问题请发表评论