【问题标题】:continuous duplicates连续重复
【发布时间】:2021-10-12 09:50:51
【问题描述】:

在 VBA 方面,我完全是新手,并且根据在线教程创建了我的 VBA。 一点背景知识:我的数据集由 3 张具有不同信息的工作表组成,如果数据以特定标准输入到第一个工作表中,则整行然后移动到第二个工作表中,可以进一步输入。如果在第二张纸上选择了一个选项,则整行必须移动到第三张纸。所以基本上我只会拥有任何一条记录的 1 个副本。

我遇到的问题是,当该行从表 1 剪切到表 2 时,我无法在不创建重复副本的情况下编辑表 2 中的特定数据,就好像没有粘贴一样即使粘贴的数据在那里并且是可编辑的,也能找到。

如果有帮助,我将使用索引行。 剪切的单元格被粘贴到新工作表中,并从原始工作表中删除该行

请有人,任何可以解决此问题的人将不胜感激。

这里是剪切/粘贴的代码

Private Sub 
    CommandButton4_Click()
    a = Worksheets("Database").Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To a
        If Worksheets("Database").Cells(i, 16).Value = "Retention" Then
            Worksheets("Database").Rows(i).Cut 
            Worksheets("Archive").Activate
            b = Worksheets("Archive").Cells(Rows.Count, 1).End(xlUp).Row
            Worksheets("Archive").Cells(b + 1, 1).Select
            ActiveSheet.Paste
            Worksheets("Database").Activate 
            Rows(i).EntireRow.Delete
            MsgBox "ARCHIVE RECORDS UPDATED", vbInformation 
        End If
    Next
End Sub

(这是重复的 2x 工作表)–

【问题讨论】:

  • 应该也说这是VBA Excel
  • 如果您在询问代码方面的帮助问题,您需要为我们提供...
  • 抱歉,这里是剪切/粘贴 Private Sub CommandButton4_Click() a = Worksheets("Database").Cells(Rows.Count, 1).End(xlUp).Row For i 的代码= 2 To a If Worksheets("Database").Cells(i, 16).Value = "Retention" Then Worksheets("Database").Rows(i).Cut Worksheets("Archive").Activate b = Worksheets( "存档").Cells(Rows.Count, 1).End(xlUp).Row Worksheets("Archive").Cells(b + 1, 1).Select ActiveSheet.Paste Worksheets("Database").Activate Rows( i).EntireRow.Delete MsgBox "ARCHIVE RECORDS UPDATED", vbInformation End If Next End Sub (这对 2x 工作表重复)
  • 请不要张贴在 cmets 中。编辑您的原始问题并使用提供的代码标签。
  • 很抱歉作为答案发表评论,还没有足够的代表发表评论。只是一些提醒。迈克尔,您不需要为 Excel VBA 中的大多数内容选择单元格和激活工作表。它会减慢你的代码。您还可以阅读 Application.EnableEvents、Application.ScreenUpdating 和 Application.Calculation 以获得一般的速度增益。这可能是一个很好的阅读:How to avoid using Select in Excel VBA

标签: excel vba duplicates paste


【解决方案1】:

在需要删除项目的集合中运行时,不要从头到尾,而是从头到尾。

让我举个例子,删除列表 A 的重复项:

index value
    1     1
    2     2
    3     2
    4     2
    5     3

执行这个简单的伪代码:

for (i = 1 to 4)
{ if A(i) = A(i+1) then remove A(i) }

这是结果:

i  A before       A afterwards
1  1,2,2,2,3      1,2,2,2,3
2  1,2,2,2,3      1,2,2,3
3  1,2,2,2,3      1,2,2,3
4  1,2,2,3        => either stop or error

现在在另一个意义上:

for (i = 5 downto 2)
{ if A(i) = A(i-1) then remove A(i) }

i  A before       A afterwards
5  1,2,2,2,3      1,2,2,2,3
4  1,2,2,2,3      1,2,2,3
3  1,2,2,3        1,2,3
2  1,2,3          1,2,3

【讨论】:

  • 这实际上是用作 VBA 语法吗?
  • 不,这是伪代码,只是为了展示算法。
  • 感谢 Dominique 的信息,但问题是我的复制和粘贴有效,我的搜索有效,当我尝试编辑复制的单元格时,它不允许我并创建一个骗子.有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
  • 2022-01-08
  • 2012-09-21
  • 2014-06-24
  • 1970-01-01
相关资源
最近更新 更多