在Excel中按值自动sorting单元格
我想根据他们在另一列中的值来sorting列中的一组单元格。
KLMN 1 Italy 10000 China 80000 2 Spain 2000 Russia 1000 3 UK 300 India 300 4 France 40 Pakistan 50
我的想法是只根据L1
到L4
和M1
到N4
sorting值的范围,即从K1
到K4
,所以如果我现在改变西class牙和/或俄罗斯的价值,我会
KLMN 1 Spain 40000 Russia 100000 2 Italy 10000 China 80000 3 UK 300 India 300 4 France 40 Pakistan 50
此外,列L1:L4
和N1:N4
取决于其他单元格和公式。 我已经尝试了下面的脚本,它部分工作,但是当L
或N
的值通过其他单元格修改时,列K
和M
不会被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
有任何想法吗?
- select所有数据(包括列标题)
- 转到数据选项卡>单击filter
- 点击列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)