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