我有一个电子表格,其中包含与标签描述的文本文件的数据连接。使用SoftPerfect中名为NetScan的程序导出功能生成文本文件。每个报告都是实时的,不包括当前未打开或连接到网络的计算机的数据。这意味着较新的报告可能缺少旧报告所具有的计算机,但它可能还包含添加了更多内存的计算机的更新信息或其他类似的计算机。
因此,在电子表格中,我可以刷新数据连接以从文本文件更新,但由于每次我结束大量重复的计算机条目时都会附加文本文件而不是替换(整行可能或可能不完全重复)。我想合并行,以便每台计算机都有一行。
小样本数据(全部是假的) - 请注意,完整的电子表格中有更多列,但此示例数据包含我计划过滤/合并的所有信息:
A B C D E F
IP Address Host Name MAC Address Response Time Dups Serial Number
192.168.1.110 CLT-001 XX:XX:XX:XX:XX:C5 0 ms 2 ABC123
192.168.1.174 CLT-001 XX:XX:XX:XX:XX:FE 5 ms 1 ABC123
192.168.1.110 CLT-001 XX:XX:XX:XX:XX:C5 1 ms 2 ABC123
192.168.1.138 CLT-004 XX:XX:XX:XX:XX:04 1 ms 2 DEF456
192.168.1.146 CLT-009 XX:XX:XX:XX:XX:8E 1 ms 2 GHI789
192.168.1.121 CLT-004 XX:XX:XX:XX:XX:04 1 ms 2 DEF456
192.168.1.146 NA XX:XX:XX:XX:XX:8E 1 ms 2 NA
192.168.1.152 CLT-005 XX:XX:XX:XX:XX:6B 1 ms 1 JKL012
序列号是如何识别唯一的计算机,但有时扫描无法获得S / N(WMI错误),在这种情况下,下一个最佳选择是MAC地址。 MAC地址的问题在于,大多数这些笔记本电脑最终将每台计算机注册2个 - 一个用于有线,一个用于无线。
我尝试使用=COUNTIF(Row,ItemToCount)
(这是示例数据中的E列),但我不确定如何使用从中获取的信息。此外,这一切都需要在VBA中完成,因此我可以将它包含在工作簿主表上的数据清理按钮中。我的目标是最终得到如下数据:
A B C D E F
IP Address Host Name MAC Address Response Time Dups Serial Number
192.168.1.110 CLT-001 XX:XX:XX:XX:XX:C5 0 ms 1 ABC123
192.168.1.146 CLT-009 XX:XX:XX:XX:XX:8E 1 ms 1 GHI789
192.168.1.121 CLT-004 XX:XX:XX:XX:XX:04 1 ms 1 DEF456
192.168.1.152 CLT-005 XX:XX:XX:XX:XX:6B 1 ms 1 JKL012
我考虑的一个概念是使用响应时间来指示连接是有线连接还是无线连接,这对于我的目的应该足够准确。 0或1ms表示有线,2ms或更长表示无线。另一个选择是添加更多WMI调用以识别那种网卡类型,并在报告到达导出的文本文件之前将其过滤掉。
此时,任何帮助将不胜感激。我在这些论坛上找到的最接近的问题是Conditional Removal of Duplicates from Excel问题。 mrexcel,excelforum和ozgrid等其他论坛也没有任何明显的答案,尽管有很多帖子几乎有类似的问题,找到我正在寻找的东西是相当困难的。谢谢!
答案 0 :(得分:0)
你可以试试这个: 我觉得公式比vba更容易/更快...所以我尽量少用vba。
首先,使用以下公式创建一个新列:
=IF(ISNA(MATCH(F2,OFFSET(F2,-1*(ROW(G2)-1),0,ROW(G2)-1,1),0)), FALSE, TRUE)
该公式的意图是,如果当前记录与其上方的任何内容重复,则返回TRUE。现在,它只是检查序列号,但是,在FALSE部分,您可以稍微复制逻辑并更改列以便以类似的方式检查MAC地址(如果需要)。
我在G栏中添加了该公式。在单元格H1中,我添加了以下公式:
=COUNTA(G:G)
(我也将这个单元命名为“numrows”)
然后在vba中,我做了以下事情:
Sub Macro1()
Dim r As Integer
r = Range("numrows").Value
For i = r To 2 Step -1
If Cells(i, 7).Value Then
Rows(i).Select
Selection.Delete Shift:=xlUp
Cells(i, 1).Select
End If
Next i
End Sub
这似乎可以解决问题。 通过将公式保持在vba之外,它应该使它更容易调整它以帮助id记录。然后vba脚本只查找“触发器”列,并根据此删除。 这实际上允许你手动“覆盖”,删除你知道你想要的一两条记录。