Excel:根据另一列订购列

时间:2011-07-05 23:56:40

标签: excel sorting

我想根据B列的值订购A列。

在简单的Google文档中:=排序(A1:A100,B1:B100)

如何在Excel中执行此操作?

4 个答案:

答案 0 :(得分:5)

要手动执行此操作,您可以突出显示要排序的所有列,然后点击“主页”标签中“排序和过滤”下的“自定义排序...”。这会打开一个对话框,您可以在其中告诉它要排序的列,添加多个排序级别等等。

如果您知道如何在Excel中手动执行某些操作并希望了解如何使用VBA以编程方式执行此操作,则只需记录自己手动执行此操作的宏,然后查看其生成的源代码。我这样做是为了根据B列对A列和B列进行排序,并从生成的内容中提取相关代码:

ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B1:B6"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
    .SetRange Range("A1:B6")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply

请注意,自动生成的代码几乎总是有不必要的膨胀。但是,这是一个很好的方法来确定您可能需要使用或研究更多的功能。在这种情况下,你可以把它修剪成这样的东西:

Range("A1:B6").Sort Key1:=Range("B1:B6"), Order1:=xlAscending

如果您只想重新排序A列的内容而不触及B列(即使您将其用作排序键),您可能需要制作临时副本,对其进行排序并仅复制A列这是因为Excel的Sort函数要求排序键在被排序的范围内。所以,它可能看起来像这样:

Application.ScreenUpdating = False
Range("A1:B6").Copy Destination:=Range("G1:H6")
Range("G1:H6").Sort Key1:=Range("H1:H6"), Order1:=xlAscending
Range("G1:G6").Copy Destination:=Range("A1:A6")
Range("G1:H6").Clear
Application.ScreenUpdating = True

答案 1 :(得分:0)

谢谢@brunosan:D

最后我得到了答案,因为@brunosan问题几天之后我没有在excel电子表格中找到关于我的问题的答案。基于@brunosan问题,我尝试了排序公式,突然我在谷歌电子表格上尝试另一种“排序”选项。

所以这是我解决的问题:

我在A列中有值,但A列中的值必须更新。更新后的数据I放在B列中,因此我将原始数据保留在A列中,以便稍后进行比较。与图片

before

但问题是B列中的更新数据(基于A列数据)与A列的结构不再相同。您可以在上图中看到。有几个数据已删除或丢失,所以我有一个空行。

问题是我想要替换与A列结构相同的更新数据。哪些数据不存在留空。所以我尝试在谷歌表中选择所有列和SORT RANGE,然后选择SORT BY COLUMN A.瞧,我想要的结果。 :D见下图。

after

你可以想象我有一百个数据直到百万个数据,如果我一个接一个地检查直到掉落那么浪费时间:D。

nb:对于模糊的数据我很抱歉:D

答案 2 :(得分:0)

这是动画形式的手动方法:

enter image description here

答案 3 :(得分:0)

使用= SORTBY()函数;其格式为

= SORTBY(array,by_array1,[sort_order1],by_array2,[sort_order2] ...),

但最简单的是

= SORTBY(array,by_array1,[sort_order1]),

这是基本的。它可以像您期望的那样工作。进一步的数组将使用by_array(n)在by_array(n-1)内排序。