Excel精英培训网

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

[已解决]删除不尽问题

[复制链接]
发表于 2012-11-30 14:12 | 显示全部楼层 |阅读模式
这代码哪里出错,帮我改改,本来全部要删除,现在只删掉一部分,本来结果要全部删掉,谢谢。
ub 取数()
    Dim d As Object, arr(), ar
    Dim i&, j&, k&
        Set d = CreateObject("scripting.dictionary")
        For i = 3 To Cells(Rows.Count, "i").End(3).Row
            If Cells(i, "l") = "×" Then d(Cells(i, "i").Text) = ""
        Next i
        ar = Range("b1").Resize(Cells(Rows.Count, 1).End(3).Row, 3)
        For j = 1 To UBound(ar)
            If d.Exists(ar(j, 1)) = False Then
                k = k + 1
                ReDim Preserve arr(1 To 3, 1 To k)
                arr(1, k) = ar(j, 1)
                arr(2, k) = ar(j, 2)
                arr(3, k) = ar(j, 3)
            End If
        Next j
        Range("b1:d" & Cells(Rows.Count, "j").End(3).Row).ClearContents
        Range("b1").Resize(k, 3) = Application.Transpose(arr)
End Sub
最佳答案
2012-11-30 16:06
  1. Sub 取数()
  2.     Dim d As Object, arr(), ar
  3.     Dim i&, j&, k&
  4.         Set d = CreateObject("scripting.dictionary")
  5.         For i = 3 To Cells(Rows.Count, "i").End(3).Row
  6.             If Cells(i, "l") = "×" Then d(Cells(i, "i").Text) = ""
  7.         Next i
  8.         ar = Range("b1").Resize(Cells(Rows.Count, 2).End(3).Row, 3)
  9.         For j = 1 To UBound(ar)
  10.             If d.Exists(ar(j, 1)) = False Then
  11.                 k = k + 1
  12.                 ReDim Preserve arr(1 To 3, 1 To k)
  13.                 arr(1, k) = ar(j, 1)
  14.                 arr(2, k) = ar(j, 2)
  15.                 arr(3, k) = ar(j, 3)
  16.             End If
  17.         Next j
  18.         Range("b1:d" & Cells(Rows.Count, "b").End(3).Row).ClearContents
  19.         Range("b1").Resize(k, 3) = Application.Transpose(arr)
  20. End Sub
复制代码

Book16789.rar

40.88 KB, 下载次数: 8

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-11-30 14:31 | 显示全部楼层
程序要实现什么功能,直接说功能吧。
回复

使用道具 举报

发表于 2012-11-30 14:33 | 显示全部楼层
你I列做为字典的关键字就不行啦,I列基本上全是空的,如何写进字典。
回复

使用道具 举报

发表于 2012-11-30 14:35 | 显示全部楼层
  1. ar = Range("b1").Resize(Cells(Rows.Count, 1).End(3).Row, 3)
复制代码
你的A列全为空,行数不就变成1了。
回复

使用道具 举报

 楼主| 发表于 2012-11-30 14:42 | 显示全部楼层
hwc2ycy 发表于 2012-11-30 14:35
你的A列全为空,行数不就变成1了。

还是没有办法全部删除,再看看,谢谢!!!
回复

使用道具 举报

发表于 2012-11-30 14:57 | 显示全部楼层
你告诉我删除的依据是什么

回复

使用道具 举报

 楼主| 发表于 2012-11-30 15:03 | 显示全部楼层
hwc2ycy 发表于 2012-11-30 14:57
你告诉我删除的依据是什么

I3后面L3打叉,就把前面B2到D列 跟I3一样的T全部删除。
回复

使用道具 举报

发表于 2012-11-30 16:06 | 显示全部楼层    本楼为最佳答案   
  1. Sub 取数()
  2.     Dim d As Object, arr(), ar
  3.     Dim i&, j&, k&
  4.         Set d = CreateObject("scripting.dictionary")
  5.         For i = 3 To Cells(Rows.Count, "i").End(3).Row
  6.             If Cells(i, "l") = "×" Then d(Cells(i, "i").Text) = ""
  7.         Next i
  8.         ar = Range("b1").Resize(Cells(Rows.Count, 2).End(3).Row, 3)
  9.         For j = 1 To UBound(ar)
  10.             If d.Exists(ar(j, 1)) = False Then
  11.                 k = k + 1
  12.                 ReDim Preserve arr(1 To 3, 1 To k)
  13.                 arr(1, k) = ar(j, 1)
  14.                 arr(2, k) = ar(j, 2)
  15.                 arr(3, k) = ar(j, 3)
  16.             End If
  17.         Next j
  18.         Range("b1:d" & Cells(Rows.Count, "b").End(3).Row).ClearContents
  19.         Range("b1").Resize(k, 3) = Application.Transpose(arr)
  20. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-17 01:08 , Processed in 0.349344 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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