本帖最后由 一只狗三只眼 于 2020-5-16 07:02 编辑
[size=100%]为什么K可以等于K+1? [size=100%]举个实例,比如以下VBA语句,计算A1:A10单元格范围的值等于“看见星光”的个数。 [size=100%]Sub MyCount [size=100%]Dim Rng As Range, K& [size=100%]For Each Rng In [a1:a10] [size=100%]If Rng.Value = "看见星光" Then K = K + 1 [size=100%]Next [size=100%]MsgBox "禀告陛下,一共抓到:" & K & "个看见星光。" [size=100%]End Sub [size=100%]模拟数据的代码运行结果如下: [size=100%]
提问的朋友可能不理解,为什么K=K+1的结果,不是逻辑值FALSE或者其他,而是一个不断累加的值?这明显违背了咱们小学时就掌握了的数学常理嘛。
论证给您看……
假设K=1
那么K=K+1等于1=1+1
1=1+1计算结果肯定是FALSE
因此K=K+1结果也应为FALSE……
但实际上K=K+1的结果并不是FALSE,而是在K原值的基础上,不断累加1的数值。
所以K=K+1到底是怎么回事儿? 今天我们来扒一扒...... 我们今天就来详细说下这事,或者说VBA编程中的变量以及变量的赋值问题。
2.
首先,明确说明一点,K=K+1并不等同于1=1+1。
这是因为,K和1并不相等,他俩不是一类人;K是变量,1是常量。
什么是变量?什么是常量?
简而言之,变量是在代码运行过程中可能改变值的量,也就是会变的量,而常量则不会发生改变。
K可能是1,可能是2,它会发生改变;但1,永远都是1,不会成为3,它不忘初心,永恒不变……。 重点说下变量。
变量拥有作用域,需要声明和赋值。
作用域我们先不谈,今天的问题用不上这部分知识。
所谓声明变量,也就是声明变量的类型,比如dim k as long,则是声明k是长整型的数值,如果变量未声明,则默认声明为变体(Variant)型。
除了声明,变量需要赋值,只声明未赋值的变量通常没有意义,好比理藩院的声遣。
变量的赋值有固定的格式。 如果是对非对象(Object)型变量赋值,也就是数据型变量,语句为:
Let 变量名称=数据
使用等号的方式,将等号右边的数据或表达式的计算结果,储存到左边的变量名。
其中Let可以省略,因此通常写成 变量名称=数据,比如:
K=1 如果是对象型变量呢?语句为:
Set 变量名称=对象
比如:Set Rng=[A1:A10]
将单元格区域A1:A10储存到变量Rng中
其中关键字Set不可以省略( PS:这是新手常犯错的小地方)。
……
3.
因此K=K+1是格虾米意思呢?
将等号右边的数据赋值给等号左边的变量名,也就是先计算等号右边的表达式,然后将表达式的计算结果赋值给等号左边的变量。
因此,K作为长整型数据,未赋值时默认为0,则……
K=K+1等于K=0+1 则K=1
……
而当K=1时……
K=K+1等于K=1+1
则K=2
……
当K=2时……
…… 以此类推
……
4.
又有朋友问:
为什么K=K+1不能写成K+1=K?
凡事总要问个为什么,毕竟咱不是随便的人呐。
因为……
K=K+1是在给变量赋值,它是一个赋值语句。
K+1=K则是一个判断表达式,它在判断K+1和K是否相等,毕竟等号左边的 K+1,包含变量,但整体已不是变量。 同理,1=1+1,由于1是常量,不是变量,因此它也是一个判断表达式,它在判断1和1+1是否相等。
……
再有朋友问:
为什么K=K+1,先计算等号右边的表达式K+1,而不是先计算K=K?
凡事总要问个为什么,毕竟咱真不是随便的人呐。
容老夫抹下眼泪先…… 前面讲过,变量赋值的过程,是将等号右边的数据、对象或表达式的计算结果,赋值给等号左边的变量名;因此自然要先算等号右边的表达式K+1啊。
即便是从数学的角度讲,+-*/&=这些运算符里,等号的优先权都是最末的,因此也要先算加法,对8?……
…… k=k+1在循环中用的特别多,希望本篇对初学者学习带来福音。 以上文篇摘自excelhome论坛,作者:看见星光. [size=100%]
|