批量对单元格区域内每个单元格中的数据按照一定的规则进行拆分是职场工作中经常碰到的操作。Excel数据选项卡中“分列”提供了基础的功能。能帮助用户通过鼠标快速分列数据。

本篇《神奇的VBA》将介绍几种通过Excel VBA编程来拆解分列单元格中的数据的思路。

案   例 

将下图中B列中的生产编号按照"-"号进行拆分,并将拆分后的非空数据逐一放入右边的列中。

注:表中B列,有约3万1千行数据。

思路1:也是所有初学者的思路, 逐一遍历单元格区域中的所有单元格, 将单元格中的文本进行分裂,并再次遍历分裂后的数组元素放置在右边的单元格中。

Sub 思路1()Dim str As StringDim x As IntegerDim rng As RangeSet rng = Range("B3:B" & Range("B1048576").End(xlUp).Row)For Each cell In rng    str = Replace(Replace(Replace(cell.Text, "---", "-"), "--", "-"), " ", "")    c = 3    r = cell.Row    For Each e In Split(str, "-")        Cells(r, c) = e        c = c + 1    NextNextSet rng = NothingEnd Sub

代码中使用多层嵌套的Replace函数对单元格数据进行了集中清洗,过滤掉了多余的“-”符号和多余的空格。

经过运行验证,思路1代码完全符合要求,代码也简短但是却遇到最大的问题,“速度太慢”。在思路1代码中加入Timer计时器,

Sub 思路1()t1 = Time........................................t2 = TimeMsgBox "用时" & DateDiff("s", t1, t2) & "秒"End Sub

重新运行,3万1千行数据,整体耗时约30秒左右,太慢了。慢的原因是思路1代码在大量地操作单元格区域。数据量少还可以,一旦量大就会遇到该瓶颈。

思路2:将单元格区域一次性放入动态数组中, 在数组中遍历,增加程序的运行效率,增强体验!

Sub 思路2()Dim str As StringDim x As IntegerDim arrDim brrarr = Range("B3:B" & Range("B1048576").End(xlUp).Row)n = UBound(arr) - LBound(arr) + 1ReDim brr(1 To n, 1 To 20)For r = 1 To UBound(arr, 1)    For c = 1 To UBound(arr, 2)        str = Replace(Replace(Replace(arr(r, c), "---", "-"), "--", "-"), " ", "")        x = 1        For Each e In Split(str, "-")                brr(r, x) = e                x = x + 1        Next    NextNextRange("C3").Resize(UBound(brr, 1), UBound(brr, 2)) = brrEnd Sub

上面的代码对VBA使用者有一定的要求,要求对数组有一定的认知,可以参阅《神奇的VBA》插件学习数组的相关知识。数组是很多编程语言中的必备的结构。数组的操作在内存中进行, 所以运行速度和效率上远比在单元格区域上操作要高的多。经过运行验证, 思路2的代码运行总速度由30秒转为1秒。

拆分文本的思路有很多。本篇神奇的VBA最后再提供另一个取巧的思路。

思路3:巧妙运用Excel自带的分列功能。通过录制宏,获取宏码, 稍作修改就可以重复使用。

Sub 思路3()Dim TargetRange As RangeSet TargetRange = Range("B3:B" & ActiveSheet.Rows.Count)TargetRange.TextToColumns Destination:=TargetRange.Cells(1).Offset(0, 1), DataType:=xlDelimited, _    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _    Semicolon:=False, Comma:=False, Space:=True, Other:=True, OtherChar:= _    "-", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), _    Array(6, 1), Array(7, 1), Array(8, 1)), TrailingMinusNumbers:=TrueSet TargetRange = NothingEnd Sub

录制的宏码,看着啰嗦。使用者可以灵活裁剪可选参数,精简代码。经过运行,速度也非常的快!1秒钟也搞定了。

本篇内容《神奇的VBA》就分享就到这里。如果您有更好的方法,欢迎留言告知。文末最后留一个问题。

在思路1和思路2中,嵌套运用了多个Replace函数替换多个字符。有没有更好的思路更高效更精简的替换方法吗?

 ------   结语   ------本篇的分享就到这里!上面三种思路的VBA代码实现方法具有一定的通用性,职场人可以直接拿来稍微修改即可为你所用。 如果觉得本篇主题对您的工作有帮助,还请关注点赞收藏转发至朋友圈点击“在看”分享给更多的人 ------   更多文章   ------《神奇的VBA》编程:另存工作表《神奇的VBA》编程:禁止修改Excel工作表名称《神奇的VBA》编程:监控表格单元格值的变化《神奇的VBA》编程:提取身份证号码中的性别信息《神奇的VBA》编程:随机生成彩票数据《神奇的VBA》编程:报表插入空白行《神奇的VBA》编程:工作表数据的拆分-001《神奇的VBA》编程:工作表数据的拆分-002Power Click插件发布-开放下载!神奇的vba

