Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 根据列中的条件在组之间插入一行_Excel_Vba - Fatal编程技术网

Excel 根据列中的条件在组之间插入一行

Excel 根据列中的条件在组之间插入一行,excel,vba,Excel,Vba,我有一个数据工作表,有四列。我希望电子表格根据D列在每组后面添加3行。D列有事务处理部门。所有部门事务都列在一行中。所以Excel只需要找到部门中的更改,并在该部分之后输入三行 我已经尝试了我在这里找到的代码。它在看到部门的每一行后都放一行 Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("IMPORT-WIP") 'better define by name: ThisWorkbook.Worksheets("MySheet")

我有一个数据工作表,有四列。我希望电子表格根据D列在每组后面添加3行。D列有事务处理部门。所有部门事务都列在一行中。所以Excel只需要找到部门中的更改,并在该部分之后输入三行

我已经尝试了我在这里找到的代码。它在看到部门的每一行后都放一行

Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("IMPORT-WIP") 'better define by name: ThisWorkbook.Worksheets("MySheet")

    Dim LastRow_f As Long
    LastRow_f = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row

    ws.Range("A1:D" & LastRow_f).AutoFilter Field:=12, Criteria1:="HR DEPARTMENT"

    Dim FilteredData As Range
    Set FilteredData = ws.Range("D2:D" & LastRow_f).SpecialCells(xlCellTypeVisible)

    Dim iArea As Long
    Dim iRow As Long
    For iArea = FilteredData.Areas.Count To 1 Step -1 'loop from last to first area
        For iRow = FilteredData.Areas(iArea).Rows.Count To 1 Step -1 'loop from last row to first row in each area
            With FilteredData.Areas(iArea).Rows(iRow) '<-- this represents the current row we are in the loop
                .Offset(RowOffset:=1).EntireRow.Insert Shift:=xlDown
                .Offset(RowOffset:=1).EntireRow.Interior.Color = RGB(192, 192, 192)
            End With
        Next iRow
    Next iArea

    'remove filters
    ws.Range("A1:D" & LastRow_f).AutoFilter
Dim ws As工作表
设置ws=ThisWorkbook.Worksheets(“导入-WIP”)“最好按名称定义:ThisWorkbook.Worksheets(“MySheet”)
调暗最后一排的长度
LastRow_f=ws.Cells(ws.Rows.Count,“D”).End(xlUp).Row
ws.Range(“A1:D”和LastRow\u f)。自动筛选字段:=12,标准1:=“人力资源部门”
Dim FilteredData As范围
设置FilteredData=ws.Range(“D2:D”和LastRow\u f).SpecialCells(xlCellTypeVisible)
长的
暗淡无光
对于iArea=FilteredData.Areas.Count到1步-1'循环从最后一个区域到第一个区域
对于iRow=Filteredata.Areas(iArea).Rows.Count到1步骤-1'循环从每个区域的最后一行到第一行

使用FilteredData.Areas(iArea).Rows(iRow)“此代码将在值组(甚至是唯一值)之间插入3行。数据不需要过滤。它将循环通过
列D
,测试当前单元格上方的单元格,如果值不相同,将在它们之间插入3行。您可能必须首先对数据进行排序,这取决于您需要什么

Sub InsertRowsBetweenGroups()
Dim ws As Worksheet, lr As Long, i As Long

Set ws = ThisWorkbook.Sheets("Sheet1") 'Change as needed

lr = ws.Cells(ws.Rows.Count, 4).End(xlUp).Row

    For i = lr - 1 To 2 Step -1
        If Cells(i, "D") <> Cells(i - 1, "D") Then
            Cells(i, "D").Resize(3).EntireRow.Insert Shift:=xlDown
        End If
    Next i
End Sub
组间子插入行()
将ws设置为工作表,lr设置为长,i设置为长
设置ws=ThisWorkbook.Sheets(“Sheet1”)可根据需要进行更改
lr=ws.Cells(ws.Rows.Count,4).End(xlUp).Row
对于i=lr-1至2步骤-1
如果单元格(i,“D”)单元格(i-1,“D”),则
单元格(i,“D”)。调整大小(3)。EntireRow.Insert Shift:=xlDown
如果结束
接下来我
端接头

此代码将在值组(甚至是唯一值)之间插入3行。数据不需要过滤。它将循环通过
列D
,测试当前单元格上方的单元格,如果值不相同,将在它们之间插入3行。您可能必须首先对数据进行排序,这取决于您需要什么

Sub InsertRowsBetweenGroups()
Dim ws As Worksheet, lr As Long, i As Long

Set ws = ThisWorkbook.Sheets("Sheet1") 'Change as needed

lr = ws.Cells(ws.Rows.Count, 4).End(xlUp).Row

    For i = lr - 1 To 2 Step -1
        If Cells(i, "D") <> Cells(i - 1, "D") Then
            Cells(i, "D").Resize(3).EntireRow.Insert Shift:=xlDown
        End If
    Next i
End Sub
组间子插入行()
将ws设置为工作表,lr设置为长,i设置为长
设置ws=ThisWorkbook.Sheets(“Sheet1”)可根据需要进行更改
lr=ws.Cells(ws.Rows.Count,4).End(xlUp).Row
对于i=lr-1至2步骤-1
如果单元格(i,“D”)单元格(i-1,“D”),则
单元格(i,“D”)。调整大小(3)。EntireRow.Insert Shift:=xlDown
如果结束
接下来我
端接头

GMalc,你是一个了不起的人。这工作做得很好!你对学习VBA有什么建议吗?我经常来这里偷项目的代码,但这是随意的,最多也很难看。我即将开始一个计算机科学课程,但我始终愿意听取专业人士的建议。@Doupis网上有许多vba课程,你可以预览以获得基础知识。我发现S.O.是学习和理解vba的最佳来源。识别为他人提供免费帮助的知识渊博的个人,阅读他们的评论和答案,有助于我理解更高级的vba编码。我喜欢回顾S.O.的问题,当我发现一个有趣的问题时,我会试图找出如何尽可能简单地完成任务。总之,你写的代码越多,你的vba技能和知识就会增加。GMalc,你是一个了不起的人。这工作做得很好!你对学习VBA有什么建议吗?我经常来这里偷项目的代码,但这是随意的,最多也很难看。我即将开始一个计算机科学课程,但我始终愿意听取专业人士的建议。@Doupis网上有许多vba课程,你可以预览以获得基础知识。我发现S.O.是学习和理解vba的最佳来源。识别为他人提供免费帮助的知识渊博的个人,阅读他们的评论和答案,有助于我理解更高级的vba编码。我喜欢回顾S.O.的问题,当我发现一个有趣的问题时,我会试图找出如何尽可能简单地完成任务。底线是,您编写的代码越多,您的vba技能和知识就会增加。