Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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/5/date/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
Vba 将行的一部分复制到另一张图纸,除非已复制。源行可以更改行_Vba_Excel - Fatal编程技术网

Vba 将行的一部分复制到另一张图纸,除非已复制。源行可以更改行

Vba 将行的一部分复制到另一张图纸,除非已复制。源行可以更改行,vba,excel,Vba,Excel,我基本上需要将行从一张纸复制到另一张纸。我需要复制的行位于第2页的A列到N列,我需要复制N列中具有唯一值的行 列N将仅为=M1或=M2,具体取决于其中包含数据的行 因此,我将使用一个工作表计算事件来尝试捕获它 棘手的部分是,每次新值出现在第2页的最后一行,然后N从M中填充。我不希望复制以前复制的行。也可能是行的全部内容改变位置,或者其中一行消失,而另一行将填补第2页上的空白。因此,我需要避免计算事件从=M行识别这一点。i、 e如果它已经被复制,但被重新计算--我不需要再次复制它 如果第1页的N列

我基本上需要将行从一张纸复制到另一张纸。我需要复制的行位于第2页的A列到N列,我需要复制N列中具有唯一值的行

列N将仅为
=M1或=M2
,具体取决于其中包含数据的行

因此,我将使用一个工作表计算事件来尝试捕获它

棘手的部分是,每次新值出现在第2页的最后一行,然后N从M中填充。我不希望复制以前复制的行。也可能是行的全部内容改变位置,或者其中一行消失,而另一行将填补第2页上的空白。因此,我需要避免计算事件从
=M
行识别这一点。i、 e如果它已经被复制,但被重新计算--我不需要再次复制它

如果第1页的N列值中存在N列值,我想一种方法是进行toi查找。因为如果该行消失,那么它将出现在第1页上。会的,因为我有其他公式放在那里。

我的起点是下面的代码,我在第1页的工作表代码中设置了这一点

Private Sub Worksheet_Calculate()
Dim i As Long
Dim lr1 As Long, lr2 As Long
Dim Delta As String
Dim wks1 As Worksheet, wks2 As Worksheet

Set wks1 = ActiveSheet
Set wks2 = Worksheets("Sheet2") 'change to suit
lr1 = wks1.Cells(Rows.Count, "N").End(xlUp).Row

For i = 2 To lr1

        lr2 = wks2.Cells(Rows.Count, "A").End(xlUp).Row + 1
        wks1.Cells(i, "N").EntireRow.Copy Destination:=wks2.Cells(lr2, "A")

Next i
End Sub
我也有这项工作,我需要将其纳入工作表计算

Sub updt()
Dim sh1 As Worksheet, sh2 As Worksheet, lr As Long, rng As Range
Set sh1 = Sheets(1) 'Edit sheet name
Set sh2 = Sheets(2) 'Edit sheet name
lr = sh1.Cells(Rows.Count, 1).End(xlUp).Row
Set rng = sh1.Range("A2:A" & lr)
For Each c In rng
If WorksheetFunction.CountIf(sh2.Range("A:A"), c.Value) = 0 Then
sh2.Range("A" & sh2.Cells(Rows.Count, 1).End(xlUp).Row)(2) = c.Value
End If
Next
End Sub

最快的方法是复制所有需要的行,然后调用几乎是instantanios的remove dublicates函数。您可以简单地将您的唯一列设置为指示符

hmm我没有想到这一点。这可能有用。从sheet 2工作表更改事件中执行此操作的代码是什么?尽管我现在在queston中添加的额外代码如果对整行或部分行进行更改,效果会更好吗?@Jonwhite代码将是:
Sheets(“Sheet2”).Range(“A1:Z999”)。RemovedUpplicates列:=14,Header:=xlYes
您应该根据需要更改范围。即使在中等大小的表中,这种方法也比遍历所有行快得多。它要去的工作表可能包含数千行-您确定这不会减慢excel的速度吗?@jonwhite请尝试一下。我用了30万行,基本上是即时的。您没有机会通过VBA通过经典迭代达到集成Excel函数的速度。