在设定的日期范围内计算唯一值

时间:2015-01-25 22:19:12

标签: excel vba excel-vba

我需要根据日期范围(可能是一天或几天)来计算列中的唯一值(名称)数量。

我的数据存储如下。

A列=日期mm / dd / yy
B列=姓名

不幸的是,数据导入我的文件的方式并没有给我任何其他选择,只是使用名称作为唯一员工识别的参考,没有列出ID。

想法是有一个2个单元格,用于“From”和“To”输入日期以执行唯一值计算并将结果返回到另一个单元格。

我已经或多或少地提供了我正在寻找的样本。你会找到一个我想输入日期的标签和一个带有示例数据库的标签。

http://public.justcloud.com/e04wqfgc89.83937591

这些独特的值将允许我执行报告所需的其他计算。

3 个答案:

答案 0 :(得分:1)

结果!S2的公式应如下所示:

=SUMPRODUCT(((DB!$A$2:$A$262>=A2)*(DB!$A$2:$A$262<=B2))/(COUNTIFS(DB!$A$2:$A$262,">="&A2,DB!$A$2:$A$262,"<="&B2,DB!$B$2:$B$262,DB!$B$2:$B$262&"")+(DB!$A$2:$A$262<A2)+(DB!$A$2:$A$262>B2)))

我见过工作表设计人员使用MIN(A2:B2)MAX(A2:B2)来防止用户以错误的顺序放置开始停止日期但我通常会让用户自行分解,因为他们无法区分 Date From Date To

答案 1 :(得分:1)

您可以使用此&#34;数组公式&#34;在C2

=SUM(IF(FREQUENCY(IF((DB!A$2:A$300>A2)*(DB!A$2:A$300<B2),MATCH(DB!B$2:B$300,DB!B$2:B$300,0)),ROW(DB!B$2:B$300)-ROW(DB!B$2)+1),1))

使用 CTRL + SHIFT + ENTER确认

答案 2 :(得分:1)

试试这个

Sub test()
Dim oCell As Range, i&, LRow&: i = 1
Dim Group As Object: Set Group = CreateObject("Scripting.Dictionary")
Dim DtFrom As Date, DtTo As Date
With Sheets("Results")
    DtFrom = .Cells(2, 1).Value
    DtTo = .Cells(2, 2).Value
End With
LRow = Sheets("DB").Cells(Rows.Count, "B").End(xlUp).Row
    For Each oCell In Sheets("DB").Range("A2:A" & LRow)
        If Not Group.exists(oCell.Offset(, 1).Value) And oCell.Value <> "" And _
        CDate(oCell.Value) >= DtFrom And CDate(oCell.Value) <= DtTo Then
            Group.Add oCell.Offset(, 1).Value, i: i = i + 1
        End If
    Next
Sheets("Results").Cells(2, 3).Value = Group.Count
End Sub