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正则匹配单元格符号,并按符号把单元格拆分行(这里是按第一列分行,分行是从活动单元格的行开始,分行前需要选择所有需要填充内容的列,否则需要后期手动填充)的更多相关文章

  1. excel vba 数据分析

    (Visual Basic Application) VBA(Visual Basic for Application)是Microsoft Office系列软件的内置编程语言,其语法结构与Visua ...

  2. Excel VBA语句集

    Excel VBA语句集 引子 最近批阅学生成绩,用Excel 处理学生成绩,用到VBA 提高办公效率.需要经常查阅VBA的一些用法 正文 定制模块行为 (1) Option Explicit '强制 ...

  3. Js使用word书签填充内容

    Js使用word书签填充内容 1.在模板文件中需要填充的地方插入书签 填充内容为:(|光标所在处) 填写书签名,点击添加完成: 2.使用js打开模板,获取书签位置,填充数据: function pri ...

  4. excel VBA把一个单元格内容按逗号拆分并依次替换到另一个单元格的括号里面(本题例子,把文本中的括号换成{答案}的格式,并按顺序填空)

    方法1:运用excel单元格拆分合并实现 思路:用VBA正则查询左侧括号个数,对右侧单元格逐一按逗号.顿号等符号分列,同时左侧按括号分列(分列只能按括号单边分列),分列完成后按要求合并,本题事例把括号 ...

  5. excel VBA返回选中单元格区域的行数、列数,以及活动单元格的行号和列号

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) '可以直接sub(),不然选择就会触发vba    Dim rows_coun ...

  6. 个人永久性免费-Excel催化剂功能第52波-相同内容批量合并单元格,取消合并单元格并填充内容

    在高级Excel用户群体中无比痛恨的合并单元格,在现实的表格中却阴魂不散的纠缠不断.今天Excel催化剂也来成为“帮凶”,制造更多的合并单元格.虽然开发出此功能,请使用过程中务必要保持节制,在可以称为 ...

  7. Excel VBA入门(八)单元格边框

    本文基于以下文件 http://pan.baidu.com/s/1nvJtsu9 (部分)内容预览: 1. 边框样式 Sub cell_format() Dim sht As Worksheet Di ...

  8. excel 根据单元格内容自动调整列宽

      excel 根据单元格内容自动调整列宽 CreateTime--2018年5月28日08:49:40 Author:Marydon 1.情景展示 单元格宽度超过了列宽 2.解决方案 第一步:同时选 ...

  9. Excel表格中无法中间插入新行列! 提示:在当前工作表的最后一行或列中,存在非空单元格,解决方案

    excel中新增行列时报错: 提示:在当前工作表的最后一行或列中,存在非空单元格,所以无法插入新行或新列.

随机推荐

  1. Mac 将 App 程序打包成为 dmg

    用最简单的打包方式,将自己开发的App打包成为DMG,实现共享分发,快速安装 1. 新建DMG 打开磁盘工具,新建DMG File->New Image->Blank Image 创建DM ...

  2. pycharm编辑器,各种设置及配置修改

    Pycharm中如何设置默认自动换行 只对当前文件有效的操作:菜单栏->View -> Active Editor -> Use Soft Wraps: 如果想对所有文件都有效,就要 ...

  3. PyCharm和JDK安装与配置(windows)

    原创 PyCharm和JDK安装与配置(windows) mb5cd21e691f31a关注0人评论2024人阅读2020-03-20 21:08:41   一.PyCharm安装与配置 PyChar ...

  4. Ansible_处理失败的任务

    一.Ansible处理任务失败 1.管理play中任务错误 1️⃣:Ansible评估任务的返回代码,从而确定任务是成功还是失败 2️⃣:通常而言,当任务失败时,Ansible将立即在该主机上中止pl ...

  5. Redis 快速集群环境搭建

    环境 Linux :centos 7 redis:redis-5.0.9 Redis 集群环境搭建步骤 早期 redis 版本集群环境搭建需要安装 ruby 运行环境,搭建步骤比较繁琐: redis ...

  6. Assignment Problem的若干思考

      最近受到南京一个同学的push,又开始了博客园写作之旅.欢迎大家联系我做代码实现工作,QQ:1198552514.权当赚点生活费~ 我的研究也经常用的Assignment problem,而且很多 ...

  7. 为何不选择lunix AIO

    对于块设备而言,linux可以使用同步IO.POSIX IO.linux AIO.io-uring,前俩者是linux的同步IO接口,后者是linux内核提供的异步io接口,linux AIO只支持直 ...

  8. 某SPI设备驱动引起的开关机压力测试死机问题一例

    环境 硬件平台:某ARM SoC 软件平台:Linux 问题现象:产品做开关机压力测试,发生死机. 分析 用crash工具解析两次死机dump信息,得到死机前的log如下.两次死机的backtrace ...

  9. java并发编程工具类JUC第三篇:DelayQueue延时队列

    DelayQueue 是BlockingQueue接口的实现类,它根据"延时时间"来确定队列内的元素的处理优先级(即根据队列元素的"延时时间"进行排序).另一层 ...

  10. 微信架构 & 支付架构(下)

    微信架构 & 支付架构(下) 3. 管理网络请求 首先看看原来 iOS 处理支付网络请求的缺陷: 原来支付的请求,都是通过一个单例网络中心去发起请求,然后收到回包后,通过抛通知,或者调用闭包的 ...