之前给大家分享了一系列冷门函数,今天天气降温的厉害,就再给大家再分享……三个……打个响指,VIP会员群里有朋友提了个问题:如何用函数判断单元格内的值是百分比格式?▼我举个例子。如下图所示,B列的数据有小数、整数和百分比格式,需要在C列编写函数,当B列是百分比格式时,返回占比百分比值,否则返回空。有朋友可能会想到使用FIND函数判断B2单元格是否存在符号%,于是编写函数如下:
=IF(ISNUMBER(FIND("%",B2)),TEXT(B2,"占比0%"),"")
然而由于百分比符号%是单元格格式产生的,单元格内的值实际为26.33,并不存在百分比符号,因此这个公式并不能返回正确的结果。
=IF(LEFT(CELL("format",B2))="P",TEXT(B2,"占比0%"),"")
CELL函数相对比较冷门,它的第1参数设置为format可以返回引用单元格的格式。其中常规格式返回G,日期格式返回Dn,百分比格式返回Pn等等。CELL("format",B2)部分,获取B2单元格的格式,当格式为整数百分比时,返回结果P0。P是percent的首字母,0是小数位数为0。如果是两位数的百分比格式,则返回P2。使用IF函数判断CELL函数结果首字母是否为P,如果成立,则使用TEXT函数返回目标结果,否则返回假空。如下图所示,A列是数据,包含了数字、逻辑值、文本等,需要在B列计算其对应的数据类型。TYPE也是一个比较冷门的函数,它可以用整数返回数据的类型。数字返回1、文本返回2、逻辑值返回4,错误值返回16。其中日期是数字的一种,TYPE函数也返回1。为了区分日期,我们可以……你想的对,使用上一个案例中的CELL函数。=IF(
LEFT(CELL("format", A2)) = "D",
"日期",
VLOOKUP(
TYPE(A2),
{1, "数字"; 2, "文本"; 4, "逻辑值"; 16, "错误值"},
2,0
)
)
公式先用CELL函数判断是否为日期,然后用TYPE函数返回其余的数据类型对应的整数,再用VLOOKUP函数查询整数对应的数据类型。摊手,耸肩~~别走,还有更冷的如下图所示,A:B列是数据源,B列有各种自定义格式的数据,小数、分数、日期、美金、人民币……
现在,你需要根据D列的名称获取对应的数据,并保留数据源自定义的数字格式。比如B9单元格的内容是98,被自定义格式显示成了9盘8碗,那E列的计算结果应该是9盘8碗,而不是98。F列是模拟结果。
如果直接使用VLOOKUP函数,返回的结果会变成默认的常规格式,比如E5单元格返回结果98。有朋友可能会想到使用刚学的CELL函数,CELL函数确实能读取单元格设置的格式,不过局限性很大。
如下图所示,在C2:C9单元格输入CELL函数,可以看到返回的结果并不准确。分数和小数都返回了G,美金$和人民币¥都返回了,2。前者可以忍,后者涉及身家钱财,那属实忍无可忍。
既然这位叫CELL的函数不合适,那就好聚好散,再找个新女男朋友吧。=TEXT(VLOOKUP(D2,A:B,2,0),格式)
VLOOKUP函数获取查询结果,再使用TEXT函数对其格式化。需要注意的是,TEXT的第2参数的格式字符串,是一个名为格式的自定义名称。
先选中E2单元格,在【公式】选项卡下依次单击【定义名称】→【新建】,名称设置为格式,范围保持工作簿不变,引用位置填写以下函数公式后单击【确定】命令。=GET.CELL(7,INDEX($B:$B,MATCH($D2,$A:$A,0)))
INDEX+MATCH函数组合,根据D2单元格的人名获取对应的B列单元格的引用。
在函数系列教程里咱们详细讲过,INDEX和VLOOKUP最大的不同,是它返回的结果为单元格引用,而VLOOKUP返回的只是单元格的值。单元格妻妾成群,值只是它众多属性的之一,其它还有地址、数字格式、行高、列宽等等。
INDEX返回了单元格引用后,再使用GET.CELL函数查询该单元格的数字格式。
GET.CELL是一个宏表函数,有两个参数,第1个参数是目标单元格的引用,第2个参数是需要获取的单元格属性的类型,常用类型有7、24和63。
7是数字格式,24是字体颜色,63是单元格填充色——正如聪明的你所想,后两者可用于按颜色统计数据……以后再聊吧。在F2单元格输入公式=格式,可以看到返回如下结果👇https://pan.baidu.com/s/1eVucR7yDW0Xs6LyhjbUMiA?pwd=1111
⏩需要系统学习Excel却找不到优质教程?学习Excel的过程中遇到疑难问题,却找不到人及时作出解答?
加入我的付费社群,学习+训练+答疑,与6000+在线会员一起,同微软最有价值专家MVP同行,全面精进Excel之道
🚂>>~
加入我的付费会员,全面学习Excel
透视表 函数 图表 VBA PQ想学啥学啥
👀