【问题标题】:Excel: Copy and insert rows on another sheet based on cellExcel:根据单元格在另一张工作表上复制和插入行
【发布时间】:2015-08-14 06:04:33
【问题描述】:

我正在尝试编写一个代码来检查 D 列中名为 All 的主表中的数字(例如 780101),如果它符合条件,它会复制整行并插入 (不粘贴)它到另一个具有条件名称的工作表(例如 780101),从第 6 行开始。 我拥有的代码不像我想要的那样工作。它不会复制所有符合条件的行,有时会插入空白行。

Sub Insert()
For Each Cell In Sheets("All").Range("D:D")
If Cell.Value = "780101" Then
    matchRow = Cell.Row
    Rows(matchRow & ":" & matchRow + 1).Select
    Selection.Copy
    Sheets("780101").Select
    Rows("6:6").Select
    Selection.Insert Shift:=xlDown
End If
Next
End Sub

我刚开始学习 VBA,所以如果可能的话,工作表的名称将成为单元格值的标准(代码仅针对一张工作表 - 780101,但有 20 个工作表不同的名字)。

【问题讨论】:

  • a) 这些实际上是看起来像数字而不是实数的文本吗? If Cell.Value = "780101" ...If Cell.Value = 780101 ... 不同。 b)如果下面的行中没有任何内容(您包含在副本中),那么是的,您将得到空白行。
  • @Jeeped a) 不,它们是数字。公式中的引用对结果有何影响? b) 主表中没有空白行。这些数字仅按与这些数字 (D) 位于同一列的“部门”一词的行进行划分。
  • re: 引用数字与数字 - 你不妨问问.Value.Value2 之间的区别。

标签: vba excel


【解决方案1】:

如果不查看示例数据以及可能导致您遇到的问题的原因,很难提出建议,但您可以对现有代码运行此 rehash。

Sub Insert()
    Dim dc As Range
    With Sheets("All")
        For Each dc In Intersect(.Range("D:D"), .UsedRange)
            If dc.Value2 = 780101 Then
                dc.Resize(2, 1).EntireRow.Copy
                Sheets("780101").Rows(6).Insert Shift:=xlDown
            End If
        Next
    End With
End Sub

从上到下运行的性质意味着结果将相反。您不妨考虑从下到上运行主循环以保持顺序。

【讨论】:

  • 代码运行良好,dc.Resize(2, 1).EntireRow.Copy 行有一个小问题。满足条件的最后两行加倍,它们下面的行也复制到工作表 780101(工人 15、工人 16、部门)中。见图片:pasteboard.co/2HWSxrZw.png我把它改成了dc.Resize(**1**, 1).EntireRow.Copy,它就像一个魅力。
  • 嗨,我使用上面的代码可以将数据从一张纸插入到另一张纸上,但正如你提到的相反,如何从下往上阅读
猜你喜欢
  • 1970-01-01
  • 2015-09-24
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
相关资源
最近更新 更多