VBA 单一单元格的多行内容拆分为多行
多行拆分需求
假如一个单元格包含多行信息,比如说一些唯一的ID信息,我需要将该列的这些多行信息进行拆分,将其拆分为多行,其余列信息进行复制。例如如下图所示的示例。
可以看到,该Excel表格的A列每一行都有两行的数据,而我们的目的就是把这七行进行拆分为十四行,每一行包含单元格内单行的一条信息,其余列的文件进行复制,如下图所示。
解决方案
在这里提供一个可设定的解决方案,也是一个SUB子程序。源代码如下。
Sub SplitCopyValues()Dim arr As VariantDim rcount As LongDim ArrayLength As Integerrcount = Cells(Rows.Count, "A").End(3).Row 'Get the row num of last rowFor r = rcount To 1 Step -1 'Traversearr = Split(Cells(r, "A").Value, Chr(10)) 'split each item by spaceArrayLength = UBound(arr) - LBound(arr) + 1 'calculate the array lengthFor i = 1 To ArrayLength - 1Rows(r & ":" & r).CopyRows(r + 1 & ":" & r + 1).Insert Shift:=xlDown 'insert the copied one into row+1Next iCells(r, "A").Resize(ArrayLength, 1).Value = WorksheetFunction.Transpose(arr) 'Filling in the Created rowsErase arr 'delete the arr for new oneNext rApplication.CutCopyMode = FalseEnd Sub
SplitCopyValues主要就是满足了上述的多行拆分需求。我加了英文注释已经附在了代码里,非常简单明了,此外,为了理解和大家更改方便,我再用中文对代码进行详细注释。
在这里要注意的是Cells(Rows.Count, “A”).End(3).Row 中的3指的是向上搜索直到找到数据不同的消失位置。End()括号中的1、2、3、4分别代表向左、向右、向上、向下。END(x)表示从指定的单元格向左、向右、向上、向下最后一个有效RANGE。
下面是中文注释的代码:
Sub SplitCopyValues() Dim arr As Variant ' arr 存储要分裂的单元格的内容Dim rcount As Long ' rount 就是有效的行数Dim ArrayLength As Integer ' arr的长度,n行长度就为n'Get the row num of last row 拿到有效的行数,具体操作为:Cells(Rows.Count," A ") 拿到A列的工作簿的最底下一个单元格(包括空)'.End(3) 的目的是从最底下的单元格向上寻找,找到第一个非空的单元格'.Row的目的是记录刚刚那个单元格的行数rcount = Cells(Rows.Count, "A").End(3).RowFor r = rcount To 1 Step -1 'Traverse 对每行的行数进行循环,从最后往前进行遍历arr = Split(Cells(r, "A").Value, Chr(10)) 'split each item by space 将该单元格以Chr(10)为分隔符进行分割ArrayLength = UBound(arr) - LBound(arr) + 1 'calculate the array length 计算分割后的ARR的长度For i = 1 To ArrayLength - 1 '对Arr内的每个元素进行遍历Rows(r & ":" & r).Copy '将该行进行复制Rows(r + 1 & ":" & r + 1).Insert Shift:=xlDown 'insert the copied one into row+1 '把复制的行插入到该单元格所在行的下一行Next iCells(r, "A").Resize(ArrayLength, 1).Value = WorksheetFunction.Transpose(arr) 'Filling in the Created rows 将arr转置为列后插入到刚刚生成的哪些新的行中,也就是把A列填好Erase arr 'delete the arr for new oneNext rApplication.CutCopyMode = False '这是为了防止大规模复制粘贴而弹出系统默认的对话框End Sub
希望该方法可以帮到你,有问题评论区见,我很快会回复。
VBA 单一单元格的多行内容拆分为多行相关推荐
- 指定单元格里面的,内容发生变化,触发事件,调用VBA代码。
指定单元格里面的,内容发生变化,触发事件,调用VBA代码._sun0322-CSDN博客_单元格变化触发vba 目录 ■通过改变一个单元格的内容,出发一个事件,根据改变的内容,进行相应的处理. ■扩展 ...
- easypoi导出一对多,合并单元格,且根据内容自适应行高
easypoi导出一对多,合并单元格,且根据内容自适应行高 EasyPoi一对多导出 一.pom引入依赖 二.导出实体类 excelPoi常用注解说明 @Excel注解 @ExcelCollectio ...
- VBA,单元格处理,数据复制,格式设置,折线图,图表属性设置
首先说一下.xlsm文件和.xlsx文件的区别: .xlsx文件只能存储数据,不能存储对数据进行处理的VB代码,而.xlsm文件既可以存储数据,又可以存储代码. 新建一个.xlsm文件(打开.xlsx ...
- 单元格内多个姓名拆分成一列_把订单按货品拆分成多行
办公的小伙伴们,今天小编来和大家分享:如何将一个单元格中有多行数据拆分成多行. 看下图:要把订单按货品拆分成多行明细. 下面给出几种不同的方法. 方法一:借word来拆分内容 Step1:把表格复制到 ...
- 基于注解和EasyExcel指定单元格下拉选内容
基于注解和EasyExcel指定单元格下拉选内容 1.场景描述 要求基于EasyExcel进行导出,有的单元格的内容必须是通过下拉选内容进行编辑,以便于后续修改导入,规避用户随意录入数据. 2.编写测 ...
- 10, excel vba 修改单元格的颜色
看数据总是很累的,一堆密密麻麻的.哪个数据才是我想要的呢? 比如一列里有各种各样的数据,我想知道哪些单元格的数据大于11的? 又比如一列里有各种各样的数据,我想知道哪些单元格的数据大于111的? 这里 ...
- VBA查找单元格内指定文字并标红加粗
VBA查找单元格内指定文字并标红加粗 功能: 选中想要查找的单元格,在函数内点击运行,实现将指定的文字标红加粗的功能 bug: 指定文字会区分大小写,如何让它不区分大小写? 改进 将是否加粗,和标记的 ...
- Excel VBA 之单元格格式
一个频繁的任务就是给选中的单元格或区域设置格式.你的VBA过程可能需要查明某个具体单元格的格式.我们可以使用NumberFormat属性来找回单元格格式: ?Range("A1") ...
- excel如何快速自动让空白单元格填充上一行内容
今天跟大家分享一下excel如何快速自动让空白单元格填充上一行内容 1.今天一下图为例跟大家演示一下空白单元格填充上一行内容. 2.选中要填充内容的单元格区域 3.点击下图选项(Excel工具箱,百度 ...
最新文章
- 利用Python实现十大经典排序算法(附代码流程)
- Axure RP pro 6.5 密钥
- linux 文件属性文件权限
- 白话Elasticsearch61-进阶篇之基于Term Vectors深入探查数据的情况
- 如何将低频内容应用转化为高频应用?
- DinamicX 详解:如何让盲人也能在线购物?
- 大四课程设计之基于RFID技术的考勤管理系统(三)数据库设计
- 集群环境下定时调度的解决方案之Quartz集群
- python爬虫 同花顺_python 爬虫--同花顺-使用代理
- 网络安全课第二节 XSS漏洞检测防御
- 【Arduino实验03 智能红绿灯】
- SharePoint 2013 安装中间出错了怎么办? 每一次安装都是一段曲折的路【1603(0x643) 】...
- 悲催:一个80后程序员的爱情故事【视频】-但愿我不是那个陈旭阳!55...
- 学习STM32的理由
- PC按键精灵读取txt文本出现乱码怎么办?按键精灵手机助手读取txt文本中文变问号怎么办?
- 《鱿鱼游戏》开场了|谁才是影评人的御用写作工具
- 云服务器及其存储性能测试方法
- vue 防止多次点击重复提交v-preventReClick
- Ubuntu 7.04--桌面
- ROS统计在线用户数脚本