变量等于带有已声明变量的公式

Variable equal to formula with a declared variable

抱歉,如果标题令人困惑,我不确定如何表达。基本上我想写一个公式,它从用户指定的单元格 (myDate) 和起始单元格 (FirstCell) 的地址中获取日期,并基于此:

  1. 设置一个范围 (myArea),该范围从指定的单元格开始,延伸的单元格数等于我们选择的日期的年月天数 (numDays)。
  2. 计算该范围内没有空白内部的单元格(sheet 中没有条件格式)并且 return 是那个数字。

例如,假设我的日期是 2022 年 1 月 4 日,而 2022 年的四月有 5 天,但我的 table 有 6 列。我想根据这个特定月份的长度定义一个范围,以便内部没有空白的单元格的数量等于 1 而不是 2。我希望它可以在不同的月份重现。

第 2 点已完成并使用简单的 user-specified 范围,第 1 点给我带来了麻烦,因为我不希望它 return [=30] 中的任何内容=].具体问题是设置 numDays 但可能还有其他我没有发现的错误 - 基本上我试图移植 excel 函数解决方案以将其计入 VBA 但我很确定我得到了语法错误 and/or 这是不可行的。在这里找不到任何可以回答我问题的东西,当我尝试使用它 returns #VALUE 的函数时!在价差sheet.

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

不要使用 Evaluate 和公式,而是使用带有 WorksheetFunctions 的纯 VBA 解决方案:

numDays = Day(Application.WorksheetFunction.EoMonth(Date, 0))

参见WorksheetFunction.EoMonth method