冷门,如何让函数查询数据时把数字格式也带过来?

职场   2024-11-27 07:55   福建  

HI,大家好,我是星光。

之前给大家分享了一系列冷门函数,今天天气降温的厉害,就再给大家再分享……三个


1 丨 CELL函数


……打个响指,VIP会员群里有朋友提了个问题:如何用函数判断单元格内的值是百分比格式?▼


我举个例子。如下图所示,B列的数据有小数、整数和百分比格式,需要在C列编写函数,当B列是百分比格式时,返回占比百分比值,否则返回空。


有朋友可能会想到使用FIND函数判断B2单元格是否存在符号%,于是编写函数如下:

FIND法 ▼
=IF(ISNUMBER(FIND("%",B2)),TEXT(B2,"占比0%"),"")

然而由于百分比符号%单元格格式产生的,单元格内的值实际为26.33,并不存在百分比符号,因此这个公式并不能返回正确的结果。

正确解法的参考公式如下:

CELL法 ▼
=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函数返回目标结果,否则返回假空。


2 丨 TYPE函数


将以上问题做个延伸,就联想到了另外一个问题。

如下图所示,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函数查询整数对应的数据类型。

摊手,耸肩~~别走,还有更冷的


3 丨 GET.CELL函数


问题继续延伸,我们会联想到另外一个更有趣的问题。

如下图所示,A:B列是数据源,B列有各种自定义格式的数据,小数、分数、日期、美金、人民币……


现在,你需要根据D列的名称获取对应的数据,并保留数据源自定义的数字格式。比如B9单元格的内容是98,被自定义格式显示成了9盘8碗,那E列的计算结果应该是9盘8碗,而不是98。F列是模拟结果。

如果直接使用VLOOKUP函数,返回的结果会变成默认的常规格式,比如E5单元格返回结果98。

你的情人VLOOKUP ▼
=VLOOKUP(D2,A:B,2,0)


有朋友可能会想到使用刚学的CELL函数,CELL函数确实能读取单元格设置的格式,不过局限性很大

如下图所示,在C2:C9单元格输入CELL函数,可以看到返回的结果并不准确。分数和小数都返回了G,美金$和人民币¥都返回了,2。前者可以忍,后者涉及身家钱财,那属实忍无可忍。


既然这位叫CELL的函数不合适,那就好聚好散,再找个新女男朋友吧。

在E2单元格输入以下公式,并向下复制填充即可:

你的格式 ▼
=TEXT(VLOOKUP(D2,A:B,2,0),格式)


VLOOKUP函数获取查询结果,再使用TEXT函数对其格式化。需要注意的是,TEXT的第2参数的格式字符串,是一个名为格式的自定义名称

创建自定义名称的方法如下:

先选中E2单元格,在【公式】选项卡下依次单击【定义名称】→【新建】,名称设置为格式,范围保持工作簿不变,引用位置填写以下函数公式后单击【确定】命令。

新朋友GET.CELL ▼
=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想学啥学啥

👀


本文由公众号“Excel星球”首发。
点击阅读原文系统学习Excel!

Excel星球
微软全球最有价值专家(Excel MVP),上千篇原创图文和视频教程随学随用,随用随查,建议常用Excel的职场人关注。
 最新文章