Excel内新增VB运行宏,自动为每一个单元格内的多行内容添加序号

1.先将Excel文件格式另存为(*.xlsm)格式

2.按下alt+F11键(或者进入工具-VB编辑器),选择Sheet1

3.输入代码

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim m As String
    Dim i As Long
    Dim j As Long
    Dim mm As String
    Dim lines() As String
    Dim cmt As Range
    Dim lineText As String
    
    On Error GoTo ExitHandler
    Application.EnableEvents = False
    
    ' ======================
    ' 范围控制示例:
    ' 单行生效   If Intersect(Target, Me.Rows(5)) Is Nothing Then GoTo ExitHandler
    ' 单列生效   If Intersect(Target, Me.Columns("B")) Is Nothing Then GoTo ExitHandler
    ' 多行生效   If Intersect(Target, Me.Range("5:10")) Is Nothing Then GoTo ExitHandler
    ' 多列生效   If Intersect(Target, Me.Range("I:J")) Is Nothing Then GoTo ExitHandler
    ' ======================
    
    ' 实际启用:I-J 列生效
    If Intersect(Target, Me.Range("I:J")) Is Nothing Then GoTo ExitHandler
    
    ' ======================
    ' 序号处理逻辑
    ' ======================
    For Each cmt In Target
        If cmt.Value <> "" Then
            m = cmt.Value
            lines = Split(m, Chr(10))
            mm = ""
            j = 0
            
            For i = LBound(lines) To UBound(lines)
                lineText = Trim(lines(i))
                
                ' 如果开头已经是数字+点+空格,则去掉旧编号
                If lineText Like "#.*" Then
                    lineText = Trim(Mid(lineText, InStr(lineText, ".") + 1))
                End If
                
                If lineText <> "" Then
                    j = j + 1
                    mm = mm & j & ". " & lineText & Chr(10)
                End If
            Next i
            
            ' 去掉末尾多余换行符
            cmt.Value = Left(mm, Len(mm) - 1)
        End If
    Next cmt
    
ExitHandler:
    Application.EnableEvents = True
End Sub

如果想控制某一行或者某一列生效这个规则可以修改代码内的此部分(本代码实际生效I-J列,我只需要用到这两列)

    ' 范围控制示例:
    ' 单行生效   If Intersect(Target, Me.Rows(5)) Is Nothing Then GoTo ExitHandler
    ' 单列生效   If Intersect(Target, Me.Columns("B")) Is Nothing Then GoTo ExitHandler
    ' 多行生效   If Intersect(Target, Me.Range("5:10")) Is Nothing Then GoTo ExitHandler
    ' 多列生效   If Intersect(Target, Me.Range("I:J")) Is Nothing Then GoTo ExitHandler

3.点击运行按钮,输入名称,点击运行即可

4.然后就能在Excel表格里面自动为每个表格里面自动新增序列号(根据VB脚本里面设置的行和列来决定)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值