Excel精英培训网

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

小白求教各位大神一个问题

[复制链接]
发表于 2019-9-29 12:54 | 显示全部楼层 |阅读模式
本帖最后由 静静妹妹 于 2019-9-29 15:30 编辑



本人零基础现在求助各位大神帮忙做个宏,自己录了一个宏,但是执时是出错的 ,也百度看了别人的,换成类似的代码,还是出错,现在请大家帮忙写个代码,万分感谢。先把A列的地址列把是0或者#N/A等不是地址的去除只留下地址,再把其他时间列,把这样的时间1900/1/0 0:00:00和错误值去除留下正确的时间,有些行,地址是错误的,但后面的时间又是正确的,这种类型的也剔除,留下地址时间都正确的。这是我自己做的代码
ActiveSheet.Range("A1:FK" & Cells(Rows.Count, 2).End(xlUp).Row).AutoFilter Field:=6, Criteria1:="<>0", Operator:= _
        xlFilterValues
ActiveSheet.Range("A1:FK" & Cells(Rows.Count, 2).End(xlUp).Row).AutoFilter Field:=8, Criteria1:=Array(0, "1/0/1900"), Operator:= _
        xlFilterValues
        ActiveSheet.Range("a3:a" & ActiveSheet.UsedRange.Rows.Count).EntireRow.SpecialCells(xlVisible).Delete

副本 - 副本.zip

232.61 KB, 下载次数: 3

发表于 2019-9-29 13:42 | 显示全部楼层
s = [a100000].End(3).Row
For i = 2 To s
    If (Trim(Cells(i, 1)) = "0") Or IsNull(Cells(i, 1)) Then
        Cells(i, 1) = ""
    End If
    For k = 2 To 7
        If IsDate(Cells(i, k)) Then
           If Year(Cells(i, k)) < 2000 Then
              Cells(i, k) = ""
           End If
        Else
           Cells(i, k) = ""
        End If
    Next k
Next i

上述代码只是把不正确的数据转换成了“空白”,但并没有删除所在行。

评分

参与人数 1学分 +2 收起 理由
静静妹妹 + 2

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2019-9-29 14:24 | 显示全部楼层
hfwufanhf2006 发表于 2019-9-29 13:42
s = [a100000].End(3).Row
For i = 2 To s
    If (Trim(Cells(i, 1)) = "0") Or IsNull(Cells(i, 1)) Th ...

我需要的是把错误的删除了,请问能改为删除的吗
回复

使用道具 举报

发表于 2019-9-29 14:51 | 显示全部楼层
静静妹妹 发表于 2019-9-29 14:24
我需要的是把错误的删除了,请问能改为删除的吗

  删除当然可以,但我看你有些行,地址是错误的,但后面的时间又是正确的,所以我也不知道如何判断哪些行是要删除的。
  你需要给出删除的标准。
回复

使用道具 举报

 楼主| 发表于 2019-9-29 14:59 | 显示全部楼层
hfwufanhf2006 发表于 2019-9-29 14:51
删除当然可以,但我看你有些行,地址是错误的,但后面的时间又是正确的,所以我也不知道如何判断哪些行 ...

这样类型的也删除,要地址时间都正确的才要,先谢谢你了
回复

使用道具 举报

发表于 2019-9-29 15:40 | 显示全部楼层
本帖最后由 hfwufanhf2006 于 2019-9-29 15:41 编辑
静静妹妹 发表于 2019-9-29 14:59
这样类型的也删除,要地址时间都正确的才要,先谢谢你了

那你就测试下下面的代码,测试前先做个备份,万一删错了还能再还原。
Application.ScreenUpdating = False
s = [a100000].End(3).Row
For i = 2 To s
    bz = False
    If (Trim(Cells(i, 1)) = "0") Or IsNull(Cells(i, 1)) Then
        bz = True
    End If
    For k = 2 To 7
        If IsDate(Cells(i, k)) Then
           If Year(Cells(i, k)) < 2000 Then
              bz = True
           End If
        Else
           bz = True
        End If
    Next k
    If bz Then
       Rows(i).Delete
       i = i - 1
    End If
Next i
Application.ScreenUpdating = True


本质上与之前的代码没区别,只是添加了行删除:
    If bz Then
       Rows(i).Delete
       i = i - 1
    End If

只要是任何一列不符合要求,本行就会被删除。

评分

参与人数 1学分 +2 收起 理由
静静妹妹 + 2 神马都是浮云

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2019-9-29 15:51 | 显示全部楼层
hfwufanhf2006 发表于 2019-9-29 15:40
那你就测试下下面的代码,测试前先做个备份,万一删错了还能再还原。
Application.ScreenUpdating = Fal ...

不管行不行,都非常感谢您的帮助
回复

使用道具 举报

 楼主| 发表于 2019-9-29 16:33 | 显示全部楼层
静静妹妹 发表于 2019-9-29 15:51
不管行不行,都非常感谢您的帮助

不行呢,直接卡死然后全部删除
回复

使用道具 举报

发表于 2019-9-29 16:56 | 显示全部楼层
静静妹妹 发表于 2019-9-29 16:33
不行呢,直接卡死然后全部删除

确实没有严谨测试,有点想当然。增加了几行代码:
Application.ScreenUpdating = False
s = [a100000].End(3).Row
For i = 2 To s
    bz = False
    If (Trim(Cells(i, 1)) = "0") Or IsNull(Cells(i, 1)) Then
        bz = True
    End If
    For k = 2 To 7
        If IsDate(Cells(i, k)) Then
           If Year(Cells(i, k)) < 2000 Then
              bz = True
           End If
        Else
           bz = True
        End If
    Next k
    If bz Then
       Rows(i).Delete
       i = i - 1
       s = s - 1
       If i > s Then
          Exit For
       End If
    End If
Next i
Application.ScreenUpdating = True


增加的代码是:
       s = s - 1
       If i > s Then
          Exit For
       End If

没有给出合理的退出循环条件,所以就一直卡在那了。这个我实测的,应该没问题。

评分

参与人数 1学分 +2 收起 理由
静静妹妹 + 2 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2019-9-29 17:38 | 显示全部楼层
hfwufanhf2006 发表于 2019-9-29 16:56
确实没有严谨测试,有点想当然。增加了几行代码:
Application.ScreenUpdating = False
s = [a100000]. ...

真的是太感谢您了  我自己摸索了几天都没搞掂,高手就是高手哦,非常感谢您
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 17:56 , Processed in 0.413821 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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