Excel批量自动处理数据——indirect与averagei

2016-12-14  本文已影响0人  徘甚

在很多工作里,我们都会接触到大量固定格式的数据,大部分还可以用Excel打开,面对这些数据的处理,专业点的一般是编程处理,譬如matlab,Python和 R语言都是非常好用的。但是很多童鞋没接触过编程,也没时间学习或者对编程不感冒,所以我们今天介绍下用Excel批量处理下这样的数据,其思想与编程一样。

1. 取自己想要的值indirect ()

假如我们有个固定格式的数据文件,通过excel分隔符方式打开后每次都是下面这样子:


原始数据文件

现在我们新建一个sheet,每次我把这个sheet复制到要处理的excel数据文件中,然后输入要处理的工作表名,它会立刻自动处理好数据如下图(这里是小时平均数据):

最终效果

下面我们用indirect (把数据自动拿来)和__ averageifs__(根据条件平均)来实现这个功能。
在A4和B4单元格分别输入下面函数即可:

% 拿来sheet “AE33_AE33-S03-00287_20161127” 中的A, B列并合并,从第9行开始

=INDIRECT("'"&$B$1&"'"&"!"&"A"&ROW(A9)) + INDIRECT("'"&$B$1&"'"&"!"&"B"&ROW(A9)) 

% 拿来sheet “AE33_AE33-S03-00287_20161127” 中的BD列,从第9行开始

=INDIRECT("'"&$B$1&"'"&"!"&"BD"&ROW(A9))  

这里的原理是跨工作表取值是这样的形式
='sheet1'! A9
只要在想办法输入indirect('sheet1'! A9)即可取到工作表sheet1里的A9单元格里的值。

2. 任意时间平均averageifs ()

这里我们以小时平均为例。
首先我先输入要平均的时间如下图:


Average time range

这个时间只需要第一次编辑好,然后取工作表中的日期合并上即可实现自动化。
这里我是输入以下函数:

=DATE(MID($B$1,21,4),MID($B$1,25,2),RIGHT($B$1,2)) + TIME(ROW(B1), 0, 0)

然后再在E4单元格里输入:

=AVERAGEIFS(B:B,A:A,">="&G4,A:A,"<="&H4)

向下拖动,大功告成。
最后在average time range里输入任意想要平均的时间,都可以的,特别是很多时候我们希望去除开头结尾某些时间范围的点,这个就比透视表好用多了。
类似的函数还有
sumifs
minifs
maxifs
countifs

3. 自动化

上面的Excel做好后即可存下来备用。然后需要处理数据的时候,直接复制到相应的excel文件里,最后copypaste工作表名称到input里即可,如下图:


复制工作表到要处理的Excel文件里
上一篇下一篇

猜你喜欢

热点阅读