ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1821|回复: 13

[求助] 求助一个关于VBA执行顺序的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-1-22 21:36 | 显示全部楼层 |阅读模式
我想要做的是将A列中带有指定字符串的,提取到B列中,并且判断,如果B列值为空则删除当前这一列。并且删除B列的重复值

但是,不知道是什么原因,如果B列值为空则删除当前这一列,这个语句没有执行。有大侠可以给点帮助吗


实际运行结果

实际运行结果

想要得到的.jpg

想要得到的.jpg

第二步:.zip

37.26 KB, 下载次数: 9

求助的excel

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-23 09:36 | 显示全部楼层
是不是把x设置为全局变量,执行完一次查找后,call一次删除就行

TA的精华主题

TA的得分主题

发表于 2019-1-23 10:55 | 显示全部楼层
  1. Sub qc2()
  2. Dim i As Long, j As Long, a, e, t, k As Long, arr
  3. Columns("k:l").ClearContents
  4. arr = Range("a1:a" & Range("a" & Rows.Count).End(3).Row)
  5. ReDim arr1(1 To UBound(arr), 1 To 2)
  6. For i = 1 To UBound(arr)
  7.     If InStr(arr(i, 1), ".edf") > 0 Then
  8.         a = Split(arr(i, 1), Chr(34))
  9.         j = j + 1
  10.         For Each e In a
  11.             If InStr(e, ".edf") > 0 Then
  12.                 arr1(j, 2) = e
  13.             End If
  14.         Next
  15.         arr1(j, 1) = arr(i, 1)
  16.     End If
  17. Next
  18. Range("k1").Resize(UBound(arr1), 2) = arr1
  19. Columns("l:l").Select
  20. Range("K:L").RemoveDuplicates Columns:=2, Header:=xlNo
  21. End Sub
复制代码



k m列数据 自己调整位置。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-1-23 11:46 | 显示全部楼层
  1. Sub Test()
  2.     Dim shSource As Worksheet, shResult As Worksheet
  3.     Dim arr As Variant, objDic As Object
  4.     Dim strTemp As String, strKey As String
  5.     Dim objReg As Object, objMatchs As Object, objMatch As Object
  6.    
  7.     Set shSource = Sheets("实际运行结果")
  8.     Set shResult = Sheets("想要的结果")
  9.    
  10.     Set objDic = CreateObject("Scripting.Dictionary")
  11.    
  12.     arr = shSource.UsedRange
  13.     arr = Application.WorksheetFunction.Index(arr, 0, 1)
  14.     arr = Application.WorksheetFunction.Transpose(arr)
  15.     strTemp = Join(arr, vbCrLf)
  16.    
  17.     Set objReg = CreateObject("VBScript.RegExp")
  18.     With objReg
  19.         .Global = True
  20.         .Pattern = ".*?([0-9A-z\-]+\.edf).*"
  21.     End With
  22.     Set objMatchs = objReg.Execute(strTemp)
  23.    
  24.     For Each objMatch In objMatchs
  25.         strKey = objMatch.subMatches(0)
  26.         If Not objDic.Exists(strKey) Then
  27.             objDic(strKey) = objMatch
  28.         End If
  29.     Next
  30.    
  31.     shResult.Range("A1").Resize(objDic.Count, 1) = Application.WorksheetFunction.Transpose(objDic.items)
  32.     shResult.Range("B1").Resize(objDic.Count, 1) = Application.WorksheetFunction.Transpose(objDic.keys)
  33. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-23 14:14 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-1-23 14:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
TB肥仔 发表于 2019-1-23 14:14
你的这个语句我看的不是很明白

正则 分组捕获

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-23 14:34 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-1-23 14:36 | 显示全部楼层
TB肥仔 发表于 2019-1-23 14:34
这样啊,但是你的这个不能运行啊

你把附件中 “想要的结果” 这张有清空,再运行一下看看?

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-23 14:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lsdongjh 发表于 2019-1-23 14:36
你把附件中 “想要的结果” 这张有清空,再运行一下看看?

cl列的数据也是有用处的,这个可以加进去吗

TA的精华主题

TA的得分主题

发表于 2019-1-23 15:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
TB肥仔 发表于 2019-1-23 14:54
cl列的数据也是有用处的,这个可以加进去吗

你的D列数据不是一个 内容吗?自己填充一下就行啊
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-27 00:53 , Processed in 0.040183 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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