Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1937|回复: 7

[已解决]谢谢无聊的疯子老师。如何瘦身

[复制链接]
发表于 2012-2-26 13:57 | 显示全部楼层 |阅读模式
本帖最后由 lhj323323 于 2012-2-27 00:19 编辑

老师:
在附件中有详细的需求,请看看,如何写程序,谢谢了。 瘦身.rar (15.21 KB, 下载次数: 11)
发表于 2012-2-26 14:16 | 显示全部楼层
是不是A列+C列相同的行数只要留一行就行?
回复

使用道具 举报

发表于 2012-2-26 14:18 | 显示全部楼层
本帖最后由 无聊的疯子 于 2012-2-26 15:02 编辑

使用 07 和 10 版自带的 删除重复项功能(03)的没有这个功能

为方便你看到效果,特添加了两行代码
Arr = .Value  '将源数据读入数组
.Value = Arr  '将数据还原
测试通过后,将这两行删除即可


  1. Sub 删除重复()
  2. Dim Hx As Long, Lx As Integer
  3. Dim Arr As Variant
  4.   With Sheets("数据")
  5.     Hx = .Range("A65536").End(xlUp).Row
  6.     Lx = .Range("IV2").End(xlToLeft).Column
  7.     With .Range(.Cells(3, "A"), .Cells(Hx, Lx))
  8.       Arr = .Value  '将源数据读入数组
  9.       
  10.       .RemoveDuplicates Array(1, 3), xlNo
  11.       'array 中的 1,3 代表 区域中的 第一列和第三列,在这里也就是 A,C两列
  12.       '如果你还要 添加条件 列,直接在里面添加就可以了
  13.       
  14.       .Value = Arr  '将数据还原
  15.     End With
  16.   End With
  17. End Sub
复制代码


先排序再删除,这样看更直观点


  1. Sub 排序后删除()
  2. Dim Hx As Long, Lx As Integer
  3. Dim Arr As Variant
  4. Dim Sh
  5.   Set Sh = Sheets("数据")
  6.   With Sh
  7.     Hx = .Range("A65536").End(xlUp).Row
  8.     Lx = .Range("IV2").End(xlToLeft).Column
  9.     With .Range(.Cells(3, "A"), .Cells(Hx, Lx))
  10.        Arr = .Value
  11.       
  12.       .Sort Sh.Range("A3"), 1, Sh.Range("C3"), , 1
  13.       
  14.       '先排序,然后再删除重复项
  15.        .RemoveDuplicates Array(1, 3), xlNo
  16.       
  17.       .Value = Arr
  18.     End With
  19.   End With
  20. End Sub
复制代码


回复

使用道具 举报

 楼主| 发表于 2012-2-26 15:31 | 显示全部楼层
happym8888 发表于 2012-2-26 14:16
是不是A列+C列相同的行数只要留一行就行?

是的,谢谢老师关注。
回复

使用道具 举报

 楼主| 发表于 2012-2-26 15:35 | 显示全部楼层
本帖最后由 lhj323323 于 2012-2-26 15:37 编辑
无聊的疯子 发表于 2012-2-26 14:18
使用 07 和 10 版自带的 删除重复项功能(03)的没有这个功能

为方便你看到效果,特添加了两行代码


.RemoveDuplicates Array(1, 3), xlNo
对象不支持该属性和方法

还有,如果用户只有03版本的,则这个程序的适用性就不强了。





回复

使用道具 举报

发表于 2012-2-26 16:48 | 显示全部楼层
本帖最后由 无聊的疯子 于 2012-2-26 17:13 编辑
lhj323323 发表于 2012-2-26 15:35
.RemoveDuplicates Array(1, 3), xlNo
对象不支持该属性和方法


重新修改了一下。。这个应该可以

