Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
Excel 在VBA中排序并删除重复项_Excel_Vba - Fatal编程技术网

Excel 在VBA中排序并删除重复项

Excel 在VBA中排序并删除重复项,excel,vba,Excel,Vba,我想将值从范围S1:S6移动到范围T1删除重复项并将其从高到低排序 我已经能够过滤数据并将其移动到所需的范围,但我不知道如何在目标范围内对其进行排序 下面是我用来移动和过滤数据的方法: Range("S1:S6").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("T1"), Unique:=True 我可以用什么方法对这行数据进行排序 谢谢你抽出时间 Jonhdoe对于此解决方案,强烈建议将单元格S1作为标头而不是数据。要使过

我想将值从范围
S1:S6
移动到范围
T1
删除重复项并将其从高到低排序

我已经能够过滤数据并将其移动到所需的范围,但我不知道如何在目标范围内对其进行排序

下面是我用来移动和过滤数据的方法:

Range("S1:S6").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("T1"), Unique:=True

我可以用什么方法对这行数据进行排序

谢谢你抽出时间

Jonhdoe

对于此解决方案,强烈建议将单元格S1作为标头而不是数据。要使过滤器和排序在任何时候发生更改,请使用工作表\u更改事件。请确保将此代码放在图纸模块中,而不是标准模块中。要进入工作表模块,请双击Visual Basic编辑器左侧所需的工作表名称,这将打开该工作表的代码模块

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rData As Range
    Dim rDest As Range

    'Adjust these as necessary
    Set rData = Me.Range("S1", Me.Cells(Me.Rows.Count, "S").End(xlUp))
    Set rDest = Me.Range("T1")

    'Disable events to prevent infinite loops
    Application.enableevents = False

    'Clear previous results
    rDest.EntireColumn.ClearContents

    'Make sure a change was made in column S
    If Not Intersect(rData, Target) Is Nothing Then
        'Change in column S found, make sure that there is more than 1 cell populated in column S
        If rData.Cells.Count > 1 Then
            'Extract unique values
            rData.AdvancedFilter xlFilterCopy, , rDest, True

            'Sort unique values high to low
            With Me.Range(rDest, Me.Cells(Me.Rows.Count, rDest.Column).End(xlUp))
                .Sort .Cells, xlDescending, Header:=xlYes
            End With
        End If
    End If

    'Re-enable events
    Application.enableevents = True

End Sub

你能在移动后对其进行排序吗?它按预期工作,但我现在意识到我解释得很糟糕,因为每次有人在复制范围内添加数据时,我也需要此筛选器工作,是否有办法使此筛选器始终处于活动状态?@JonhDoe请查看更新的答案,确保使用标题列(如果单元格S1是标题,而实际数据从单元格S2开始,这将减少很多麻烦),并确保将代码放入相应工作表的代码模块中(如果代码位于标准模块中,这将不起作用)。