我有一个相当复杂的问题。
我有一个日志文件,当放入excel列#34;我"包含事件ID,列J包含一个自定义键,使特定的组保持均匀。
我想要做的就是删除事件id列中不包含say 102值的所有行。 然后我需要检查自定义键(列J)并删除重复的行,因为任何重复项都会错误地显示我想要的其他统计信息。
我已经能够使用com对象和.entirecolumn单元格值等从列中检索值,但我完全不知道如何拼凑一个可靠的方法来删除行。我无法弄清楚如何获取每个值的行。
为了更清楚一点,这是我对自己需要做的思考过程:
如果列I中的单元格值不= 102则删除单元格包含的行。 对电子表格中的所有行重复此操作。 然后- 读取J列中的每个单元格,并根据J列中的值删除包含重复项的所有行。 保存电子表格。
任何善良的人都可以帮助我吗?
其他信息:
第I列包含一个字符串,该字符串是事件ID号,例如= 1029 列J包含一个数字和字母混合的字符串= 1ASER0X3NEX0S
答案 0 :(得分:1)
然而,我今天对这些粗鲁的帖子感到厌倦,而且你的礼貌和尊重是我的,所以我在下面粘贴了一些代码就可以解决问题...提供了J列可以是一个字符串(你的详细信息)没有给我们......看看Macro Man的目标是什么?)。
有很多方法可以测试重复项。一种是尝试向集合添加唯一键,看它是否会引发错误。许多人不会喜欢这种哲学,但它似乎对你有好处,因为它还为你提供了J列中所有独特(即剩余)键的集合。
Sub Delete102sAndDuplicates()
Dim ws As Worksheet
Dim uniques As Collection
Dim rng As Range
Dim rowPair As Range
Dim iCell As Range
Dim jCell As Range
Dim delRows As Range
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set rng = Intersect(ws.UsedRange, ws.Range("I:J"))
Set uniques = New Collection
For Each rowPair In rng.Rows
Set iCell = rowPair.Cells(, 1)
Set jCell = rowPair.Cells(, 2)
On Error Resume Next
uniques.Add jCell.Value2, jCell.Text
If Err = 457 Or iCell.Value2 = 102 Then
On Error GoTo 0
If delRows Is Nothing Then
Set delRows = rowPair.EntireRow
Else
Set delRows = Union(delRows, rowPair.EntireRow)
End If
End If
Next
If Not delRows is Nothing then
MsgBox delRows.Address(False, False) & " deleted."
delRows.Delete
End If
End Sub
答案 1 :(得分:0)
有多种方法可以完成此操作,哪种方式最好取决于您执行此任务的频率以及是否要将其完全自动化。由于您已使用INSERT into history(history_date,sql_query,ip,authuser,authId)
VALUES(2015-09-16 00:00:00,'UPDATE itemstypes
SET typedesc="Keyboard",hassoftware=0 WHERE id="10"','10.16.7.44','superadmin','6')
标记了您的问题,因此我假设您对基于VBA的答案感到满意:
VBA
关键字是Sub removeValues()
Range("I1").Select 'Start at the top of the I column
'We are going to go down the column until we hit an empty row
Do Until IsEmpty(ActiveCell.Value) = True
If ActiveCell.Value <> 102 Then
ActiveCell.EntireRow.Delete 'Then delete the row
Else
ActiveCell.Offset(1).Select 'Select the cell below
End If
Loop
'Now we have removed all non-102 values from the column, let`s remove the duplicates from the J column
Range("A:J").RemoveDuplicates Columns:=10, Header:=xlNo
End Sub
。它将根据您在指定的列中找到的重复项从指定的范围中删除行。在这种情况下,它将根据第10列(即J)中的重复项从A-J列中删除项目。如果您的数据超出Range("A:J").RemoveDuplicates
列,那么您需要将J
替换为适当的范围。请注意,"A:J"
值是相对于第一列的索引,因此当Columns
列为J
时,当该范围从A(1)开始时,它将是{{1}例如,如果范围仅为10
。这有意义吗?
(注意:使用2
并不是最好的做法,但这种方法最明显地转化为您尝试做的事情,因为看起来您对VBA不熟悉我认为这是最简单的理解)。