0

首先非常感谢您提供这样一个网站,这对像我这样开始使用 VBA 的人非常有帮助。我正在尝试将我所做的手动工作自动化,这确实是一项耗时的工作。请帮助我。请求。如下:

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

我有一张上面有“X”和“Y”列的表格。这是我的源表,我有数千个这样的值,并且每天(动态)添加行。我想要 a 中的输出表,new workbook>>new sheet它应该具有如下输出:

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

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

提前致谢

4

3 回答 3

1
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
于 2012-07-30T18:52:36.277 回答
1

另一种选择是从“数据”选项卡中选择“高级过滤器”,并提供以下选项。

在此处输入图像描述

现在您可以将结果复制并粘贴到新工作表并清除过滤器

于 2012-07-31T09:38:00.897 回答
0

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

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 行下方开始。希望这会有所帮助!

于 2012-07-30T17:01:56.470 回答