【发布时间】:2014-06-06 19:52:08
【问题描述】:
这个网站已经有类似的东西了:Copy and insert rows based off of values in a column
但是代码并没有把我带到我需要去的地方,而且我无法对其进行调整以使其适合我。
我的用户有一个包含 4 列 A-D 的工作表。 A 列包含具体的合同编号,B 列为空白,C 列包含零件编号,D 列包含整个合同编号范围。我的用户想要计算整个范围合同编号重复的次数,因此我在单元格 E2 中输入公式 =countif($D$2:$D$100000,A2) 并复制下来,给出 A 列中特定合同出现在 D 列中的次数。数字此工作簿中的范围从 1 到 11,但在将使用此方法的其他工作簿中,数字可能更高。
接下来我需要在 E 列中大于 1 的所有值下方输入空白单元格,这与之前提出的问题中的示例非常相似。然后,我还需要在同一行中复制并插入复制的单元格以完全匹配 A 列中的同一行。示例:单元格 E21 的数字为 5,因此我只需要在 E 列中移动单元格,以便有 4 个空白单元格在它的正下方。在 A 列中,我需要复制单元格 A21 并将复制的单元格插入到正下方的四行中。
只是尝试插入空白单元格是一种尝试,使用上一个问题中给出的代码。
Dim sh As Worksheet
Dim lo As ListObject
Dim rColumn As Range
Dim i As Long
Dim rws As Long
Set sh = ActiveSheet
Set lo = sh.ListObjects("Count")
Set rColumn = lo.ListColumns("Count").DataBodyRange
vTable = rColumn.Value
For i = rColumn.Rows.Count To 1 Step -1
If rColumn.Cells(i, 1) > 1 Then
rws = rColumn.Cells(i, 1) - 1
With rColumn.Rows(i)
.Offset(1, 0).Resize(rws, 1).Cells.Insert
.EntireRow.Copy .Offset(1, 0).Resize(rws, 1).Cells
.Offset(1, 0).Resize(rws, 1).EntireRow.Font.Strikethrough = True
End With
End If
Next
我将非常感谢任何帮助,因为我已经与这个怪物战斗了一周。
【问题讨论】:
-
只是检查我的理解,因此对于 E 列中大于 1 的任何单元格(即与唯一合同 ID 相关的多个合同?),您要输入新行 = 合同数负 1(例如,如果数字是 4,您将输入 3 个新行)。然后,您想将前 3 列中的信息复制到这些新的空白单元格中吗?
-
Col A 有一个特定合同编号的简短列表,必须与 col D 中的整个列表进行比较。我在 col E 中输入了一个公式来计算合同编号在 col 中出现的次数D. 我需要在任何大于 1 的计数下方插入空白行,等于计数减 1。在 col A 的同一行中,我需要将值复制到与 >1 计数相同的行,并插入复制的单元格到值以下的单元格。例如:如果 E21 包含 3,则在下面插入 2 个空白单元格,然后复制 A21 并插入复制的单元格 A22 和 A23。我们不希望插入整行,只插入单元格。