小伙伴们好啊,今天咱们分享一个比较冷门的知识点:迭代计算。

如果对迭代计算这个名字还比较陌生,那像下图中的循环引用提示,相信很多小伙伴遇到过:

当公式计算返回的结果需要依赖公式所在单元格的值时,无论是直接还是间接引用,都会出现循环引用的提示。


比如A1输入公式:=A1+1

或者B1输入公式:=A1,而A1公式为:=B1,都会产生循环引用。

默认情况下,Excel禁止使用循环引用,因为公式中引用自身的值进行计算,将无休止地计算而得不到答案。


其实,正确利用循环引用,能完成一些比较特殊的计算要求。

比如下面这个问题,要在A列内容的基础上,替换掉B列中的字符,最终得到A中不含B的字符:

这个问题使用迭代计算,会非常简单,接下来咱们就说说具体的操作步骤:


步骤1

依次单击【文件】→【选项】,打开【Excel选项】对话框。

在【公式】选项卡下勾选“迭代计算”的开关,这样Excel就允许使用循环引用了。


步骤2

首先在E1单元格中输入公式:

=MOD(E1,100)+1

这个公式就是引用了E1单元格本身的值。

公式使用MOD函数计算E1和100相除的余数,结果加上1。

先简单说说这个公式的计算过程:

咱们在上一步设置的迭代计算次数是100次,第1次计算时E1为0,MOD(0,100)的结果是0,加上1,得到1。

第2次计算时,MOD(1,100)的结果是1,加上1,得到2

……

第100次计算时,MOD(99,100)的结果是99,加上1,得到100。

说白了,就是在一个迭代周期完成后,E1单元格中的值会从1开始依次递增至100。

这个地方有什么用呢?别急,往下看。


步骤3

在C2单元格输入以下公式,下拉:

=SUBSTITUTE(IF(E$1=1,A2,C2),MID(B2,E$1,1),"")

SUBSTITUTE函数的作用是替换旧字符串中的字符的,用法为:

SUBSTITUTE(要处理的字符串,要替换的内容,替换成什么,[替换第几个])

如果不指定替换第几个时,就表示把符合条件的字符串全部替换掉。


先来看看本例中要处理的字符串是IF(E$1=1,A2,C2),也就是当E1单元格为1时,处理A2中的字符,否则就处理C2单元格已有的字符。

要替换的内容是什么呢?就是MID(B2,E$1,1)的计算结果。

MID函数从B2单元格的指定位置开始,提取1个字符,而负责指定位置的就是E1单元格中的公式结果了。当E1依次变成1至100时,MID函数就依次提取出B2单元格中的第1个、第2个、……第100个字符。

要替换成什么呢?本例中是空文本"",也就是相当于把MID函数的结果从A1中删除。


迭代计算的第1步,MID(B2,E$1,1)得到B2中的第1个字符“白”。SUBSTITUTE函数从A2字符“将船买酒白云边”中,将“白”替换掉,得到“将船买酒云边”。

迭代计算的第2步,MID(B2,E$1,1)得到B2中的第2个字符“酒”。

从这一步开始,SUBSTITUTE函数要处理的就是公式本身所在单元格的字符了,C2字符“将船买酒云边”中的“酒”,将被替换掉,得到新的结果“将船买云边”。

这样一层层的替换下去,直到替换掉B2中的第100个字符,最终就得到A不包含B的内容了。

有小伙伴说了,B2没有这么多字符啊。这不要紧,当MID函数开始提取的位置比实际的字符个数多时,会返回一个空文本"",如果SUBSTITUTE函数要在原有内容中替换掉的是空文本"",或者原有内容中不包含要替换掉的字符,最终就是啥都不替换。


好了,今天分享的内容就是这些吧,祝大家一天好心情!

迭代计算还有哪些用途呢,欢迎分享你的经验。


图文制作:祝洪忠