c修改datatable单元格的值_神奇的VBA编程:批量拆分单元格数据相关推荐

  1. vba 修改access表的链接地址_神奇的VBA编程:禁止修改Excel工作表名称

    职场中经常需要将做好的Excel表格/模板发给他人或者存放在公共路径上共享使用,此时需要禁止别人更改已经设定好的工作表名称.或者某些工作簿中有公式使用了对某些工作表的外部引用,如果工作表名称发生变化, ...

  2. java读取excel某个单元格的值_[转载]Java读取Excel中的单元格数据

    目前网上能找到的读取Excel表格中数据的两种比较好的方案:PageOffice好用开发效率高:POI免费.供大家参考,针对具体情况选择具体方案. 1. PageOffice读取excel impor ...

  3. 单元格数据为空格html,Excel将空单元格快速填充为上方单元格的值 excel如何让空白行填充上方一行相同的数据...

    EXCEL空白单元格自动填充为上一个非空单元格内容 先选中需要填写的空白单元格和它上面的非空单元格 然后同时按ctrl+G,会打开"定位"对话框. 在"定位"对 ...

  4. asp listview 单元格文字颜色_如何替换CAD表格中特定区域单元格中的文字?

    下面是本公众号文章分类目录,点击标题文字可打开分类文章列表: 安装卸载  异常.退出  文件及输入输出  基本操作技巧  各种设置及相关问题  界面和显示相关问题  快捷键  视图设置和调整  图层  ...

  5. hssfworkbook 单元格合并后宽度不生效_一起来学习Excel批量合并单元格的操作技巧...

    在我们日常工作中,利用Excel制作表格时,合并单元格是一个让人又爱又恨的东西,合并单元格后的数据处理会带来很多麻烦,比如求和.统计等计算工作(可查阅<让我们一起来干掉Excel合并单元格的那些 ...

  6. python 判断字典key是否存在_神奇的VBA字典,判断数据是否重复

    心胸开阔一点,不去争:得失看轻一点,不去争:功利心淡一点,不去争.一杯茶,满也好,少也好,不要浪费时间去争:浓也好,淡也好,其中自有值得品的味道.人生有顺境也有逆境,不可能处处是逆境:人生有巅峰也有谷 ...

  7. pandas 更改单元格的值_懂Excel轻松入门Python数据分析包pandas(二十四):连续区域...

    此系列文章收录在公众号中:数据大宇宙 > 数据处理 >E-pd 转发本文并私信我"python",即可获得Python资料以及更多系列文章(持续更新的) 经常听别人说 ...

  8. pandas 读取某一单元格的值_一个参数一个Excel表,让你玩转Pandas中read_excel()表格读取!...

    建议文末获取练习素材 一个个操作一遍 本文大纲 我觉得很有必要讲述这个文章,进行数据处理的第一步就是Python数据读取.但是你可能没想到,在进行数据读取的同时,我们其实可以配合相关参数做很多事儿,这 ...

  9. 修改list中对象的值_怎样在S7-200 SMART中监控和修改变量的值?

    我们知道在S7-300 PLC编程调试的时候,可以通过在Step7的变量表中监视和修改变量.那么在S7-200 SMART编程调试的时候,如果我们希望监控某个变量的值或者对其进行修改,应如何做呢?今天 ...

最新文章

  1. 快手日入数据量超 5120TB,数据管治如何做?
  2. mysql索引与优化
  3. ARP***绑定 linux/windows 下解决方案
  4. BJUI怎样对input添加自定义验证规则
  5. Reservoir Computing: Harnessing a Universal Dynamical System
  6. 链路聚合_配置EthTrunk链路聚合
  7. mouseChildren= false
  8. python邮件发送脚本
  9. 软件开发流程都是什么样的呢?
  10. 链表初始化typedef struct LNode{}LNode,*linklist的理解
  11. 使用加密解密技术和CA认证解决网络传输中的安全隐患
  12. Byond Compare软件
  13. FFMpeg 滤镜中英文对照
  14. VC/MFC使用OLE操作 EXCEL
  15. java转义字符之换行字符
  16. 快速理解绝对地址和相对地址
  17. OpenStack 计算节点关机,虚拟机状态解决办法
  18. 【Pytorch】区分detach()和torch.no_grad()
  19. S5PV210开发 -- I2C 你知道多少?(一)
  20. 银行项目外包专题系列之一:经常遇到的外包/驻场/实施/To B/POC这些概念

热门文章

  1. (转)jQuery 基础
  2. tensorflow 模型的保存和加载
  3. python三大主流框架的对比
  4. MySQL删库数据延迟恢复策略
  5. Vue与jQuery的区别:数据绑定
  6. HTTP一个 TCP 连接可以发多少个 HTTP 请求等面试题
  7. Linux的网络类型
  8. 计算机组成与结构第二章ppt,计算机组成原理(华科版)第二章 运算方法与运算器.ppt...
  9. 信息时代计算机应用技术,计算机应用技术
  10. java oracle数据备份_Java备份还原Oracle数据库