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