Excel精英培训网

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

[已解决]通过VBA实现对EXCEL查找,满足条件的保留,其余删除

[复制链接]
发表于 2015-9-25 11:13 | 显示全部楼层 |阅读模式
本帖最后由 sj_dcy 于 2015-9-25 14:39 编辑

对Excel里数据进行查找,满足PartsData 的,将PartsData及它附属的单元格 保留。其余全部删除。
最佳答案
2015-9-25 11:31
  1. Sub tt()
  2.     Dim Delrng As Range
  3.     Set Delrng = Rows(65536)
  4.     arr = Range("a1:a" & [a65536].End(3).Row)
  5.     For i = 1 To UBound(arr)
  6.         If InStr(arr(i, 1), "PartsData") = 0 Then
  7.             Set Delrng = Union(Delrng, Rows(i))
  8.         Else
  9.             For k = i + 1 To UBound(arr)
  10.                 If Left(Trim(arr(k, 1)), 1) = "[" Then Exit For
  11.             Next
  12.             If k < UBound(arr) Then i = k - 1 Else i = k
  13.         End If
  14.     Next
  15.     Delrng.Delete
  16. End Sub
复制代码
Untitled.png

test.rar

13.21 KB, 下载次数: 3

发表于 2015-9-25 11:31 | 显示全部楼层    本楼为最佳答案   
  1. Sub tt()
  2.     Dim Delrng As Range
  3.     Set Delrng = Rows(65536)
  4.     arr = Range("a1:a" & [a65536].End(3).Row)
  5.     For i = 1 To UBound(arr)
  6.         If InStr(arr(i, 1), "PartsData") = 0 Then
  7.             Set Delrng = Union(Delrng, Rows(i))
  8.         Else
  9.             For k = i + 1 To UBound(arr)
  10.                 If Left(Trim(arr(k, 1)), 1) = "[" Then Exit For
  11.             Next
  12.             If k < UBound(arr) Then i = k - 1 Else i = k
  13.         End If
  14.     Next
  15.     Delrng.Delete
  16. End Sub
复制代码
回复

使用道具 举报

发表于 2015-9-25 11:31 | 显示全部楼层
请看附件。

test.rar

28.46 KB, 下载次数: 4

回复

使用道具 举报

 楼主| 发表于 2015-9-25 13:17 | 显示全部楼层
grf1973 发表于 2015-9-25 11:31

你好  要是我想实现 除了 PartsData    PositionData 及其附属单元格 其他都删除,怎么实现。不需要通过点击按钮实现,谢谢了。

ttest.rar

158.87 KB, 下载次数: 1

回复

使用道具 举报

发表于 2015-9-25 14:15 | 显示全部楼层
什么叫不需要通过点击按钮实现?可以在打开工作簿时自动运行下面代码。
  1. Sub tt()
  2.     Dim Delrng As Range
  3.     Set Delrng = Rows(65536)
  4.     arr = Range("a1:a" & [a65536].End(3).Row)
  5.     For i = 1 To UBound(arr)
  6.         If InStr(arr(i, 1), "PartsData") = 0 And InStr(arr(i, 1), "PositionData") = 0 Then
  7.             Set Delrng = Union(Delrng, Rows(i))
  8.         Else
  9.             For k = i + 1 To UBound(arr)
  10.                 If Left(Trim(arr(k, 1)), 1) = "[" Then Exit For
  11.             Next
  12.             If k < UBound(arr) Then i = k - 1 Else i = k
  13.         End If
  14.     Next
  15.     Delrng.Delete
  16. End Sub
复制代码
回复

使用道具 举报

发表于 2015-9-25 14:19 | 显示全部楼层
这样一打开文件就把多余的行删掉了。
  1. Private Sub Workbook_Open()
  2.     Dim Delrng As Range
  3.     With Sheet1
  4.         Set Delrng = .Rows(65536)
  5.         arr = .Range("a1:a" & .[a65536].End(3).Row)
  6.         For i = 1 To UBound(arr)
  7.             If InStr(arr(i, 1), "PartsData") = 0 And InStr(arr(i, 1), "PositionData") = 0 Then
  8.                 Set Delrng = Union(Delrng, .Rows(i))
  9.             Else
  10.                 For k = i + 1 To UBound(arr)
  11.                     If Left(Trim(arr(k, 1)), 1) = "[" Then Exit For
  12.                 Next
  13.                 If k < UBound(arr) Then i = k - 1 Else i = k
  14.             End If
  15.         Next
  16.         Delrng.Delete
  17.     End With
  18. End Sub
复制代码

ttest.rar

265.42 KB, 下载次数: 7

回复

使用道具 举报

 楼主| 发表于 2015-9-25 14:36 | 显示全部楼层
grf1973 发表于 2015-9-25 14:15
什么叫不需要通过点击按钮实现?可以在打开工作簿时自动运行下面代码。

这一个就行,谢谢了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 10:41 , Processed in 4.219959 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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