请原谅,这并不是一条合适的标题,之所以如此,是因为今天看到傲看今朝写的一篇《1个EXCEL技巧,帮你告别加班?!》,我想分享另一种实现该文中的案例的方法供你参考,所以就取了这个孪生标题,你可以两篇对比着看,都有值得学习的地方。
该文中的案例是“将300百多条序列号平均分配到每个组员头上”,序列号是呈一列的,组员就叫它小A、小B、小C、小D、小E,小F吧,像下表这样:
该文使用了多个步骤来实现分配,并给了很多操作性的技巧,即不使用公式也能做到,对于很多人来说,这个方法就够用了。
但如果希望进阶一点,能用一条公式解决,岂不快哉?!
公式:=IF(ROW()<63,INDEX($A:$A,ROW()+62*(COLUMN()-2)),"")
然而,给你一条鱼并不重要,重要的是钓到这条鱼的方法。
一条公式并不重要,重要的是产生一条公式的思路。
第1个念头,得知道个数字:每个人平均要分配到多少个序列号?
这很简单:370/6≈62。
第2个念头,从最简单的部分开始:写出分配给小A的第一个小公式
如果让你先想想,370个序列号分配给6个人的步骤应该是怎样的,你怎么做?
应该是:把2-63行(因为名字占了一行)的序列号给小A,再把64-125行的数据给小B,再把126-187行的数据给小C,以此类推。
在一个表格里运用公式时,第一个单元格所需要考虑的方面是最少的,最容易写出公式,当然就从这里开始咯。
把2-63行的序列号给小A
↓
就是把第2行的数据提出来放在小A这列的第2行
把第3行的数据提出来放在小A这列的第3行
↓
小A这列的第N行的内容就是序列号的第N行
↓
通过指定行号和列号提取数据的函数是INDEX
↓
输入公式=INDEX($A:$A,ROW())试试
下拉公式后都顺利提取出来了:
第3个念头,小B、小C他们怎么办呢:分析他们数据的关系
小A这列的第N行的内容就是序列号的第N行
小B这列的第N行的内容应该是序列号的第N+62行
小C这列的第N行的内容应该是序列号的第N+124行
↓
简单的倍数关系
↓
小A这列的第N行的内容就是序列号的第N+62*0行
小B这列的第N行的内容应该是序列号的第N+62*1行
小C这列的第N行的内容应该是序列号的第N+62*2行
↓
后面的0、1、2是逐1递增的,小A、小B、小C的列号也是逐1递增?统一他们的关系
↓
小A这列的第N行的内容就是序列号的第N+62*(该列列号-2)行
小B这列的第N行的内容应该是序列号的第N+62*(该列列号-2)行
小C这列的第N行的内容应该是序列号的第N+62*(该列列号-2)行
↓
写出公式:=INDEX($A:$A,ROW()+62*(COLUMN()-2))试试↓
横拉、下拉公式后的结果:
大功告成了?我们双击单元格右下角的十字标把公式拉到底试试。
什么鬼?每个人只需要分配62行数据的话,为什么63行下面还有数据?每个人我只需要62行啊,这公式不是多此一举瞎操心吗?
第4个念头,增加判断条件:去除公式可能出现的多余计算
啊,忘了再添加一个条件:该行行号大于63的话,就不要再提取数据了。
反过来说就是:该行行号小于等于63的话,就用前面的公式计算,否则就留空。
写出公式:=IF(ROW()<=63,INDEX($A:$A,ROW()+62*(COLUMN()-2)),"")试试
于是有了开头的一幕,每个人提取62行数据之后就留空了:
本文到此应该就结束了,但我想到也许有人会说:才300多条数据,直接选择-复制-粘贴,分分钟也解决了,何必搞得写一条公式这么麻烦?
对啊,才300多条数据,Ctrl+C、Ctrl+V可能更简单更快捷,但其实我想说的是:
只有在平常的小场景中常常练习公式和写公式的思路,才能在你面对几千几万条的庞大的数据时得心应手,一天甚至几天的工作量分分钟就得到结果,哪怕写公式花了半个小时,这才是告别加班的正确方式!