excel vba ,excel表中A列有多个单元格值相同,则删除单元格所在行,且只保留这些相同值

excel vba ,excel表中A列有多个单元格值相同,则删除单元格所在行,且只保留这些相同值中排最后的一个值,这一行不删除
最新回答
绝命小红帽

2024-11-04 06:34:29

亲,是这个意思么?

打开你的Excel文件,按“Alt+F11”打开VBA编辑窗口,然后在左侧对应的Sheet上双击,右侧空白处粘贴下面的代码。关闭VBA窗口。然后按“Alt+F8”打开宏窗口,选择刚插入的宏,点击“执行”。

 

 

Sub sc()
Dim d
Set d = CreateObject("Scripting.Dictionary")
Dim i, r As Long
r = Cells(Rows.Count, "A").End(xlUp).Row
For i = r To 1 Step -1
    d(Range("A" & i).Value) = d(Range("A" & i).Value) + 1
    If d(Range("A" & i).Value) > 1 Then Rows(i).Delete
Next
Set d = Nothing
End Sub
追问
错误429
追答
在VBA编辑窗口,按F8单步执行,看看在哪一步程序中断了。然后,把错误的那段代码和错误提示窗口截图上来看看。
追问
Set d=CreateObject("Scripting.Dictionary")
这一行有问题,报错429, Scripting.Dictionary这个不能自动变大写,应该是没有被识别,不知道为什么
追答
自动变大写?这个是双引号中的内容,是外部引用,不是Excel VBA的热词,不会变大写的。
你是原样粘贴代码上去的吗?请截图上来看看。
海心

2024-11-04 00:40:06

假设数据区域A2:A20,则
1)B2=COUNTIF(A2:A$20,A2)
2)复制粘贴到B2:B20
3)筛选B列所有>1的值,删除掉
这样应该就可以了,非要用VBA的话,就按这个思路编程吧
1)用intRow=range("A" & rows.count).end(xlup).row 方法获取最大行号
2)dim rng as range, set rng = range("A2:A" & intRow)
3)rng.FormulaR1C1 = "=COUNTIF(RC[-1]:R" & intRow & "C[-1],RC[-1])"
4)筛选(录个宏,改一下)
5)dim rng2 as range, 用set rng2 =rng.SpecialCells(xlCellTypeVisible)方法获取可见单元格区域,然后删掉
青春期躁动症

2024-11-04 02:00:38

有偿可以考虑帮做