在很多工作里,我们都会接触到大量固定格式的数据,大部分还可以用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 ()
这里我们以小时平均为例。
首先我先输入要平均的时间如下图:
这个时间只需要第一次编辑好,然后取工作表中的日期合并上即可实现自动化。
这里我是输入以下函数:
=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里即可,如下图: