Excel VBA 插入空行脚本
学习笔记作者:admin日期:2025-06-16点击:191
摘要:编写一个 VBA 脚本,根据当前行的床位数,在其下方插入相应数量的空行,并保留房间号。
Excel VBA 插入空行脚本
编写一个 VBA 脚本,根据当前行的床位数,在其下方插入相应数量的空行,并保留房间号。
功能描述
假设你的数据如下(从第2行开始):
| 房间号 | 床位数 | 床位号 | 
|---|---|---|
| 05 | 3 | |
| 06 | 2 | 
脚本会遍历“床位数”列,根据床位数在当前行下方插入相应数量的空行。
VBA 代码
Sub InsertBedRows()
    Dim ws As Worksheet
    Set ws = ActiveSheet  ' 当前工作表
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row  ' 获取最后一行(基于A列)
    Dim i As Long
    Dim bedCount As Long
    Dim insertRange As Range
    Application.ScreenUpdating = False  ' 提升速度
    ' 从下往上循环,避免插入行影响后续行号
    For i = lastRow To 2 Step -1
        bedCount = ws.Cells(i, 2).Value  ' B列是床位数
        
        If IsNumeric(bedCount) And bedCount > 1 Then
            ' 在当前行下方插入 (bedCount - 1) 行
            ws.Rows(i + 1 & ":" & i + bedCount - 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            
            ' 可选:复制房间号到新行(只保留第一行有值)
            ws.Range(ws.Cells(i, 1), ws.Cells(i + bedCount - 1, 1)).MergeCells = False
            ws.Cells(i, 1).Copy ws.Range(ws.Cells(i, 1), ws.Cells(i + bedCount - 1, 1))
            
            ' 可选:清空床位数列(如果你只需要保留第一行)
            ws.Range(ws.Cells(i, 2), ws.Cells(i + bedCount - 1, 2)) = ""
        End If
    Next i
    Application.ScreenUpdating = True
    MsgBox "完成插入空行!"
End Sub
使用方法
- 按 ALT + F11 打开 VBA 编辑器;
- 点击菜单栏「插入」→「模块」;
- 把上面的代码粘贴进去;
- 回到 Excel,按 ALT + F8,运行宏 InsertBedRows。
效果示例
原始数据:
| 房间号 | 床位数 | 床位号 | 
|---|---|---|
| 05 | 3 | |
| 06 | 2 | 
运行后变成:
| 房间号 | 床位数 | 床位号 | 
|---|---|---|
| 05 | 3 | |
| 05 | ||
| 05 | ||
| 06 | 2 | |
| 06 |