Vba 在空行中填写部门编号和部门总数

Vba 在空行中填写部门编号和部门总数,vba,excel,Vba,Excel,我有一个文件,当B列的值改变时,我想在其中插入三行,然后我想在我插入的第一个空白行中写上“Department Total:”,并想在第三个空白行中连接(“Department”、$B5、“#”)。 我想对数据中的每一组空白行执行此操作。 我可以为第三行的连接部分设置此选项。但无法在每套表格的第一个空白行中填写“部门总计” 我使用此代码在B列的值更改时插入行:- Sub InsertRowsAtValueChange() Dim Rng As Range Dim WorkRng

我有一个文件,当B列的值改变时,我想在其中插入三行,然后我想在我插入的第一个空白行中写上“Department Total:”,并想在第三个空白行中连接(“Department”、$B5、“#”)。 我想对数据中的每一组空白行执行此操作。 我可以为第三行的连接部分设置此选项。但无法在每套表格的第一个空白行中填写“部门总计”

我使用此代码在B列的值更改时插入行:-

Sub InsertRowsAtValueChange()

    Dim Rng As Range
    Dim WorkRng As Range
    On Error Resume Next
    xTitleId = "Enter the Range"
    Set WorkRng = Application.Selection
    Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
    Application.ScreenUpdating = False
    For i = WorkRng.Rows.Count To 2 Step -1
        If WorkRng.Cells(i, 2).Value <> WorkRng.Cells(i - 1, 2).Value Then
            WorkRng.Cells(i, 2).EntireRow.Insert
            Range("A" & i).Value = "=CONCAT(""Department "",R[1]C[1],""#"")"
            WorkRng.Cells(i, 2).EntireRow.Insert
            WorkRng.Cells(i, 2).EntireRow.Insert
        End If
    Next
    Application.ScreenUpdating = True
    End Sub
Sub InsertRowsAtValueChange()
变暗Rng As范围
变暗工作范围
出错时继续下一步
xTitleId=“输入范围”
Set WorkRng=Application.Selection
设置WorkRng=Application.InputBox(“范围”,xTitleId,WorkRng.Address,类型:=8)
Application.ScreenUpdating=False
对于i=WorkRng.Rows.Count到2步骤-1
如果WorkRng.Cells(i,2).Value为WorkRng.Cells(i-1,2).Value,则
工作单元格(i,2).EntireRow.Insert
Range(“A”&i).Value=“=CONCAT(“部门”),R[1]C[1],“#”)
工作单元格(i,2).EntireRow.Insert
工作单元格(i,2).EntireRow.Insert
如果结束
下一个
Application.ScreenUpdating=True
端接头
但我无法在这些空行中编写上述详细信息的代码。


有人能解决这个问题吗?

这可能就是你一直在寻找的东西。这一切都是关于正确计算行数,您可以一次插入3行

Option Explicit

Public Sub InsertRowsAtValueChange()
    Dim xTitleId As String
    xTitleId = "Enter the Range"

    Dim WorkRng As Range
    Set WorkRng = Application.Selection
    Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)

    Application.ScreenUpdating = False

    Dim LastDepartmentRow As Long
    LastDepartmentRow = (WorkRng.Rows.Count + WorkRng.Row - 1)

    Dim i As Long
    For i = LastDepartmentRow To 2 Step -1
        If WorkRng.Cells(i, 2).Value <> WorkRng.Cells(i - 1, 2).Value Then
            WorkRng.Cells(i, 2).Resize(RowSize:=3).EntireRow.Insert 'add 3 empty rows

            'write subtotal below
            Range("A" & LastDepartmentRow + 4).Value = "Department Total:"
            Range("C" & LastDepartmentRow + 4).Value = "=SUM(C" & i + 3 & ":C" & LastDepartmentRow + 3 & ")"
            Rows(LastDepartmentRow + 4).Font.Bold = True

            'write headline above
            Range("A" & i + 2).Value = "=CONCATENATE(""Department "",R[1]C[1],""#"")"
            Rows(i + 2).Font.Bold = True

            LastDepartmentRow = i - 1 'remember last subtotal department data row
        End If
    Next i

    Application.ScreenUpdating = True
End Sub
选项显式
公共子插入行SatValueChange()
Dim xTitleId作为字符串
xTitleId=“输入范围”
变暗工作范围
Set WorkRng=Application.Selection
设置WorkRng=Application.InputBox(“范围”,xTitleId,WorkRng.Address,类型:=8)
Application.ScreenUpdating=False
昏暗的最后一个部门排一样长
LastDepartmentRow=(WorkRng.Rows.Count+WorkRng.Row-1)
我想我会坚持多久
对于i=LastDepartmentRow到2步骤-1
如果WorkRng.Cells(i,2).Value为WorkRng.Cells(i-1,2).Value,则
WorkRng.Cells(i,2).调整大小(行大小:=3).EntireRow.Insert'添加3个空行
'将小计写在下面
范围(“A”&LastDepartmentRow+4)。Value=“部门总数:”
范围(“C”&LastDepartmentRow+4)。值=“=SUM(C”&i+3&“:C”&LastDepartmentRow+3&”)
行(LastDepartmentRow+4)。Font.Bold=True
在上面写标题
范围(“A”&i+2).Value=“=CONCATENATE”(“部门”,R[1]C[1],“#”)
行(i+2)。Font.Bold=True
LastDepartmentRow=i-1'记住上次小计部门数据行
如果结束
接下来我
Application.ScreenUpdating=True
端接头

注意:在没有正确的错误处理的情况下,永远不要在错误恢复下使用
。这一行只是隐藏错误消息,但错误仍然会发生!你就是看不见他们,所以你就是瞎子!您无法正确地调试/修复带有该选项的代码。将其完全删除或改为执行错误处理。然后再运行一次,看看是否有错误。谢谢你的建议。我已经删除了那条线。我没有得到任何错误。如果你对@P有任何想法,也请提出我的问题ᴇʜ我很不清楚你想做什么,你真正的问题是什么。你能给出一个更好的例子吗?例如,在应用脚本之前,你的数据看起来如何?之后你希望看到什么(这样我们就可以看到差异)?另外,请解释当脚本要求时,您将选择的范围。@Pᴇʜ我在运行代码之前添加了图像。如图1所示:-A2和A4为空,A11和A13同样为空。现在在图2中:-您可以看到A2和A11的值为部门总数:A4和A13的值为部门编号。我选择了该表中的所有数据。就像Ctrl+shift+end@P一样ᴇʜ