如何用宏找出EXCEL表格中完全相同的行?
大量数据,每一行有好几列,表中有某行某列名字相同但是同行其他列数据不同的,现在要求用宏找出完全相同的行,并用颜色标记出来,求助…谢谢!重点在于我的表中有几万行,然后不同列...
大量数据,每一行有好几列,表中有某行某列名字相同但是同行其他列数据不同的,现在要求用宏找出完全相同的行,并用颜色标记出来,求助…
谢谢!重点在于我的表中有几万行,然后不同列有名字,种类,开发人,时间等好几列。必须所有列都相同的 展开
谢谢!重点在于我的表中有几万行,然后不同列有名字,种类,开发人,时间等好几列。必须所有列都相同的 展开
4个回答
展开全部
Alt+F11进入编辑器,插入模块,复制粘贴下面代码:
Sub t()
Dim str As String '保存每一行内容的临时变量
Dim colNum As Integer '表格列数
Dim rowNum As Long '表格行数
Dim dict '字典
Set dict = CreateObject("Scripting.Dictionary")
With ActiveSheet
colNum = .UsedRange.Columns.Count
rowNum = .UsedRange.Rows.Count
For i = 1 To rowNum
str = ""
For j = 1 To colNum
str = str & .Cells(i, j).Value '将每一行的值连接成一个字符串
Next
If Not dict.Exists(str) Then
dict.Add str, i '如果字典中不存在str的值,加入字典,Key为str的值,Value为行号
Else
.Cells(i, colNum + 1).Value = "与第[" & dict(str) & "]行重复" '如果存在重复值,在表格右侧空白列添加标注
.Cells(dict(str), colNum + 1).Value = "与第[" & i & "]行重复" '同时,在之前行右侧也添加标注
End If
Next
End With
End Sub
效果如图:
展开全部
有一个不用宏就能实现的方法,做一列辅助列(假设为F列),该列等于若干列的联合,比如:=A2&B2&C2&D2&E2 这样是用多列作为一个关键字,保证不出现你说的情况
(某行某列名字相同但是同行其他列数据不同的)
然后用条件格式来判断那些是重复的;选中F列,菜单栏》格式》条件格式》选择“公式”,输入:=IF(COUNTIF(F:F,F1)>1,1,0),设置格式,比如底色为红色,确定。
这样只要又重复的,便会用红色表示出来。
(某行某列名字相同但是同行其他列数据不同的)
然后用条件格式来判断那些是重复的;选中F列,菜单栏》格式》条件格式》选择“公式”,输入:=IF(COUNTIF(F:F,F1)>1,1,0),设置格式,比如底色为红色,确定。
这样只要又重复的,便会用红色表示出来。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Sub Macro1()
'查找当前表格所有行,如果两行的所有列内容相同,则红色标记整行
Dim c As Range, r&, col%, cols%, arr, d, tmp
With ActiveSheet
Set c = .Cells.SpecialCells(xlCellTypeLastCell)
With .Range(.Cells(1, 1), c)
.EntireRow.Interior.ColorIndex = xlNone
arr = .Cells
cols = .Columns.Count
End With
Set d = CreateObject("Scripting.Dictionary")
For r = LBound(arr) To UBound(arr)
tmp = ""
For col = LBound(arr, 2) To UBound(arr, 2)
tmp = tmp & "|" & CStr(arr(r, col))
Next
If Len(tmp) > cols Then
If d.Exists(tmp) Then
.Rows(r).Interior.ColorIndex = 3
.Rows(Val(d(tmp))).Interior.ColorIndex = 3
Else
d(tmp) = r
End If
End If
Next
End With
MsgBox "ok"
End Sub
------------
如果需要改动程序功能,请Hi我,详细解答
'查找当前表格所有行,如果两行的所有列内容相同,则红色标记整行
Dim c As Range, r&, col%, cols%, arr, d, tmp
With ActiveSheet
Set c = .Cells.SpecialCells(xlCellTypeLastCell)
With .Range(.Cells(1, 1), c)
.EntireRow.Interior.ColorIndex = xlNone
arr = .Cells
cols = .Columns.Count
End With
Set d = CreateObject("Scripting.Dictionary")
For r = LBound(arr) To UBound(arr)
tmp = ""
For col = LBound(arr, 2) To UBound(arr, 2)
tmp = tmp & "|" & CStr(arr(r, col))
Next
If Len(tmp) > cols Then
If d.Exists(tmp) Then
.Rows(r).Interior.ColorIndex = 3
.Rows(Val(d(tmp))).Interior.ColorIndex = 3
Else
d(tmp) = r
End If
End If
Next
End With
MsgBox "ok"
End Sub
------------
如果需要改动程序功能,请Hi我,详细解答
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Sub aa()
Dim x, n
x = [a65536].End(xlUp).Row
For i = 1 To x
n = Cells(i, 1).Value
If Application.WorksheetFunction.CountIf(Range(Cells(i, 1), Cells(i, 5)), n) = 5 Then '主要是修改这里,其它没事,(Range(Cells(i, 1), Cells(i, 5)), Cells(i, 1)) = 5这里共有两个5,你有几列就输几,多少都不行的
Rows(i & ":" & i).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 15773696
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
Next
End Sub
Dim x, n
x = [a65536].End(xlUp).Row
For i = 1 To x
n = Cells(i, 1).Value
If Application.WorksheetFunction.CountIf(Range(Cells(i, 1), Cells(i, 5)), n) = 5 Then '主要是修改这里,其它没事,(Range(Cells(i, 1), Cells(i, 5)), Cells(i, 1)) = 5这里共有两个5,你有几列就输几,多少都不行的
Rows(i & ":" & i).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 15773696
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
Next
End Sub
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询