在Excel中按值自动sorting单元格

我想根据他们在另一列中的值来sorting列中的一组单元格。

KLMN 1 Italy 10000 China 80000 2 Spain 2000 Russia 1000 3 UK 300 India 300 4 France 40 Pakistan 50 

我的想法是只根据L1L4M1N4sorting值的范围,即从K1K4 ,所以如果我现在改变西class牙和/或俄罗斯的价值,我会

  KLMN 1 Spain 40000 Russia 100000 2 Italy 10000 China 80000 3 UK 300 India 300 4 France 40 Pakistan 50 

此外,列L1:L4N1:N4取决于其他单元格和公式。 我已经尝试了下面的脚本,它部分工作,但是当LN的值通过其他单元格修改时,列KM不会被sorting。

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("K1:L4")) Is Nothing Then If Target.Offset(, -1) <> vbNullString Then Range("K1:L4").Sort Key1:=Range("L1"), Order1:=xlDescending, Header:=xlNo End If End If If Not Intersect(Target, Range("M1:N4")) Is Nothing Then If Target.Offset(, -1) <> vbNullString Then Range("M1:N4").Sort Key1:=Range("N1"), Order1:=xlDescending, Header:=xlNo End If End If End Sub 

有任何想法吗?

  1. select所有数据(包括列标题)
  2. 转到数据选项卡>单击filter
  3. 点击列L中的下拉箭头,select从最大到最小sorting

我的build议是每次数据改变时简单地执行步骤3。 如果你需要这个自动sorting,你需要考虑使用VBA或基于你的表创build另一个表(提示,你可以使用大函数和vLookup函数)

假设你的国家在A1:A8,你的价值在B1:B8,然后在C1:C8input1或2来确定哪个国家应该出现的列。

在这里输入图像说明

现在在列L中,获得列1值的最大值。 在L1中,input数组:

 =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公式(不要忘记数组input)

 =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)