根据开始和结束日期标准计算范围内的不同日期

问题描述 投票:0回答:1

在工作表中,我有一个平面文件结构,其中包含日期列,后面是其他变量的附加列。

在 VBA 中,我需要能够计算 A 列(其命名范围为“日期”)中唯一日期的数量,并将此计数传递给 VBA 代码。

我尝试使用以下 VBA,但收到运行时错误 13,类型不匹配。

RawStartDate
是 Excel 日期格式的命名范围(单个单元格),即 01/01/2024,就像
RawEndDate
一样。

Dim RawDistinctDates as Long 
RawDistinctDates = Application.WorksheetFunction.Count(Application.WorksheetFunction.Unique(Application.WorksheetFunction.Filter(Range("Date"), (Range("Date") >= Range("RawStartDate")) * (Range("Date") <= Range("RawEndDate")))))
MsgBox RawDistinctDates

我愿意使用纯 VBA 方法,而不是仅使用 WorksheetFunction。

为什么我无法让变量传递计数?

excel vba
1个回答
0
投票

简短、简单且快速的解决方案是

Option Explicit

Function CountUniqueDatesBetween() As Long
  Dim a, i&, j&, lb&, ub&, pv&
  a = Application.Sort(Sheet1.[A1].CurrentRegion.Columns(1).Value2)
  lb = Sheet2.[A1].Value2: ub = Sheet2.[A2].Value2
  i = 1: j = 0
  While a(i, 1) < lb: i = i + 1: Wend
  pv = a(i, 1) - 1
  While a(i, 1) <= ub
    If a(i, 1) > pv Then
      pv = a(i, 1)
      j = j + 1
    End If
    i = i + 1
  Wend
  CountUniqueDatesBetween = j
End Function
© www.soinside.com 2019 - 2024. All rights reserved.