本文于2023年8月4日首发于本人同名公众号:Excel活学活用,更多文章案例请搜索关注!
SWITCH函数
日期数据的整理
SWITCH函数替代方案
大家好,我是冷水泡茶,今天在知乎有一邀请贴:
说实话,关于SWITCH函数,我好象是从来没有用过,一点印象都没有。于是赶紧搜了一下,微软官网上的说明:
这个函数有点像IF,也有点像VLOOKUP,但是更简洁,不过参数有限制,最多126个。
我们先撇开这个函数不谈,看到问主的这个案例,我首先想到的是做一个对照表:
接着再用VLOOKUP函数查找对应的值:
回到问主的问题,函数报错,于是我把他的公式复制到我的工作表里,没有出现问题,能正常使用的,不知为何他那边报错:
在准备回答问题的时候,我想把问主的公式整理成对照表的形式,怎么做才够快捷呢?我是这样做的:
1、把公式中1,“1”......31,“w"这段参数复制到一个单元格里。
2、分列,分隔符号,其他“,”。
3、把分列得到的数据转置。
4、在数据右侧单元格,通过MOD(ROW(),2)公式,把匹配值与返回值分别标上0或1.
5、筛选0和1则分别得到匹配值与返回值,把他们对应贴到对照表里。
6、完工!
1、我猜问主这么做,可能他要把所有的日期都变成长度为1的值,但我实在想不出来是什么原因。
2、如要提取出来日期中的月、日,我们可以用MONTH、DAY函数, 不过如果直接用MONT(日期)&“月”或DAY(日期)“日”的话,在字段排序的时候可能会出现问题,如按日1排序:
3、我们可以通过TEXT函数来把1位数日前添0,都变成两位数,这样排序就没有问题了。按日2排序。
或者,=TEXT(A2,"DD")&"日",则更为简洁。
问主直冲冷门函数而去,我们来看看有没有其他替代方案:
1、对照表方法,最常见,最实用,但要多加一个表。
(1)VLOOKUP法,最简单直接,我们前面说过了,不再重复;
(2)OFFSET+MATCH法:
=OFFSET(对照表!$A$1,MATCH(数据表!A2,对照表!$A$2:$A$32,0),1)
(3)INDEX+MATCH法:
=INDEX(对照表!$B$2:$B$32,MATCH(数据表!A2,对照表!$A$2:$A$32,0))
(4)LOOKUP法:
=LOOKUP(A2,对照表!$A$2:$B$32)
2、VLOOKUP+数组法,我们直接把公式改为:
=VLOOKUP(A2,{1,"1";2,"2";3,"3";4,"4";5,"5";6,"6";7,"7";8,"8";9,"9";10,"X";11,"Y";12,"Z";13,"A";14,"B";15,"E";16,"F";17,"G";18,"H";19,"J";20,"K";21,"L";22,"M";23,"N";24,"P";25,"Q";26,"R";27,"S";28,"T";29,"U";30,"V";31,"W"},2,0)
复杂程度跟SWITCH差不多,公式很长。
3、LOOKUP+数组法:
=LOOKUP(A2,{1,"1";2,"2";3,"3";4,"4";5,"5";6,"6";7,"7";8,"8";9,"9";10,"X";11,"Y";12,"Z";13,"A";14,"B";15,"E";16,"F";17,"G";18,"H";19,"J";20,"K";21,"L";22,"M";23,"N";24,"P";25,"Q";26,"R";27,"S";28,"T";29,"U";30,"V";31,"W"})
比VLOOKUP稍微简洁那么一丢丢,公式依然很长。
4、IF法,在转换参数比较少的情况下,可以用IF,但在本例中行不通。稍微列个例子意思一下:
=IF(A2=1,"1",IF(A2=2,"2",IF(A2=3,"3","")))
5、有没有其他方法?我想肯定有,我们就不再深究了。
1、数据查询、对照,或者说是转换,我们首选还是VLOOKUP+对照表,简单、直观。
2、在匹配值与返回值数量较少的情况下,我们可以用SWITCH,比如把性别男转换成1,女转换成0,我们可以用(假设性别字段在K2列):
=SWITCH(K2,"男",1,"女",0)
当然我们也可以用IF,对于二选一的情况,更简洁:
=IF(K2="男",1,0)
3、就此打住。
喜欢就点个赞、点在看、留个言呗!分享一下更给力!感谢!