在Excel中按值自动排序单元格

时间:2014-06-04 00:01:37

标签: excel vba vbscript

我想根据列中另一列的值对列中的一组单元格进行排序。

     K      L        M        N
1 Italy    10000    China    80000
2 Spain    2000     Russia   1000
3 UK       300      India    300
4 France   40       Pakistan 50

我的想法是只对值范围进行排序,例如从K1K4,具体取决于L1L4M1到{{1}所以,如果我现在更改西班牙和/或俄罗斯的值,我会有

N4

此外,列 K L M N 1 Spain 40000 Russia 100000 2 Italy 10000 China 80000 3 UK 300 India 300 4 France 40 Pakistan 50 L1:L4的值取决于其他单元格和公式。我尝试了以下脚本并且它部分有效,但是当通过其他单元格修改N1:N4L的值时,列NK未排序。

M

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

  1. 选择所有数据(包括列标题)
  2. 转到数据标签>单击过滤器
  3. 单击L列中的下拉箭头,选择“从最大到最小的排序”
  4. 我的建议是每次数据更改时执行第3步。 如果您需要自动排序,您需要查看使用VBA或根据您的表创建另一个表(提示,您可以使用Large函数和vLookup函数)

答案 1 :(得分:1)

假设您的国家/地区位于A1:A8,您的值位于B1:B8,然后位于C1:C8输入1或2来确定该国家/地区应显示的列。

enter image description here

现在在L列中,获取第1列值的最大值。在L1中,输入了数组:

=LARGE(($C$1:$C$8=1)*($B$1:$B$8),ROW())

并填写L4。然后在K1中,检索与该值相关联的国家/地区:

=INDEX($A$1:$A$8,MATCH(L1,$B$1:$B$8,FALSE),1)

并填写K4。然后在N和M中做同样的事情,除了第2列值。

如果你担心重复,那么为所有值添加一个非常小的数量。为此,请更改L1公式(不要忘记输入数组)

=LARGE(($C$1:$C$8=1)*(($B$1:$B$8)+(ROW($B$1:$B$8)/10000)),ROW())

并将K1公式更改为

=INDEX($A$1:$A$8,MATCH(INT(L1),$B$1:$B$8,FALSE),1)