最近在尝试使用indirect生成动态字段来定义为某个名称,比如Summary_Date和Summary_Profit。
本想使用这两个字段用于生成动态图表的, 最终到了最后一步竟然发现无法引用。
用=Summary_Date不行,说是错误。用=!Summary_Date也不行,说是错误。再用='xxxx.xlsx'!Summary_Date,错误信息变化了,说是无法引用……我考。
然后开始不断百度,先是好几个贴子说是indirect生成的动态字段只能用于工作表云云,不能用于图表。反正就是说,死了这条心吧。
突然,发现有个网页说,要使用完整的引用,就可以了。比如:
今天遇到一个实例问题:在对应不同对象的记录里,查找某事件相关的日期,然后返回最早及最晚的日期。
最早和最晚无非用MIN()和MAX(),难度在于在一堆记录里,某个事件可能会有好几条记录相关。当然,这个工作用数据透视表也可以完成,但我这不是研究如何用函数得到嘛。那最终的问题在于,如何就某个事件返回一个数组,然后就这个数组进行最小最大分析。
在百度上查了一下,我们采用具体一个案例介绍如何实现这个目的。
Excel真是学无止境。我一直觉得自己的Excel水平还可以,想不到用的时候发现自己还是不行。
最近在折腾一个事情,想某段长度列的总和。
本想用sumifs的,结果sumifs不能处理复杂的多条件求和。结果转而使用sumproduct。sumproduct真是牛啊,真是多条件求和。
结果,sumproduct不能用于整列(sumifs可以),必须明确的某一段数列。用了这个某一段数列,我就折腾开了。
比如,我要A2:A107这段数字,可是由于107是在变的,我不能直接写A2:A107,必须用公式。我先得到107这个值,比如存在B1。这个107是怎么得到呢?match用于返回找到的值的所在行,而不是返回找到的值。
=MATCH(VLOOKUP(9E+304,'Data from FIN'!U:U,1),'Data from FIN'!U:U,0)
然后怎么用这个B1的值,间接表示出A2:A107这段引用呢?
发现方法有两种:
简单的是:用=indirect("'Data from FIN'!$A$2:$A"&$B$1)。indirect就是将字符串转义为引用。有点像C语言中的指针。用address函数可以产生某个单元格的引用。
复杂的是:用=offset('Data from FIN'!$A$1,1,0,$B$1-1,1)。offest是基于某个位置,偏置row行,偏置column列,高height行,宽width列。
另外,就是针对这个数列,数组,矩阵,在函数输完后,按F9,可看到矩阵。逗号表示行,分号表示列。用shift+ctrl+enter表示确认。
我以前摘录了一个方法,如何破解Excel VBA工程的密码。
但,有时候也会遇到需要破解工作表保护密码的时候,不管是你准备破别人的表格,还是自己忘了当初煞费苦心设计的强密码。
方法是这样的,也是我网上找来的。这个方法我在Excel2007里面验证了一下,有用。
下面是方法:
1、打开文件
2、工具---宏----录制新宏---输入名字如:aa
3、停止录制(这样得到一个空宏)
4、工具---宏----宏,选aa,点编辑按钮
5、删除窗口中的所有字符(只有几个),替换为下面的内容(复制吧)。
6、关闭编辑窗口
7、工具---宏-----宏,选DecodeAllInternalPasswords,运行,确定两次,等2分钟,再确定。OK,没有密码了!!!
Excel计算分析常用函数
- SUMPRODUCT
- SUMIFS
- COUNTIFS
- AVERAGEIFS
- SLOPE
- INTERCEPT
- VLOOKUP
- HLOOKUP
先想到这些