如果K=K+1的结果让你感到困惑,那是因为这本质上是一个值累加的操作,而非逻辑判断。最近后台有个热门问题让大家抓耳挠腮:明明K等于K+1,这代码到底有没有问题?有网友贴出了自己的代码截图:Dim Rng As Range, K& For Each Rng In [a1:a10] If Rng.Value = "看见星光" Then K = K + 1 Next MsgBox "禀告陛下,一共抓到:" & K & "个看见星光" End Sub 运行这段代码,K值会持续上涨,似乎在和逻辑规则对着干。 我们需要先搞清楚一个概念:变量和常量并不是一回事。变量K就像人的身价一样是会波动的,而常量1永远保持不变。如果你硬要给K加上1个快递小哥的身份(也就是把1+1的结果给K),结果肯定会乱七八糟。 声明变量是为了告诉系统这个东西叫什么,是什么类型:Dim K As Long。赋值则是给变量里塞数据:K = 0。如果只声明不赋值,K就像个没有身份证的人一样站在原地发呆。 K=K+1这个操作其实非常简单。在VBA里,等号左边的是接收方,右边的是发送方。先计算右边的K+1得到一个新值,再把这个新值塞到左边的K里,这样K就升级了。而K=1或K=2这样的赋值其实是把常量的值直接赋给K。 数学中的运算优先级在VBA里同样适用。比如先算加法再算赋值,所以K=K+1其实是先算出右边的新值再更新左边的变量。 有些人可能会犯一个低级错误:把K+1=K当成合法语句。实际上这是个语法错误。Set通常用来给对象赋值,而让变量等于数据通常用Let(或者直接写)。K+1=K这种写法会让系统误以为你在做判断而不是赋值。 K=K+1是一个赋值语句,先算右边再更新左边;而K+1=K是一个表达式判断,先判断两边是否相等然后返回True或False。1=1+1也是一个表达式判断,两边都是常量系统会先算结果再返回False。 记住这三句话就能稳拿高分:变量得先声明再赋值;等号右边的表达式先算;赋值语句和逻辑判断不能混为一谈。下次再看到K=K+1别忙着吐槽它不科学,这其实就是按规则把数字往变量口袋里塞,直到凑够你要的结果。