来自爱上Excel合伙人社群的一个提问:
模拟数据如下:
1问题:
在O2单元格下拉列表中选择负责人,下方自动列出该负责人相关数据
2要达到的效果:
3解决方法:
在N4单元格输入公式:
=INDEX($A$4:$J$7,ROW(A1),MATCH($O$2,$A$2:$J$2,0)+MOD(COLUMN(B1),2)-1),向右向下填充。
4公式原理分析:
Index函数功能:
在给定单元格区域中,返回特定行列交叉处的值或引用。
Index参数说明:
参数1:返回所需要数据的数据区域,这里使用$A$4:$J$7
参数2:返回第几行的数据,这里使用Row(A1)
参数3:返回第几列的数据,这里使用MATCH($O$2,$A$2:$J$2,0)+MOD(COLUMN(B1),2)-1
下面重点来分析下该公式的第三参数:
首先我们要分析一下数据分布的规律,将它转换成数值
效果如下:
转换出来的负责人为什么是2,4,6,8,10呢?因为他们所在列的数字列号就是2,4,6,8,10
这个列号是根据数据区域来转换的,而不是根据工作表的列来转换的哟
那接下来内容里的12345…8910能不能理解了呢?
问题:为什么每一列的数字都在变化,而行的却没有变化呢?如果不理解请看上面的描述
这样转换出来的效果能看出,每选择一个负责人,他的数据所对应的列就是他所在的位置列和负一列,所以我们要想办法在结果区域中返回这样的数字
首先使用的是Match函数:MATCH($B$42,$A$2:$J$2,0)
参数1:要查找的值,引用$B$42单元格
参数2:查找区域,也可以理解为在什么地方查找,引用$A$2:$J$2单元格区域
参数3:查找匹配方式,0这里使用精确匹配(如果不用精确匹配那找出来的有可能是其它结果)
经过测试,它返回的效果如下:
这是一个公式拉出来的效果,通过与我们整理出来的效果对比可以看出区别在于负1列的值需要减1,也就是说我们需要加下面这样的数值才能得到我们需要的效果
为什么是这样的呢???
2+-1=多少? 2+0=多少?
6+-1=多少? 6+0=多少?
赶紧拿计算器算一下,看结果是不是刚好是我们需要的,“别怀疑,我就是这样猜的,纯属巧合!”
这样的效果怎来呢?
使用 Mod 函数, MOD(COLUMN(B1),2)-1
返回两数相除的余数,然后-1
参数1:COLUMN(B1),目的回指定单元格引用的列号
B列是第2列,2/2余数为0,0-1自然就是负1了
C列是第3列,3/2 余数为1,1-1=0好像也是正确的吧,真是太巧了
当然,你也可以偿试修改B1为其它单元格,反正函数玩不坏,玩坏了也别叫我赔…
接下来把Match和Mod套起来看一下效果是不是我们要的了呢?
测试好以后,再把这个公式放到Index函数的第三参数吧,看看效果怎么样
注意match函数的第一参数是要查找的值,即O2单元格内容
好了,今天的分享就到这里了,若有疑问欢迎留言或到合伙人社群提出疑惑!
有关VBA解法我们下期同一时间再见!