序列问题着实绕脑子,但其实解决问题的都是很简单的基础函数

文摘   2024-10-08 19:50   广东  






朋友们好,今天和大家分享一道数据排列的题目。涉及到的函数都很简单,但却着实把我给绕晕了。

题目共有两问,是这样的:




题目要求将左侧的多列数据转换成右侧的单列数据。研究了半天,我终于搞明白了数据提取的规则。

源数据中4行为一组,每一组中的数据提取完毕后才能提取下一组中的数据。

每一组中先行后列提取。

第二问恰好和第一问相反,需要将多单列数据改写成多列的格式。




这类题目,我们总是要用到MOD函数、INT函数、ROW函数和INDEX函数的。



01

单列转多列


先看第一问。

想要达到第一问的效果,INDEX函数的第一参数是A2:D17,第二参数和第三参数应该是下面的样子:




这其实就是将文字版的提取规则用数字形式表达了出来。那么如何实现上面的效果呢?




在单元格F1中输入下列公式,并向下拖曳即可。

=INDEX(A$2:D$17,4*(INT((ROW(A1)-1)/16))+MOD(ROW(A1)-1,4)+1,MOD(INT((ROW(A1)-1)/4),4)+1)

这道题目,主要就是如何构建INDEX函数的第二参数和第三参数。

4*(INT((ROW(A1)-1)/16))+MOD(ROW(A1)-1,4)+1

这部分实现了第二参数。它需要以16为周期循环。

在第一个周期中,以1234来循环;

在第二个周期中,以5678来循环

...

ROW(A1)小于等于16时,4*(INT((ROW(A1)-1)/16))的结果是0MOD(ROW(A1)-1,4)+11234循环。

ROW(A1)小于等于32时,4*(INT((ROW(A1)-1)/16))的结果是4MOD(ROW(A1)-1,4)+11234循环,整个部分按5678循环。

ROW(A1)小于等于48时,4*(INT((ROW(A1)-1)/16))的结果是8MOD(ROW(A1)-1,4)+11234循环,整个部分按9101112循环。

...

MOD(INT((ROW(A1)-1)/4),4)+1

这部分实现了第三参数。由于第三参数只需要按照1111222233334444来循环,因此这部分 相对也比较简单,不再赘述了。

INDEX(A$2:D$17,4*(INT((ROW(A1)-1)/16))+MOD(ROW(A1)-1,4)+1,MOD(INT((ROW(A1)-1)/4),4)+1)

最终,INDEX函数依次返回答案。



02

多列转单列


第二个问题。

在第二问中,源数据处在一列中,仍以16为周期。第一个周期中,4个数值为一组,依次排到前4行的4列中。第二个周期中,仍以4个数值为一组,依次排到5-8行的4列中。后面依次排列。

因此,INDEX函数的第二参数的效果应该是下面这样子的:

首先,公式写成这个样子

16*MOD(INT((ROW(A1)-1)/4),4)

MOD(INT((ROW(A1)-1)/4),4)按照0123循环,乘以16后按照0163248来循环。




接下来,再通过COLUMN函数,来实现列方向上的效果。

16*MOD(INT((ROW(A1)-1)/4),4)+MOD((ROW(A1)-1),4)+1+4*(COLUMN(A1)-1)





下来我们一起来看看如何书写这个公式吧。




在单元格C2中输入下列公式,并向下向右拖曳即可。

=INDEX($A$2:$A$65,16*MOD(INT((ROW(A1)-1)/4),4)+MOD((ROW(A1)-1),4)+1+4*(COLUMN(A1)-1))

小伙伴们,你们能自己解析一下这个公式吗?记得给我留言哦!

好了,我终于绕出来了!


本期内容练习文件提取方式:

通过百度网盘分享的文件:转换表格为单列.xlsx

链接:https://pan.baidu.com/s/19xEM6Blt7uviQFJmbx9UKA?pwd=d6vf

提取码:d6vf

好了朋友们,今天和大家分享的内容就是这些了!喜欢我的文章请分享、转发、点赞和收藏吧!如有任何问题可以随时私信我哦!


Excel应用教程
主要提供Excel vba,函数,图表,数据透视表,pq,Js等教程
 最新文章