VBA:将表格分为3组并比较时间(Excel)



我有一个包含 3 组的表格(由 B 列中的值"1G、3G 或 5G"定义),如下所示。

对于值 1G 的每次(A 列),我需要测试值 3G 是否在 1G 的 10 分钟内出现(如 A 列所示)。如果是这样,那么我需要测试值 5G 是否在 20 分钟内出现(值 1G 的时间)。

因此,读取时间"

1G"然后读取时间"3G",如果=<10分钟,则读取时间"5G"=<20分钟。

'Time'    'Group Name'  'Data'
----------
12:08 am       1G        747
12:45 am       1G        745
1:00 am        1G        746
12:36 am       3G        743
12:45 am       3G        747
1:03 am        3G        74
12:50 am       5G        75
1:00 am        5G        741

格式"时间": 9/25/2012 8:37:00 pm

我希望将结果写在每行包含所有数据的新工作表上。

我查看了这个网站和其他网站上的答案,但没有找到答案。谢谢你的帮助。

此宏将在 10 分钟内提取所有具有 3G 的 1G 线路,并在 20 分钟内提取具有 5G 的所有线路。

   Sub Macro2()
Dim lLastRow As Long, shtOrg As Worksheet, shtDest As Worksheet, rgLoop As Range
'turn off updates to speed up code execution
With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .Calculation = xlCalculationManual
End With
Set shtOrg = ActiveSheet
Set shtDest = Sheets.Add
lLastRow = shtOrg.Cells(Rows.Count, 1).End(xlUp).Row
shtOrg.Range("D2:D" & lLastRow).FormulaR1C1 = _
        "=IF(RC[-2]=""1G"",IF(COUNTIFS(C[-3],"">="" &RC[-3],C[-3],""<=""&RC[-3]+10/1440,C[-2],""3G"")*COUNTIFS(C[-3],"">="" &RC[-3],C[-3],""<=""&RC[-3]+20/1440,C[-2],""5G"")>0,TRUE,""""),"""")"
shtOrg.Range("E2:E" & lLastRow).FormulaR1C1 = _
        "=N(IF(RC[-3]=""3G"",COUNTIFS(C[-1],TRUE,C[-4],""<=""&RC[-4],C[-4],"">=""&RC[-4]-10/1440),IF(RC[-3]=""5G"",COUNTIFS(C[-1],TRUE,C[-4],""<=""&RC[-4],C[-4],"">=""&RC[-4]-20/1440),"""")))>0"
shtOrg.Range("A1:E" & lLastRow).AutoFilter field:=4, Criteria1:="TRUE"
shtOrg.Range("A1:C" & lLastRow).SpecialCells(xlCellTypeVisible).Copy shtDest.Cells(1, 1)
shtOrg.Range("A1:E" & lLastRow).AutoFilter
shtOrg.Range("A1:E" & lLastRow).AutoFilter field:=5, Criteria1:="TRUE"
shtOrg.Range("A2:C" & lLastRow).SpecialCells(xlCellTypeVisible).Copy shtDest.Cells(Rows.Count, 1).End(xlUp).Offset(1)
shtOrg.Columns("D:E").ClearContents
shtOrg.Range("A1:E" & lLastRow).AutoFilter

With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = xlCalculationAutomatic
End With

End Sub

在第一行数据中输入此公式(我假设第 2 行):

=AND(B2="1G",SUM((B3:$B$8="3G")*(A3:$A$8<=A2+"00:10")*(A3:$A$8>=A2)),SUM((B3:$B$8="5G")*(A3:$A$8<=A2+"00:20")*(A3:$A$8>=A2)))

将公式中的 $B$8 和 $A$8 更改为最后一行数据。

输入公式后,不要按 Enter ,而是按 Ctrl+Shift+Enter 。公式周围应显示大括号。

现在向下拖动公式。任何评估为真实的内容都符合您的条件。它只搜索当前位置下方,因此最好对数据进行排序。

现在使用自动筛选器获取相关行。如果我理解正确,您可以在另一张纸上使用数据透视表,但我不知道这是如何完成的:)

最新更新