按特定列排序

时间:2015-10-15 19:56:59

标签: excel vba excel-vba sorting

我正在使用此代码:

Sub CopyUniqueCityList()

Dim rCityList As Range

With Sheets("MasterSheet")
    With .Range(.Range("F1"), .Range("F1").End(xlDown))
        .AdvancedFilter Action:=xlFilterInPlace, Unique:=True
        Set rCityList = .SpecialCells(xlCellTypeVisible)
    End With
    .ShowAllData
End With

Dim ws As Worksheet
For Each ws In Worksheets

    If ws.Visible = xlSheetVisible And ws.Name <> "MasterSheet" Then

        rCityList.Copy ws.Range("F1")

    End If

Next

End Sub

获取复制到不同工作表的唯一列表。一切正常。 (谢谢斯科特......: - ))

无论如何,现在我正试图对这个独特的清单进行排序。

我正在尝试在for中进行排序,但是我应该尝试使用With吗?

无论如何,我仍然会遇到错误。我开始录制宏并进入这里:

ws.Range("F1:F").Sort key1:=Columns(6), order1:=xlAscending, Header:=xlYes

但这种情况仍然无法实现。

2 个答案:

答案 0 :(得分:0)

尝试用key1:= ws.Columns(“F1”)替换key1:= Columns(6)。

这里不应该有什么不同,但假设您的数据在F列中没有其他任何内容,您可以使用VBA查找F列中的最后一行数据。看起来像 - &gt; ws.Range(“F1:F”&amp; ws.Cells(ws.Rows.Count,“F”)。End(xlUp).Row)。

答案 1 :(得分:0)

首先,“F1:F”不是有效范围。要么对整列使用“F:F”,要么对列的一部分使用“F1:F100”。

此外,如果你有ws.Range(“F:F”)...,你实际上想要整理你正在排序的表,而不仅仅是你要排序的列。因此,例如,如果您想要按F列排序的右侧列,请使用相同的代码,但以ws.Range(“F:G”)开头......

如果将其放在“With”块中,则仅在Master Sheet上完成。我猜你想要它在For循环中,除了MasterSheet

之外,每个工作表都要做一次