Excel小笔记

我的新函数篇:

PHONETIC函数如果拼接的单元格是本身是公式计算的,会为空。

MID:截取单元格内的字符段

OFFSET:可按照坐标进行平移单元格或区域

ISNUMBER(FIND):两个函数配合使用可以替代if模糊查找的功能,以便有些函数不能使用通配符

SMALL(array,k):返回数组中倒数第K小的数值

INDEX(区域,row,column):返回区域中位于row行,column列的单元格的值,当区域为一列时,可不用column参数,例子参考10

Row(X:X)或Column(X:X):X为常数,当希望下拉或者横拉时,参数呈某种规律递增时,可采用此公式作为相应参数

ROWS(区域)或columns(区域):计算区域的行数和列数,例子参见14,条件格式

Match(lookup_value,lookup_array,1/0/-1):返回lookup_value在lookup_array中的相对位置,例如第几行第几列,lookup_array只能是单列或单行

ROUND(up/down)(value,dig):四舍五入/向上取/向下取,dig为保留的小数点数,当为0时,则表示取整,例子参考13

Text(81,” r0c0"):结果为r8c1,第二个参数为格式,具体格式类型可以通过查看单元格格式,当需要返回单元格行号和列号时可以将行号列号进行移位运算,然后使用Text的格式进行提取,例子参考13.

INDIRECT("A8")或("R8C1") :结果为位于A8单元格内的值,可结合text使用通过动态获取行号列号进行取值,例子参考12,13

excel操作篇

1.当Excel中出现含有外部链接是否需要更新等信息时,如果要进行外部链接排查,可以按Ctrl+F3,排查名称管理器;数据-》链接(编辑链接)(每个sheet试一下);或去查找公式是否引用了其他表格等等 

2.ctrl+pageup/pagedown可以快截切换sheets

3.excel单元格中如果想打出下滑线时,按下滑线按钮再按空格时会显示,但当鼠标移其他单元格时就会消失,此时采用的方法是:双击单元格进入输入模式,将输入法调整至英文模式+半角,点击“下滑线”按钮使之有效,按下shift+-(数字键0旁边)即可。原理是:当下滑线上没有文本内容时,excel会自动做隐藏处理,上述方法是利用在下滑线上输入-字符,同时-字符在英文半角模式下和下滑线所处位置一样,所以两线重合,会出现下滑线,而不会出现断点的情况(如果只是shift+-,则会出现断点)

4.在excel筛选日期时,会出现日期格式如下的筛选,很不方便,修改方法如下:将单元格设置成日期格式,菜单-数据-分列-分隔符号-分号-日期-完成,则可变成下图右侧所示的筛选情形。

Best practices and Lessons learnt 

1. sumproduct

 在使用countif,countifs,单行计数很好用,但是进行区域计数时,在参数中无法进行区域的计算例如配合if,abs,+-*/等函数进行计算,必须在表单中借用辅助列先将结果计算出在进行比较。此时可以使用sumproduct进行计数(无需添加辅助列);分类统计时多考虑一下透视图 

sumproduct参数若是含有计算动作时,当最终表达式得到无效结果如#value时,请检查数据源区域是否含不符合计算的单元格格式,如是数字计算则检查所选单元格是否全是数字或百分比等格式 

sumproduct在多条件求和时通常采用*来衔接各个条件 ,而不是按照他原本的语法array1,array2等,原因是因为求和时条件的出来的结果为true,false,如果用,隔开true和false不能做运算最终结果为0,而用*来链接,会将true,false转为1,0,例如

=SUMPRODUCT((Sheet3!$C$2:$C$12=A10),(Sheet3!$B$2:$B$12=B10),(Sheet3!$D$2:$D$12=E10),(Sheet3!$E$2:$E$12=F10),(ROW(Sheet3!H$2:H$12))) 结果为0,

前4个条件都是逻辑运算,返回true,false,true false不能直接相乘在相加

 ==SUMPRODUCT((Sheet3!$C$2:$C$12=A10)*(Sheet3!$B$2:$B$12=B10)*(Sheet3!$D$2:$D$12=E10)*(Sheet3!$E$2:$E$12=F10)*(ROW(Sheet3!H$2:H$12)))结果有效为12,前4个条件都是逻辑运算,返回true,false *转成1,0在进行计算

= SUMPRODUCT((Sheet3!$C$2:$C$12=A10)*(Sheet3!$B$2:$B$12=B10)*(Sheet3!$D$2:$D$12=E10)*(Sheet3!$E$2:$E$12=F10),(ROW(Sheet3!H$2:H$12))) 结果同样有效,为12,最后一个row返回的本身就是数值,转或者不转都可以

4. 饼图除了单图饼图,还有复合饼图(一大一小,将需要描述的子项目延伸出来);还有一种高级饼图叫子母图,子项目扇形被包含在大项目中显示,显示时其实是将小圆的另外一个扇形进行了隐藏


5.在做图表时源数据各维度为了排版成连续状态,但是有的表只需要部分维度,可通过如下这种方法,选择的数据区虽为连续,但是最后的图表没选上的维度不会显示,这样方便图形的后期维护可以成片选择区域,然后进行显示上的筛选


6.通配符:

在条件匹配时,可以使用通配符“*”&进行计算,如countif条件,但是sumproduct不能和通配符使用,若想模糊查询可用isnumber配合find函数;

if函数不能使用通配符 

以特定字符为截取单位去查找或者替换时,也可用通配符*,如通过下面的查找就能替换掉|后面的字符

7.数组公式能帮助自动将满足条件的一系列行数据显示出来,数组公式单元格双击之后公式会消失,需要重新按下ctrl+shif+enter

=INDEX(执行中!A:A,SMALL(IF((执行中!$T$5:$T$300<>"")*(执行中!$U$5:$U$300<>"")*(执行中!$T$5:$T$300-执行中!$U$5:$U$300>0.2),ROW(执行中!$5:$300),4^8),ROW(1:1)))&""

功效:能将源数据中(执行中sheet)符合条件T列,U列不为空,T列比U列大0.2,的数据的A列值全部提取出来

解释:最外层函数为INdex(一列,行数),&""是为了将返回结果转为文本

行数获取函数为

SMALL(IF((执行中!$T$5:$T$300<>"")*(执行中!$U$5:$U$300<>"")*(执行中!$T$5:$T$300-执行中!$U$5:$U$300>0.2),ROW(执行中!$5:$300),4^8),ROW(1:1)),获取满足条件的区域的行数数组ROW(执行中!$5:$300)(例如1,4,6行满足条件,则此处结果为{1,4,6}),然后用SMALL函数得到这数组中倒数第ROW(x:x)小的函数,此处的ROW(1:1)是为了在下拉时,返回值能顺序增加如1,2,3,4等;

当没有满足条件的区域时,就会返回4^8=65536(excel最大行数),通过index(列,4^8)公式,此时将返回空值。所以根据计算原理,此处4^8换成大于源数据区域的最大行数均可。

8.当IF配合and实现多条件选择不好用时,可以将个条件*,其乘积作为if的条件参数

9.excel图表有可能因为版本问题颜色不可用,如.xls格式的用13版本打开无法选择颜色,需要另存为其他格式之后再打开才可以调颜色

11.当公式计算错误,但是不知道为何时,可以选择公式->公式计算,通过单步运算来定为错误。

12:={INDIRECT(TEXT(SMALL(IF($A$8:$O$10<>"",ROW($A$8:$O$10)*10+COLUMN($A$8:$O$10),4^8),COLUMN(A1)),"r0c0"),FALSE)}

返回A8:O10区域内不为空的单元格值,横拉则会依次显示

13.INDIRECT结合数组函数和其他函数一起使用时,其参数若在计算中也成为数组,可用sum等函数进行转换,将数组转为单个值,如下

=INDIRECT("Sheet2!"&TEXT(SMALL(IF(I

NDIRECT("Sheet2!$A"&(8+SUM((ROW(A1)-1)*3)&":$O"&(10+SUM(ROW(A1)-1)*3)))<>"",ROW(INDIRECT("Sheet2!$A"&(8+SUM((ROW(A1)-1)*3))&":$O"&(10+SUM((ROW(A1)-1)*3))))*100+COLUMN(INDIRECT("Sheet2!$A"&(8+SUM((ROW(A1)-1)*3))&":$O"&(10+SUM((ROW(A1)-1)*3)))),4^8),COLUMN(A1)),"r0c00"),FALSE)

如果没有sum对row进行计算,

则8+(ROW(A1)-1)*3 = {8},当使用sum时结果为8,这样就可以和前面的字符进行拼接成为“Sheet2!$A8”,否则拼接出来为{“Sheet2!$A8”},此变化和excel计算机制有关。

另外关于此公式中提取区域行号+列号,采用了行号列号移位处理,也就是行号*100+列号,然后通过text的format进行提取相应行列号。需要注意的是,当列号小于10时,行号*10,text_format用“r0c0"即可,当列号大于10小于100时,行号*100,否则相加之后对于列号>=10时会出现错误的情况(如8行*10 +10 =9行0列)

这种通过对行列进行计算获取值的思路很强大,要多多利用:

例子1:=    {INDEX(A:A,MOD(SMALL($B$2:$B$11/1%%+ROW($2:$11),ROW(A2)),100)) } 获取最小值所对应的A列的值,最小值重复时也可以用,值虽然可以相同,但行号不同,在不同的参数上做文章

例子2:={INDIRECT("A"&RIGHT(SMALL($B$2:$B$11*10000+ROW($B$2:$B$11),ROW(A1)),2))},和上述功能一样,只不过一个是通过100取余,一个是截取最后两位数来获取行号

例子3: 

={IF(ISERROR(INDEX($A:$G,COLUMN(A1)+ROUNDDOWN(ROW(A1)/8,0)*8,ROW(A1)-ROUNDDOWN(ROW(A1)/8,0)*8)),"",INDEX($A:$G,COLUMN(A1)+ROUNDDOWN(ROW(A1)/8,0)*8,ROW(A1)-ROUNDDOWN(ROW(A1)/8,0)*8))} 区域转置,利用转置前后行号列号的关系,使用公式进行区域转置


14.关于条件格式中的这种公式(MATCH($L$7,$D$6:$H$6,)=COLUMNS($D$7:D7))--》columns($D$7:D7),作用的区域时同行连续列,所以参数$D$7:D7第二个没有使用$进行锁定,条件格式中的公式在区域中的作用力自带拖拽功能,例如此公式作用于D7:D10,写条件格式时只需要写一个如上述,但实际在计算式当计算到D8时,公式实为MATCH($L$7,$D$6:$H$6,)=COLUMNS($D$7:E7),相当于横向拖拽,所以不能使用$,否则columns计算出来的结果一直是1

15.统计出现过的字母的个数(重复的只算一个),公式有两种:==SUMPRODUCT(1/COUNTIF(A2:B14,A2:B14))或=={COUNTIF(A2:B14,A2:B14)},其中A2:B14为要统计的数据区,公式2较好理解,公式1的意思是:假设区域内有X个字母A,Y个B,Z个C,则计算结果为X个1/X相加 + Y个1/Y相加+Z个1/Z相加,

16.数据条:当最大值和最小值绝对值不等时,且数据条方向选择为“上下文”,则能生成起点在单元格中间的任意位置。例如-5~10,当输入5的时候起点则在1/3的位置。可以将单元格理解成有限的坐标轴

17.Excel迷你图


你可能感兴趣的:(Excel小笔记)