【问题标题】:How To Insert A Row After Each Group Based on the Row Immediately Above如何根据紧接在上面的行在每个组之后插入一行
【发布时间】:2016-01-10 04:48:08
【问题描述】:

请参阅下面的示例表,该表与我在 Excel 中使用的实际表相似 - 希望这足以清楚地说明我的问题。使用 VBA,我想根据第 1 列中的每个不同单元格添加一个新行(即,对于值的每次更改,插入一个新行),然后用上面一行中的值填充新行,并进行一些修改该行(参见第 4、10-13 列)。

提前致谢!

【问题讨论】:

  • 您发布的代码被图像底部的大量空白所清除。请编辑您的问题以包含您目前已实现的代码(工作与否)。

标签: excel vba


【解决方案1】:

这是我第一次回答时根据您的 cmets 更新的代码。此代码适用于预先选择的范围,并要求您输入要应用代码的第 4 列值。

Sub codeForMike()

Dim rowX As Integer
Dim rangeSize As Integer
Dim col4 As Integer

col4 = InputBox("Insert rows where column 4 =", "Enter Number:")

rangeSize = Selection.Rows.Count
Selection.Cells(1).Select

rowX = ActiveCell.Row
rangeSize = rowX + rangeSize

Do
If Cells(rowX, 4).Value <> col4 Then
    rowX = rowX + 1

Else
    Range(Cells(rowX + 1, 1), Cells(rowX + 1, 13)).Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Cells(rowX + 1, 1).Value = Cells(rowX, 1).Value
    Cells(rowX + 1, 2).Value = Cells(rowX, 2).Value
    Cells(rowX + 1, 3).Value = Cells(rowX, 3).Value
    Cells(rowX + 1, 6).Value = Cells(rowX, 6).Value
    Cells(rowX + 1, 7).Value = Cells(rowX, 7).Value
    Cells(rowX + 1, 8).Value = Cells(rowX, 8).Value
    Cells(rowX + 1, 9).Value = Cells(rowX, 9).Value
    Cells(rowX + 1, 10).Value = "0"
    Cells(rowX + 1, 11).Value = "0"
    Cells(rowX + 1, 12).Value = "0"
    Cells(rowX + 1, 13).Value = "0"

    rowX = rowX + 2
    rangeSize = rangeSize + 1
End If

Loop Until rowX = rangeSize



Range(Cells(rowX - 2, 1), Cells(rowX - 2, 13)).Copy
Cells(rowX - 1, 1).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

End Sub

【讨论】:

  • 嗨,真诚的爱 - 非常感谢。它工作得很好。如果我想将每个新行的第 4 列留空(因为这个值会改变),您能否告诉我如何编辑您的代码?再次 - 非常感谢!
  • 另外,有没有办法只在 Excel 工作表的选定部分上运行代码?
  • 如果您想将第 4 列留空,只需删除以下行:Cells(rowX + 1, 4).Value = "86112" 如果第 4 列的值可以通过规则定义,或者如果有数据表可以查找该值应该是什么我们可以修改代码以获得正确的值。如果您只想在工作表的一部分上执行此操作,只需将“或 rowX =(所需的停止行)”添加到循环直到行。例如Loop Until Cells(rowX, 1).Value = "" Or rowX = 20
  • 再次感谢。在重新考虑这一点之后,是否有办法仅在第 4 列等于确定的值时插入新行(例如,如果第 4 列 = 582,则插入新行)。第 6-9 列仍需要从上面复制,第 10-13 列仍为“0”。
  • 再次感谢。在重新考虑这一点之后,是否有办法仅在第 4 列等于确定的值时插入新行(例如,如果第 4 列 = 582,则插入新行)。理想情况下,我需要能够轻松更改代码以在不同的查询上运行它。第 6-9 列仍需要从上面复制,第 10-13 列仍为“0”。只是为了澄清我的第二个问题,是否有办法将代码仅应用于我事先突出显示的工作表部分?再次感谢您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 2010-10-19
相关资源
最近更新 更多