给定范围内的Excel最小日期

时间:2011-05-18 23:15:54

标签: excel vba

我有一个包含多列的Excel文件。如果您观察到附图,第1列是优惠券(以不同的结算日期重复)。我需要编写一个循环文件​​的宏,并找到每张优惠券的一条记录,其中包含特定优惠券所有日期的最短日期。例如,优惠券2在附加图像中具有4个记录。我应该删除三个,并且只有一个记录,其中最早的日期属于这四个。

有人可以给我举个例子吗?

Ir

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

可能是使用临时数组公式。假设字段Coupon是B列而Date是C列,那么在下一个空闲列中,比如N列使用{=IF(C2=MIN(IF($B:$B=B2,$C:$C)),TRUE,FALSE)}

然后使用高级过滤器在优惠券上进行过滤,在第N列中使用TRUE。在此示例中,我设置了Q列的标准和输出

例如VBA代码示例

Sub test()
Dim rng As Range, strR1c1 As String

'identify minimum date using array formula
With Sheet1

    .Range("N1").Value = "Temp Header"
    'array formula = {=IF(C2=MIN(IF($B:$B=B2,$C:$C)),TRUE,FALSE)}
    .Range("N2").FormulaArray = "=IF(RC[-11]=MIN(IF(C2=RC[-12],C3)),TRUE,FALSE)"
    strR1c1 = .Range("N2").FormulaR1C1
    Set rng = .Range("N2:N" & .Range("B" & .Rows.Count).End(xlUp).Row)

    rng.Formula = strR1c1
    rng.FormulaArray = rng.FormulaR1C1

    'Advanced Filter criteria requirements to new range
    .Range("B1:N11").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range( _
        "Q1:AC2"), CopyToRange:=.Range("Q5:AC5"), Unique:=False

    'tidy up - clear array formula
    .Range("N:N").ClearContents

End With


End Sub

enter image description here