Sub 删除()
Dim D As Object
Dim H As Long, X As Long, Lx As Long
Dim arr As Variant
Dim S As String
  Set D = CreateObject("Scripting.dictionary")
  Application.ScreenUpdating = False
  With Sheet2
    H = .Range("A65536").End(xlUp).Row
    arr = .Range("A3:C" & H)
    H = 0
    For X = 1 To UBound(arr)
      S = arr(X, 1) & " " & arr(X, 3)
      If D.Exists(S) Then
        H = X + 2 - Lx
        .Rows(H).Delete
        Lx = Lx + 1
      Else
        D.Add (S), ""
      End If
    Next
    If Lx > 0 Then MsgBox "本次共计删除 " & Lx & " 条重复信息", , "完成"
  End With
  Application.ScreenUpdating = True
End Sub

回复

使用道具 举报

发表于 2012-2-26 17:23 | 显示全部楼层    本楼为最佳答案   
lhj323323 发表于 2012-2-26 15:35
.RemoveDuplicates Array(1, 3), xlNo
对象不支持该属性和方法

用这个 先排序后删除的 可以看到效果


  1. Sub 排序后删除()
  2. Dim Hx As Long, Lx As Integer
  3. Dim Arr As Variant
  4. Dim Sh As Worksheet
  5. Dim D As Object
  6. Dim S As String
  7.   Set Sh = Sheets("数据")
  8.   Set D = CreateObject("Scripting.dictionary")
  9.   Application.ScreenUpdating = False
  10.   With Sh
  11.     Hx = .Range("A65536").End(xlUp).Row
  12.     Lx = .Range("IV2").End(xlToLeft).Column
  13.     With .Range(.Cells(3, "A"), .Cells(Hx, Lx))
  14.        Crr = .Value
  15.       
  16.       .Sort Sh.Range("A3"), 1, Sh.Range("C3"), , 1
  17.       Hx = 0: Lx = 0
  18.       '先排序,然后再删除重复项
  19.       Arr = .Value
  20.       For X = 1 To UBound(Arr)
  21.         S = Arr(X, 1) & " " & Arr(X, 3)
  22.         If D.Exists(S) Then
  23.           Hx = X + 2 - Lx
  24.           Sh.Rows(Hx).Delete
  25.           Lx = Lx + 1
  26.         Else
  27.           D.Add (S), ""
  28.         End If
  29.       Next
  30.       If Lx > 0 Then MsgBox "本次共计删除 " & Lx & " 条重复信息", , "完成"
  31.       .Value = Crr
  32.     End With
  33.   End With
  34.   Application.ScreenUpdating = True
  35. End Sub
复制代码


这个直接删除的

  1. Sub 直接删除()
  2. Dim Hx As Long, Lx As Integer
  3. Dim Arr As Variant
  4. Dim Sh As Worksheet
  5. Dim D As Object
  6. Dim S As String
  7.   Set Sh = Sheets("数据")
  8.   Set D = CreateObject("Scripting.dictionary")
  9.   Application.ScreenUpdating = False
  10.   With Sh
  11.     Hx = .Range("A65536").End(xlUp).Row
  12.     Arr = .Range("A3:C" & Hx)
  13.       Hx = 0: Lx = 0
  14.       For X = 1 To UBound(Arr)
  15.         S = Arr(X, 1) & " " & Arr(X, 3)
  16.         If D.Exists(S) Then
  17.           Hx = X + 2 - Lx
  18.           .Rows(Hx).Delete
  19.           Lx = Lx + 1
  20.         Else
  21.           D.Add (S), ""
  22.         End If
  23.       Next
  24.       If Lx > 0 Then MsgBox "本次共计删除 " & Lx & " 条重复信息", , "完成"
  25.     End With
  26.   End With
  27.   Application.ScreenUpdating = True
  28. End Sub
复制代码

回复

使用道具 举报

 楼主| 发表于 2012-2-27 00:19 | 显示全部楼层
无聊的疯子 发表于 2012-2-26 17:23
用这个 先排序后删除的 可以看到效果

无聊的疯子老师:
三种程序测试都成功了!谢谢您!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-5 07:10 , Processed in 0.445767 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表