如何根据单元格是否有值 , 取到对应行的标题(应该是对应列标题 , 属于提问描述有误)?并且每行中有且只有一个非空单元格 。
文章插图
考虑到数据隐私 , 我自己模拟了一个简单的表格 , 来看如何解决这个问题 。
文章插图
▲ 教学案例模拟
如图 , 左侧表格记录的是A、B、C、D、E5名选手在一项比赛的用时 , 总共4局 , 只记录唯一一个成功的选手及用时 , 记录了4行 。现在要求在I列处 , 将每一局成功的选手提取出来 。请考虑1分钟 , 如果是你 , 你会使用什么方法?今天 , 徐老师跟大家分享两种方法 。
方法1:数组法
对这个问题 , 大多数人的思考逻辑是:在每一行数据中 , 挨个判断每个单元格是不是非空 , 如果是 , 则将对应列标题提取出来 。逻辑很简单 , 但是真的写起来是有难度的 , 需要对函数、对数组有着非常熟练的掌握 。
挨个判断每个单元格——须用到数组;
是不是非空单元格——NOT(ISBLANK())
找到对应标题的单元格地址——ADDRESS(所在行 , 所在列)
提取对应标题——INDIRECT(ADDRESS())
所以你看 , 首先你得知道EXCEL里有ISBLANK、ADDRESS、INDIRECT等等这些函数 , 然后才有可能想起它们 , 将思路拆解并转化为每一步公式 。否则 , 即使你的思路再清晰也没用!学习EXCEL , 就是帮助我们把有思路真正转化为有效思考 , 否则就是空中楼阁 。经过拆解后 , 下面来看我写的公式:
文章插图
公式:{=INDIRECT(ADDRESS(2,MAX(IF(NOT(ISBLANK(C3:G3)),COLUMN(C3:G3),0)))) }
【LOOKUP函数查找唯一值,简单又实用!】利用数组公式判断一行中每个单元格是否为非空 , 如果是则返回对应的列号(COLUMN函数) , 否则返回0 。这样IF函数返回的就是一个数组 , 以第1局为例 , 返回结果为{0,4,0,0,0} 。IF外面嵌套MAX函数 , 从数组中求出最大值 , 以第1局为例 , 即为4 。再用ADDRESS(2 , 4)计算出对应标题的单元格地址 , 即$D$2单元格 , 最后用INDIRECT函数返回文本指向的单元格 , 得到$D$2对应值——B 。其它几行 , 同样的公式 。
推荐阅读
- Excel中Lookup函数使用很简单,你会吗?
- LOOKUP函数从入门到放弃
- lookup函数的第3个参数,这次会让你大吃一惊!
- lookup函数的实际应用,查找最后一次采购日期
- LOOKUP函数多表查找其实很简单
- LOOKUP函数轻松判断等级,不要太好用!
- Lookup函数使用介绍
- lookup函数用法详解
- LOOKUP函数与VLOOKUP函数,你总会喜欢一个的
- LOOKUP函数怎么用?今天咱们一起学