excel VBA正则匹配单元格符号,并按符号把单元格拆分行(这里是按第一列分行,分行是从活动单元格的行开始,分行前需要选择所有需要填充内容的列,否则需要后期手动填充)
Sub W()
' MsgBox "行数:" & Selection.Rows.Count
Dim rows_count As Integer
Dim rows_id As Integer
Dim column_count As Integer
column_count = Selection.Columns.Count '获取选择区域的列数
'MsgBox column_count '打印列数
rows_id = ActiveCell.Row '获取活动单元格行id,获取列id的是ActiveCell.Count
rows_count = Selection.Rows.Count '获取选择区域的行数
Dim str As String
'str = InputBox("是否进行分列:")
'MsgBox rows_count
'MsgBox "行号:" & ActiveCell.Row
Dim h
Dim j As Integer
j = 0 '参数用于填充空格参数作用为使每次拆分都能指向原来需要拆分的行id,因为每次拆分都会影响下一个需要拆分行的行id,所以需要设置拆分后下一个需要拆分的行id应为上一个行id+拆分时候插入的行数
Dim n1 As Integer '分行单元格在第几列
Dim m1 As Integer '填充到的列
Dim p As Integer '所有内容的列数,这里设置所有列数等于单元格选中的列数,下面填充的列数等于这个列数
Dim p2 As Integer
n1 = 1 'InputBox("需要根据第几列分行:"),如果需要按其它列分行,可修改参数
m1 = 1 'InputBox("需要填充到第几列:"),需要填充到分行的列,所有次参数需要与n1相等
p = column_count 'InputBox("所有内容的列数:")
p2 = rows_id 'InputBox("从第几行开始分:")
'p3 = InputBox("按什么分行:")
'For i = p2 To Range("a65536").End(xlUp).Row '如果不能完全填充,加大这里的行数
For i = p2 To 10000 'p2 + p
i = i '+ j 不需要加j,否则后面需要置0,加j和不加
'MsgBox i
Dim zhengze, Rng
Rng = Cells(i, n1) '把需要拆分的行赋值给Rng,用于正则检索是否存在需要分行的符号
Set regx = CreateObject("vbscript.regexp") 'VBA正则模块
With regx
.Global = True '匹配所有结果集
.Pattern = "[,,\\/、 ;:+-]+" '写正则表达式
Set mat = .Execute(Rng)
If .test(Rng) Then '匹配到结果则执行拆分,否则不拆分
For Each mg In mat '把匹配到的符号,通过循环按每个符号依次拆分,直到把匹配到的值都拆分完
zhengze = mg
p3 = mg
h = Split(Cells(i, n1), p3)
If UBound(h) > 0 Then
Rows(i + 1).Resize(UBound(h)).Insert '在i+1行插入UBound(h)个空白行
Cells(i, m1).Resize(UBound(h) + 1, 1) = Application.Transpose(h) '在i行m1列以列形式填充拆分后的值
j = UBound(h)
For num = 1 To j '因为i的值依次加1循环,需要在第一次循环拆分时就填充新加的空行,例:第一行拆分成3行,需要通过两次循环填充新加的空行,当检测第二行时,由于不需要拆分,就不会进入到这里,不会执行填充操作,假如不需要这层循环,空行就不会被填充。
For column = 1 To p '此循环为了控制粘贴值的列数,有多少列值需要复制就to 多少,哪里是填充拆分值的列,就在内层if处理,不进行向下填充
If column = m1 Then
Cells(i, column) = Cells(i, column) '拆分列等于原单元格的值
Else
Cells(i + num, column) = Cells(i, column) '其它列即插入的空单元格等于上一个单元格的值
End If
Next
Next
Else
Cells(i, m1) = Application.Transpose(h)
'j = 0 '按第一个值如逗号分完后,需要重置为0,因为需要重新从第一个单元格拆出来的第一个值检测是否还有其它拆分的符号
End If
Next
Else
Cells(i, m1) = Cells(i, m1)
'j = 0 '当一开始就检测不到需要拆分行的符号,需要重设参数,否则受上一个拆分值的影响,会跳过一些行不进行拆分,比如第一行拆了3行,第二行不需要拆,这时候原来的第三行的行id为5,如果此时不重置参数j,就会跳到行id为7的行进行拆分,因为参数j会变成1,导致6+1变为7
End If
End With
Next
End Sub
excel VBA正则匹配单元格符号,并按符号把单元格拆分行(这里是按第一列分行,分行是从活动单元格的行开始,分行前需要选择所有需要填充内容的列,否则需要后期手动填充)的更多相关文章
- excel vba 数据分析
(Visual Basic Application) VBA(Visual Basic for Application)是Microsoft Office系列软件的内置编程语言,其语法结构与Visua ...
- Excel VBA语句集
Excel VBA语句集 引子 最近批阅学生成绩,用Excel 处理学生成绩,用到VBA 提高办公效率.需要经常查阅VBA的一些用法 正文 定制模块行为 (1) Option Explicit '强制 ...
- Js使用word书签填充内容
Js使用word书签填充内容 1.在模板文件中需要填充的地方插入书签 填充内容为:(|光标所在处) 填写书签名,点击添加完成: 2.使用js打开模板,获取书签位置,填充数据: function pri ...
- excel VBA把一个单元格内容按逗号拆分并依次替换到另一个单元格的括号里面(本题例子,把文本中的括号换成{答案}的格式,并按顺序填空)
方法1:运用excel单元格拆分合并实现 思路:用VBA正则查询左侧括号个数,对右侧单元格逐一按逗号.顿号等符号分列,同时左侧按括号分列(分列只能按括号单边分列),分列完成后按要求合并,本题事例把括号 ...
- excel VBA返回选中单元格区域的行数、列数,以及活动单元格的行号和列号
Private Sub Worksheet_SelectionChange(ByVal Target As Range) '可以直接sub(),不然选择就会触发vba Dim rows_coun ...
- 个人永久性免费-Excel催化剂功能第52波-相同内容批量合并单元格,取消合并单元格并填充内容
在高级Excel用户群体中无比痛恨的合并单元格,在现实的表格中却阴魂不散的纠缠不断.今天Excel催化剂也来成为“帮凶”,制造更多的合并单元格.虽然开发出此功能,请使用过程中务必要保持节制,在可以称为 ...
- Excel VBA入门(八)单元格边框
本文基于以下文件 http://pan.baidu.com/s/1nvJtsu9 (部分)内容预览: 1. 边框样式 Sub cell_format() Dim sht As Worksheet Di ...
- excel 根据单元格内容自动调整列宽
excel 根据单元格内容自动调整列宽 CreateTime--2018年5月28日08:49:40 Author:Marydon 1.情景展示 单元格宽度超过了列宽 2.解决方案 第一步:同时选 ...
- Excel表格中无法中间插入新行列! 提示:在当前工作表的最后一行或列中,存在非空单元格,解决方案
excel中新增行列时报错: 提示:在当前工作表的最后一行或列中,存在非空单元格,所以无法插入新行或新列.
随机推荐
- Spring Cloud Alibaba(11)---Sentinel+Nacos持久化
Sentinel+Nacos持久化 有关Sentinel之前有写过两篇 Spring Cloud Alibaba(9)---Sentinel概述 Spring Cloud Alibaba(10)--- ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十三)——istio+dapr构建多运行时服务网格之生产环境部署
之前所有的演示都是在docker for windows上进行部署的,没有真正模拟生产环境,今天我们模拟真实环境在公有云上用linux操作如何实现istio+dapr+电商demo的部署. 目录:一. ...
- calico官网网络拓扑实现:基于eNSP与VMVare
Calico官网提供了两种网络设计模式: AS per rack: 每个rack(机架)组成一个AS,每个rack的TOR交换机与核心交换机组成一个AS AS per server: 每个node做为 ...
- [bug] Flask:jinja2.exceptions.UndefinedError: 'None' has no attribute 'id'
问题 Python Flask做的购物网站,添加购物车时,提示错误 解决 检查发现是MySQL中不正常的空数据导致,删除此条记录即可 参考 https://www.jb51.cc/python/186 ...
- gitlab的CI/CD实现
环境准备: gitlab账号公网账号:代码仓库和编译器 目标机:装有docker和gitlab-runner环境的服务器(Linux或类unix机器,我使用的时centos 项目代码:testgola ...
- LNMP环境搭建与配置
lnmp就是 Linux+nginx + mysql + PHP,把Apache替换为Nginx: 这里我用到的Linux环境为为centos,接下来就分步骤来一步步安装及测试. 一.安装php 参考 ...
- Docker学习(1) 初识
Docker的使用场景 1 使用Docker容器开发,测试,部署服务 2 创建隔离的运行环境 3 搭建测试环境 4 构建多用户的平台及服务(PaaS)基础设施 5 提供软件即服务(SaaS)应用程序 ...
- Go语言流程控制05--defer延时执行
package main import "fmt" func xingzuoZhensuo() { var birthday string fmt.Println("请输 ...
- CVPR2020行人重识别算法论文解读
CVPR2020行人重识别算法论文解读 Cross-modalityPersonre-identificationwithShared-SpecificFeatureTransfer 具有特定共享特征变换 ...
- 视频教学动作修饰语:CVPR2020论文解析
视频教学动作修饰语:CVPR2020论文解析 Action Modifiers: Learning from Adverbs in Instructional Videos 论文链接:https://a ...