将发生“n”次的a的第一个实例复制到新的工作簿中

首先非常感谢您提供这样的网站,这对于像我这样的人开始使用VBA非常有帮助。 我正在试图自动化一个手动工作,这是一个非常耗时的工作。 请帮我解决这个问题。 请求。 如下所示:

XY ---- --- 2134 100 2134 200 2134 300 3456 400 3241 500 2516 600 2516 700 

我有一张如上所述的'X'和'Y'列。 这是我的源代码表,我有这样的数千个值,行每天(dynamic)加起来。 我想在new workbook>>new sheet的输出new workbook>>new sheet ,它应该有如下输出:

 X1 Y1 ---- --- 2134 100 3456 400 3241 500 2516 600 

即列“X”和“Y”的第一个实例。 请帮助我得到一个VBA自动执行此操作。 我每天花费4个小时来完成这项工作,因为我需要手动更新1000个数据。

提前致谢

 Sub Firsts() Dim dict As Object, k Dim c As Range, tmp Dim sht As Worksheet Set dict = CreateObject("scripting.dictionary") For Each c In ActiveSheet.Range("A1:A10000").Cells tmp = c.Value If Len(tmp) = 0 Then Exit For If Not dict.exists(tmp) Then dict.Add tmp, c.Offset(0, 1).Value Next c DumpDict Workbooks.Add().Sheets(1).Range("A1"), dict End Sub Sub DumpDict(rng As Range, dict As Object) Dim k, r As Long r = 0 For Each k In dict.keys rng.Cells(1).Offset(r, 0).Resize(1, 2).Value = Array(k, dict(k)) r = r + 1 Next End Sub 

另一个选项是使用下面的选项从数据选项卡中select高级filter

在这里输入图像说明

现在,您可以将结果复制并粘贴到新工作表中并清除filter

我相信这会得到你想要的东西:

 Sub copyOver() Dim count As Integer count = Application.WorksheetFunction.CountA(Range("A:A")) Dim rowCount As Integer rowCount = 1 Dim i As Integer i = 2 Do While i <= count Dim str As String str = Range("A" & i) Dim find As String On Error GoTo copy: find = Application.WorksheetFunction.VLookup(str, Range("A1:A" & (i - 1)), 1, False) i = i + 1 Loop Exit Sub copy: If (Range("A" & i) = "") Then Resume Next End If Call copier(Range("A" & i), Range("B" & i), rowCount) rowCount = rowCount + 1 Resume Next End Sub Sub copier(str1 As String, str2 As String, rowCount As Integer) Worksheets("Sheet2").Range("A" & rowCount) = str1 Worksheets("Sheet2").Range("B" & rowCount) = str2 End Sub 

只要确保您的数据在列A和B,并从第1行开始。希望这有助于!