Excel函数通过实操学习比起看神马的教程有效多了,当然,要有实操的机会,今天老大让我在后台里面导出3天的数据,并提取出其中的数据整理成固定的样式为后面的分析做准备。
任务
(数据已经过随机数处理)
1. 分析
将左侧无间隔行的排列方式转变为右侧有间隔行的排列方式。方法其实多种多样,最先能想到的两种方法是① 选中左侧所有的偶数行并插入行 ② 根据左侧行由函数生成右侧行。最终决定用第二种方法试一试,那样就是一个纯数学问题了。
2. 准备工作
为了更方便的提取数据,我把三天的数据分别贴在了3个sheet里面
3. 函数运用
3.1 格式转换
注意到右侧单数行对应于左侧的值,具体的是右侧的单元格的内容对应于其行数除以2再加1,这需要用到indirect函数做定位。而右侧双数行的值全部为空。显然这里涉及到了一个判定条件,要用到if。
那么函数可以写为:
=if(MOD(ROW(), 2), INDIRECT(ADDRESS(ROW()/2+1, 1)), "")
写好后直接往下拖动即可,生成下面右侧所示的排列格式,接着将它复制到主表了里面。
3.2 数据提取
单数行是第一列对应值的uv,双数行是第一列对应值的pv。
判定单双数依旧是用if(MOD(ROW(),2),,)来实现。
单数的时候,以8月23日为例子。vlookup(A3, '0823'!$E$1:$G$50, 3, false)
双数的时候,这个时候vlookup的需要用INDIRECT函数做定位,写作
VLOOKUP(INDIRECT(ADDRESS(ROW()-1,COLUMN()-1)),'0823'!$E$1:$G$50,2,FALSE),其中INDIRECT(ADDRESS(ROW()-1,COLUMN()-1))表示的是目标单元格左上角单元格的值。注意到这里对于数据区域均作了绝对引用。
所以最后写出来的函数是:
=IF(MOD(ROW(),2),VLOOKUP(A3,'0823'!$E$1:$G$50,3,FALSE), VLOOKUP(INDIRECT(ADDRESS(ROW()-1,COLUMN()-1)),'0823'!$E$1:$G$50,2,FALSE))
接下来的工作就只需要往下拖动单元格就能得到想要的结果啦:)