Excel函数之if、vlookup、indirect

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))

接下来的工作就只需要往下拖动单元格就能得到想要的结果啦:)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容