本文链接:http://oicu.cc.blog.163.com/blog/static/123039471200981113538460/
问题描述及解答请看附图,示例用的是Google Spreadsheet在线表格。
问题:
发信人: boyeut (boyeut), 信区: OfficeSoft
标 题: excel中有没有办法实现这种排序?
发信站: 水木社区 (Thu Sep 3 14:28:17 2009), 站内
根据指标A、B、C、D、E列的数据对A、B、C、D、E进行排序。
因为有很多行数据,而且其中的数据需要变动,因此希望排序结果自动更新。
----------------
解答:
by oicu#lsxk.org
Google Spreadsheet中,多条件查找目前我只发现Offset法可用,而LOOKUP、INDIRECT、
INDEX、VLOOKUP这四种方法都只能在Excel中使用。因此这里给出Excel和Spreadsheet都通
用的函数方法(Google在线表格没有vba,所以就不用vba法了)。
G2 单元格函数:
=MID(I2&J2&K2&L2&M2,2,999)
向下填充
辅助列 I2 单元格数组公式函数(Excel中还可以用其他的查找方法):
=IF(SMALL($A2:$E2*1,COLUMN(A$1))>0,"、"&(OFFSET($A$1,0,SUM(IF(($A2:$E2*10+COLUMN($A2:$E2)=SMALL($A2:$E2*10+COLUMN($A2:$E2),COLUMN(A$1))),COLUMN($A$1:$E$1),0))-1,1,1)),"")
向右向下填充
对于 I2 用的数组公式,可以用别的方法,比如下面这个用LOOKUP的(仅Excel中可用):
=IF(SMALL($A2:$E2*1,COLUMN(A$1))>0,"、"&(LOOKUP(2,1/($A2:$E2*10+COLUMN($A2:$E2)=SMALL($A2:$E2*10+COLUMN($A2:$E2),COLUMN(A$1))),$A$1:$E$1)),"")
不管是Excel还是Spreadsheet,数组公式都要按Ctrl+Shift+Enter确定。
附图(点击查看大图):
特殊情况:
当A列到E列的数据没有重复值,而且没有空值时,可以用:
I2=INDEX($A$1:$E$1,MATCH(SMALL($A2:$E2,COLUMN(A:A)),$A2:$E2,0))
方法二:
先看图,G2里用公式取得排名,向右像下填充。
G2=IFERROR(RANK(A2,$A2:$E2,1)+COUNTIF($A2:A2,A2)-1,"")
M2根据数值排名取得列名,向右向下填充,方法很多,只列其中两种。
M2=IFERROR(INDEX($1:$1,MATCH(COLUMN(A:A),$G2:$K2,0)),"")
或者使用
M2=IFERROR(INDIRECT(ADDRESS(ROW($1:$1),MATCH(COLUMN(A:A),$G2:$K2,0))),"")
评论