曾经写过一篇文字《用IF函数画个笑脸》,不知道还有多少同学记得,完成的效果图如下,用到的公式: =IF((INT(SQRT((ROW()-50)^2+(COLUMN()-50)^2))=40)+(INT(SQRT((ROW()-30)^2+(COLUMN()-30)^2))=10)+(INT(SQRT((ROW()-30)^2+(COLUMN()-70)^2))=10)*(ROW()<30)+(INT(SQRT((ROW()-15)^2+(COLUMN()-30)^2))=10)*(ROW()<14)+(INT(SQRT((ROW()-15)^2+(COLUMN()-70)^2))=10)*(ROW()<14)+(INT(SQRT((ROW()-50)^2+(COLUMN()-50)^2))=30)*(ROW()>50)+((ROW()=50)*(COLUMN()>21)*(COLUMN()<79)),'█','') 这次在这个笑脸的基础上再进一步,马上跟我一起动手做起来: 步骤一: 选中A1:CN95单元格区域 步骤二: 在公式编辑栏输入以下公式,然后注意,按<Ctrl+Enter>结束 =IF((INT(SQRT((ROW()-50)^2+(COLUMN()-50)^2))=40)*(COLUMN()<=50)+(INT(SQRT((ROW()-50)^2+(COLUMN()-50)^2))<=40)*(COLUMN()>=50)*(INT(SQRT((ROW()-70)^2+(COLUMN()-50)^2))>20)*(INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))>10)+(INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))<=20)*(COLUMN()<=50)*(INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))>10)+(INT(SQRT((ROW()-70)^2+(COLUMN()-50)^2))=20)*(COLUMN()>=50)+(INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))=10)+(INT(SQRT((ROW()-70)^2+(COLUMN()-50)^2))<=10),'█','') 步骤三: 把行、列的高度与宽度拉小到一个合适的范围,太极图马上呈现: 还是照例一步一步的来分解看看,最核心的就是这个长长的公式,看过这个公式恐怕你也会怀疑人生。不用急,这样写公式明显很乱,我们在公式编辑栏做些小动作: 在找到合适的节点处,我们输入一个软换行<Alt+Enter>,在公式中的软换行并不影响计算,但是瞬间就让公式的可读性大大增强。 我们发现它们最重要的结构几乎全都是: INT(SQRT((ROW()-a)^2+(COLUMN()-b)^2))=r 再来复习下数学的知识: 在高中数学的解析几何,我们知道: 表示坐落于原点的一个圆,而 表示以坐标(a,b)为圆心,以r为半径的圆。 那么在Excel中,是以左右上角为坐标原点,向下及向为正数坐标值,表示为(Row,Column),如Z7单元格表示为(7,26)。 下面开始真正的分析这个太极图的构成了: 从最直观看它的形状,是由最外面一个完整的大圆,中间两个一半的中圆,以及最里面两个完整的小圆构成。 可是由于需要填充阴影,需要将图形进一步拆开,那就是最外面两个半圆,中间两个半圆,最里面两个完整小圆。 我们现在就逐个开始解释公式,其中INT表示向下取整,SQRT表示算术平方根: 公式1: (INT(SQRT((ROW()-50)^2+(COLUMN()-50)^2))=40)*(COLUMN()<=50):“*”前的部分表示坐标原点在(50,50),半径为40的圆,(COLUMN()<=50)表示取列标小于50的部分,也就是说只要整个圆的左半部分外侧轮廓。 公式2: (INT(SQRT((ROW()-50)^2+(COLUMN()-50)^2))<=40)*(COLUMN()>=50)*(INT(SQRT((ROW()-70)^2+(COLUMN()-50)^2))>20)*(INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))>10) 整个公式最长的部分,我们将它以“*”作为不同部分的分割点,将此公式分为4段: 第1段: (INT(SQRT((ROW()-50)^2+(COLUMN()-50)^2))<=40) 坐标原点在(50,50),半径为40的圆,并且将半径小于40的部分填黑。 第2段: (COLUMN()>=50) 表示只对圆的右半部分填黑。 第3段: (INT(SQRT((ROW()-70)^2+(COLUMN()-50)^2))>20) 坐标原点在(70,50),半径大于20的部分可以填黑,也就是下半圆靠右侧半径小于20的部分是不填充的。 第4段: (INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))>10)坐标原点在(30,50),半径大于10的部分可以填黑,也就是上半圆部分,中间的小圆外侧才填黑。 公式3: (INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))<=20)*(COLUMN()<=50)*(INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))>10) 与之前的原理相同,表示坐标原点在(30,50),半径小于20并且大于10的左侧部分填黑,也就是上半圆左侧填黑的部分。 公式4: (INT(SQRT((ROW()-70)^2+(COLUMN()-50)^2))=20)*(COLUMN()>=50) 坐标原点在(70,50),半径为20的圆,(COLUMN()>=50)表示取列标大于50的部分,也就是下面中间半圆的轮廓。 公式5: (INT(SQRT((ROW()-30)^2+(COLUMN()-50)^2))=10) 表示坐标原点在(30,50),半径为10的圆,也就是上面小圆的轮廓。 公式6: (INT(SQRT((ROW()-70)^2+(COLUMN()-50)^2))<=10) 表示坐标原点在(70,50),半径为10的圆,并且中间部分填黑,也就是下面填黑的小圆。
整个公式就这样被我们解读完成了。这里面再次强调最重要的一个知识点——公式的排版 一个好的逻辑,好的排版,纵然你的公式很长,我们仍然可以清晰的解读。 并且写公式的过程不要急于求成,一定先分析每一个部分的构造。我在完善这个公式的时候,就是将图形先切割出来每一个部分,最后再用公式慢慢调整细节。 图文作者:翟振福 |
|