如何根据原始Excel工作表的排序顺序对Excel工作表进行排序?

时间:2016-08-08 11:58:55

标签: excel vba excel-vba sorting

使用chrome扩展程序'Webscraper.io',我经常搜索政府网站以跟踪更新的项目费用。虽然它在操作上非常有效,但它没有以我提供输入Url的相同顺序返回数据。更奇怪的是,每次运行任务时,即使源完全相同,它也会选择不同的顺序。假设,如果我运行5个url的任务两次,输出将是(没有特定的随机顺序):

(Day 1) Output  (Day 2) Output
Url 2   $500    Url 3   $478 
Url 4   $867    Url 1   $637 
Url 1   $928    Url 4   $102 
Url 3   $109    Url 5   $942 
Url 5   $208    Url 2   $296 

Image example

它将不同日期的数据并排比较,这对我来说是一项非常繁琐的工作。那么,有没有办法根据工作表1的排序顺序对工作表2的列进行排序?对两张纸进行按字母顺序排序绝对是一种选择,但它会破坏我的原始订单(这是部门明智的)。理想情况下,我想将所有日子的B列粘贴到我的原始工作表&然后比较变化。

1 个答案:

答案 0 :(得分:0)

您可能希望使用Sort对象的Range方法及其OrderCustom参数

Sub SortByUrls()
    Dim rngToSort As Range, keysToSort As Range

    With Worksheets("Urls") '<--| change "Urls" with your actual sheet name
        Set rngToSort = .Range("C2:D6") '<--| range to be sorted
        Set keysToSort = .Range("C2") '<--| first cell of the column to sort

        Application.AddCustomList ListArray:=.Range("A2:A6").value '<--| add your sorting custom list as the previous Url names range

        .sort.SortFields.Clear '<--| clear any preceeding sorting settings
        rngToSort.sort Key1:=keysToSort, Order1:=xlAscending, header:=xlGuess, _
            OrderCustom:=Application.CustomListCount + 1, MatchCase:=False, _
            Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

        Application.DeleteCustomList Application.CustomListCount '<--| delete your sorting custom list
    End With
End Sub