定期删除重复的单元格
Deleting periodically repeating duplicated cells
我在删除以下工作表中的重复单元格时遇到问题。
E 列是时间,F 列是时间戳的分钟数,我想整理一下。我想做的是在一小时内删除所有包含重复分钟数的行,这样我就可以每 5 分钟获取一次电流和功率读数。问题是,有时您会在一分钟内获得 5 个读数,有时是 6 个读数(因为读数是每 9、10 或 11 秒读取一次)。另一个问题是,我不能在一天内简单地删除所有重复的单元格,因为模式每小时重复一次,因此如果我简单地选择所有单元格,我只剩下一个小时的读数。
我在下面的代码中尝试的是通过双击第一个 "E" 单元格(该小时首次出现的位置)删除一个小时内所有具有双分钟值的行。它在第一个小时 (0:00-0:55) 正常工作,但对于后面的数字(小时),它开始删除其他行。
下一个合乎逻辑的步骤,当然是删除一天的所有双精度值。
整个事情不需要用户友好或互动,我只想过滤掉 5 分钟的阅读,如果没有别的,将它们粘贴到新的工作表上以供进一步分析。
这是工作表的 printscreen,包含数据
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim clickedRow As Long
Dim clickedValue As Long
Dim currentValue As Long
Dim counter As Long
clickedRow = ActiveCell.Row
clickedValue = ActiveCell.Value
For i = clickedRow To (clickedRow + 100)
currentValue = Range("E" & i).Value
If (clickedValue = currentValue) Then
counter = counter + 1
Else
Exit For
End If
Next i
ActiveSheet.Range("A" & clickedRow, "Y" & counter).RemoveDuplicates Columns:=6, Header:=xlNo
End Sub
我试过的另一件事没有被证明有效,因为它隐藏了所有重复的单元格,没有遗漏一个:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim clickedRow As Long
Dim clickedValue As Long
Dim currentValue As Long
Dim zadnja As Long
Dim trenutna As Long
clickedRow = ActiveCell.Row
clickedValue = ActiveCell.Value
For i = clickedRow To (clickedRow + 100)
currentValue = Range("E" & i).Value
If (currentValue = clickedValue) Then
zadnja = 5
trenutna = Range("F" & i).Value
If (trenutna = zadnja) Then
Range("E" & i).EntireRow.Hidden = True
Else
End If
zadnja = trenutna
Else
Exit For
End If
Next i
End Sub
当您使用 Range.RemoveDuplicates method 时,您需要同时考虑小时和分钟。目前,您仅将重复标准基于分钟(例如 Columns(6))。
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error GoTo bm_Safe_Exit
If Not Intersect(Target, Union(Columns(5), Columns(6))) Is Nothing Then
Cancel = True
Dim xlOriginalCalculation As Long, fr As Long, er As Long, tr As Long
Application.EnableEvents = False
xlOriginalCalculation = Application.Calculation
Application.Calculation = xlCalculationManual
tr = Target.Row
fr = Application.Match(Cells(tr, 5).Value, Columns(5), 0)
If Target.Column = 6 Then
fr = fr + Application.Match(Cells(tr, 6).Value, Cells(fr, 6).Resize(1440, 1), 0) - 1
er = fr + Application.CountIfs(Columns(5), Cells(tr, 5).Value, Columns(6), Cells(tr, 6).Value) - 1
Else
er = fr + Application.CountIfs(Columns(5), Cells(tr, 5).Value) - 1
End If
If fr <> er Then
With Range("A" & fr & ":Y" & er)
.RemoveDuplicates Columns:=Array(5, 6), Header:=xlNo
End With
With Range("A:Y")
.Cells.Sort key1:=.Columns(5), order1:=xlAscending, _
key2:=.Columns(6), order2:=xlAscending, _
Orientation:=xlTopToBottom, Header:=xlYes
End With
End If
End If
bm_Safe_Exit:
Application.EnableEvents = True
Application.Calculation = xlOriginalCalculation
End Sub
根据小时和分钟删除了重复项,这样第 0 小时的第 55 分钟就不会与第 1 小时的第 55 分钟混淆。
如果双击 MINS 列(F 列),则根据分钟对数据进行重复数据删除。如果双击 HRS 列,则会删除该小时的所有数据。
不需要 ActiveSheet 工作表代码表。
我在删除以下工作表中的重复单元格时遇到问题。 E 列是时间,F 列是时间戳的分钟数,我想整理一下。我想做的是在一小时内删除所有包含重复分钟数的行,这样我就可以每 5 分钟获取一次电流和功率读数。问题是,有时您会在一分钟内获得 5 个读数,有时是 6 个读数(因为读数是每 9、10 或 11 秒读取一次)。另一个问题是,我不能在一天内简单地删除所有重复的单元格,因为模式每小时重复一次,因此如果我简单地选择所有单元格,我只剩下一个小时的读数。
我在下面的代码中尝试的是通过双击第一个 "E" 单元格(该小时首次出现的位置)删除一个小时内所有具有双分钟值的行。它在第一个小时 (0:00-0:55) 正常工作,但对于后面的数字(小时),它开始删除其他行。 下一个合乎逻辑的步骤,当然是删除一天的所有双精度值。
整个事情不需要用户友好或互动,我只想过滤掉 5 分钟的阅读,如果没有别的,将它们粘贴到新的工作表上以供进一步分析。
这是工作表的 printscreen,包含数据
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim clickedRow As Long
Dim clickedValue As Long
Dim currentValue As Long
Dim counter As Long
clickedRow = ActiveCell.Row
clickedValue = ActiveCell.Value
For i = clickedRow To (clickedRow + 100)
currentValue = Range("E" & i).Value
If (clickedValue = currentValue) Then
counter = counter + 1
Else
Exit For
End If
Next i
ActiveSheet.Range("A" & clickedRow, "Y" & counter).RemoveDuplicates Columns:=6, Header:=xlNo
End Sub
我试过的另一件事没有被证明有效,因为它隐藏了所有重复的单元格,没有遗漏一个:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim clickedRow As Long
Dim clickedValue As Long
Dim currentValue As Long
Dim zadnja As Long
Dim trenutna As Long
clickedRow = ActiveCell.Row
clickedValue = ActiveCell.Value
For i = clickedRow To (clickedRow + 100)
currentValue = Range("E" & i).Value
If (currentValue = clickedValue) Then
zadnja = 5
trenutna = Range("F" & i).Value
If (trenutna = zadnja) Then
Range("E" & i).EntireRow.Hidden = True
Else
End If
zadnja = trenutna
Else
Exit For
End If
Next i
End Sub
当您使用 Range.RemoveDuplicates method 时,您需要同时考虑小时和分钟。目前,您仅将重复标准基于分钟(例如 Columns(6))。
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error GoTo bm_Safe_Exit
If Not Intersect(Target, Union(Columns(5), Columns(6))) Is Nothing Then
Cancel = True
Dim xlOriginalCalculation As Long, fr As Long, er As Long, tr As Long
Application.EnableEvents = False
xlOriginalCalculation = Application.Calculation
Application.Calculation = xlCalculationManual
tr = Target.Row
fr = Application.Match(Cells(tr, 5).Value, Columns(5), 0)
If Target.Column = 6 Then
fr = fr + Application.Match(Cells(tr, 6).Value, Cells(fr, 6).Resize(1440, 1), 0) - 1
er = fr + Application.CountIfs(Columns(5), Cells(tr, 5).Value, Columns(6), Cells(tr, 6).Value) - 1
Else
er = fr + Application.CountIfs(Columns(5), Cells(tr, 5).Value) - 1
End If
If fr <> er Then
With Range("A" & fr & ":Y" & er)
.RemoveDuplicates Columns:=Array(5, 6), Header:=xlNo
End With
With Range("A:Y")
.Cells.Sort key1:=.Columns(5), order1:=xlAscending, _
key2:=.Columns(6), order2:=xlAscending, _
Orientation:=xlTopToBottom, Header:=xlYes
End With
End If
End If
bm_Safe_Exit:
Application.EnableEvents = True
Application.Calculation = xlOriginalCalculation
End Sub
根据小时和分钟删除了重复项,这样第 0 小时的第 55 分钟就不会与第 1 小时的第 55 分钟混淆。
如果双击 MINS 列(F 列),则根据分钟对数据进行重复数据删除。如果双击 HRS 列,则会删除该小时的所有数据。
不需要 ActiveSheet 工作表代码表。