【问题标题】:excel vba - copy unique values to new sheet - NO HEADERexcel vba - 将唯一值复制到新工作表 - 没有标题
【发布时间】:2015-02-24 03:28:43
【问题描述】:

我在 srcSheet 中的 A 列具有以下 10 个值:

bob
mary
sez
mary
mik
bob
tim
bob
ni
whit

我试图将唯一值仅复制到另一张工作表中的 A 列,但我得到了第一个值“bob”两次。我知道这是因为 AdvancedFilter 将第一行视为标题,但我想知道这是否可以在 VBA 中完成而无需在上方放置标题行?

我的代码:

Set rSrc = Worksheets(srcSheet).Range("A1:10")
Set rTrg = Worksheets(trgSheet).Range("A1")

rSrc.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=rTrg, Unique:=True

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    没有不包含标题的选项。您可以在复制后删除顶部的项目

    With rTrg.offset(1,0)
       Range(.Item(1), .End(xlDown)).Cut rTrg
    End With
    

    ...或适用于您的特定工作表布局的类似内容。

    编辑:做这样的事情要整洁得多

    Sub Tester()
        CopyUniques Sheet1.Range("C4").CurrentRegion, Sheet1.Range("e4")
    End Sub
    
    
    Sub CopyUniques(rngCopyFrom As Range, rngCopyTo As Range)
        Dim d As Object, c As Range, k
        Set d = CreateObject("scripting.dictionary")
        For Each c In rngCopyFrom
            If Len(c.Value) > 0 Then
                If Not d.Exists(c.Value) Then d.Add c.Value, 1
            End If
        Next c
        k = d.keys
        rngCopyTo.Resize(UBound(k) + 1, 1).Value = Application.Transpose(k)
    End Sub
    

    【讨论】:

    • 如果第一个值没有重复怎么办?
    • 首先测试计数 > 1:If Application.WorksheetFunction.CountIfs(rTrg, rTrg.Cells(1, 1)) > 1 Then
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多