【问题标题】:Excel Min Date in a given range给定范围内的 Excel 最小日期
【发布时间】:2011-05-18 23:15:54
【问题描述】:

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

谁能给我一个例子?

【问题讨论】:

  • 这属于 superuser.com。
  • @Thomas,不,他需要 VBA 来解决这个问题,不一定容易。
  • @Lance Roberts - 当可以在 Excel 中本地完成时,没有理由在 VBA 中执行此操作。
  • @Thomas 我需要一个宏,因为这是由近 30 个其他工作表动态创建的数据表
  • @S.., @Lance Roberts - 好的。很公平。

标签: excel vba


【解决方案1】:

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

然后使用高级过滤器在 N 列中过滤 Coupon 和 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多