【发布时间】:2022-01-04 14:50:19
【问题描述】:
对不起,如果标题令人困惑,不知道如何措辞。基本上我想编写一个公式,该公式从用户指定的单元格(myDate)和起始单元格的地址(FirstCell)中获取日期并基于此:
- 设置一个范围 (myArea),该范围从指定的单元格开始,延伸到等于我们选择的日期 (numDays) 的月份和年份的天数的单元格。
- 计算该范围内没有空白内部的单元格(工作表中没有条件格式)并返回该数字。
例如,假设我的日期是 2022 年 1 月 4 日,2022 年 4 月有 5 天,但我的表格有 6 列。我想根据这个特定月份的长度定义一个范围,以便没有空白内部的单元格数量等于 1 而不是 2。我希望这可以在不同月份重现。
第 2 点已完成并适用于简单的用户指定范围,第 1 点给我带来了麻烦,因为我不希望它返回工作表中的任何内容。具体问题是设置 numDays 但可能还有其他我没有发现的错误 - 基本上我试图将 excel 函数解决方案移植到 VBA 中,但我很确定我的语法错误和/或这是不可行。在这里找不到任何可以回答我的问题的东西,当我尝试使用它返回 #VALUE 的函数时!在电子表格中。
Function SPECIALDAYS (FirstCell as Range, myDate as Date)
Dim myCell as Range
Dim myArea as Range
Dim numDays as Integer
numDays = Application.Evaluate("Day(Eomonth(" & myDate & ",0))")
Set myArea = Range(FirstCell, FirstCell.Offset(0, numDays-1))
For Each myCell In myArea
If myCell.Interior.ColorIndex <> -4142 Then
SPECIALDAYS=SPECIALDAYS+1
End If
Next myCell
End Function
【问题讨论】:
-
变量需要与字符串连接,否则它只是一个文本:
Application.Evaluate("Day(Eomonth(" & myDate & ",0))")和Evaluate需要英文公式,所以用,作为分隔符而不是;。 -
@Pᴇʜ 哇,谢谢!但是现在它每个月都给我相同的结果 (31),即使在工作表中使用相同的函数时,每个日期的长度都是正确的,我很困惑。
-
请edit您的问题并添加一些您使用的示例数据以及您如何在此示例数据上调用公式。也不清楚
<condition>是什么。我们需要您的问题的minimal reproducible example 示例数据来重现问题所在。 -
@Pᴇʜ 我刚刚做了,让我知道现在是否更清楚,或者我是否应该添加更多内容
-
所以你得到这个结果可能是因为
myCell.Interior.ColorIndex <> -4142永远不是真的。将Debug.Print myCell.Interior.ColorIndex放入循环中并在即时窗口中检查输出。
标签: excel vba user-defined-functions