如果col匹配特定条件,则将excel中的行复制到新工作表中

时间:2014-01-24 07:12:18

标签: excel excel-vba vba

我是excel的新手,并且一直在寻找许多函数来尝试使用我收集的一些数据。

我每5分钟收集2~3个数据集(索引0~2)。例如......

id日期索引时间
1 1/1/2014 0:00 0 24
2 1/1/2014 0:00 1 25
3 1/1/2014 0:00 2 25

4 12/31/2013 23:50 0 24
5 12/31/2013 23:50 1 25
6 12/31/2013 23:45 0 24
7 12/31/2013 23:45 1 24
8 12/31/2013 23:45 2 25

........

我想复制每次具有最小时间(col_4)值的整行。 (也是那些有领带价值的人)。作为一个结果...

id日期索引时间
1 1/1/2014 0:00 0 24
4 12/31/2013 23:50 0 24
6 12/31/2013 23:45 0 24
7 12/31/2013 23:45 1 24

我一直在寻找像min,Vlookup,choose,index这样的函数......我也在寻找如何做vba。我已经部分完成了一些事情,但无法完成它。任何提示或评论将非常感激。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

(单元格A1中的列标签“ID”)

基本规则似乎是:

“如果记录的时间(最后一列)小于上一记录的时间,则记录为第一组记录。”

如何实施此规则取决于您要应用的自动化程度。仅限公式的方法可能如下所示:

  • 创建一个额外的列E,E1中的列标题是“Rank”
  • 从E2开始,输入公式=IF(D2<D1,1,E1+1)并复制
  • 执行自动过滤并过滤“Rank”= 1以显示第一组记录

(意味着当满足第一组条件时,等级设置为1,否则它会增加...有利的是,您还可以查看组中有多少条记录的信息最大组)

在VBA脚本中,我实现了这样的规则......

Sub FindFirstOfGroup()
Dim SrcRange As Range, Idx As Long

    Set SrcRange = ActiveSheet.[A1]
    Idx = 2

    Do While SrcRange(Idx, 1) <> ""                        ' exit condition - first row with no ID
        If SrcRange(Idx, 4) < SrcRange(Idx - 1, 4) Then    ' group condition
            ' first-of-group found
            ' Debug.Print SrcRange(Idx, 1)                  ' do whatever needs to be done
        End If
        Idx = Idx + 1
    Loop

End Sub

或者您可能想要使用规则

“如果索引为0,则记录为第一组。”