ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4275|回复: 22

[分享] VBA中该怎样理解k=k+1

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-5-16 06:57 | 显示全部楼层 |阅读模式
本帖最后由 一只狗三只眼 于 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%] image.png
提问的朋友可能不理解,为什么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?

凡事总要问个为什么,毕竟咱真不是随便的人呐。

容老夫抹下眼泪先……
image.png
前面讲过,变量赋值的过程,是将等号右边的数据、对象或表达式的计算结果,赋值给等号左边的变量名;因此自然要先算等号右边的表达式K+1啊。

即便是从数学的角度讲,+-*/&=这些运算符里,等号的优先权都是最末的,因此也要先算加法,对8?……

……
k=k+1在循环中用的特别多,希望本篇对初学者学习带来福音。
以上文篇摘自excelhome论坛,作者:看见星光.
[size=100%]

image.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-5-16 13:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-5-16 15:08 | 显示全部楼层
有些语言表示为i+=1,这样更加纠结了,哈哈

TA的精华主题

TA的得分主题

发表于 2020-5-16 15:13 | 显示全部楼层
K可以理解为一只箱子。在i没被初始化时,可以理解为一只空箱子。K=K+1,可以理解为将1(可以是苹果,也可以是生梨)放进箱子里,结果是箱子变成了1(一只苹果,或生梨)。再来一次K=K+1,可以理解为再把一只苹果放进箱子里,结果是箱子里有二只苹果。类似于  K=K+1 可以用术语称作为“加法器”

TA的精华主题

TA的得分主题

发表于 2020-5-16 15:39 来自手机 | 显示全部楼层
这是因为vba里没有对赋值和等于做区分。如果把k=k+1作为测试表达式,视为一个布尔值,就是false,如果是个赋值语句就是右边表达式结果付给左边变量

TA的精华主题

TA的得分主题

发表于 2020-5-16 17:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-5-16 18:37 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-5-16 20:27 | 显示全部楼层
wang-way 发表于 2020-5-16 15:39
这是因为vba里没有对赋值和等于做区分。如果把k=k+1作为测试表达式,视为一个布尔值,就是false,如果是个赋 ...

和大家一起学习和探讨,共同进步。

TA的精华主题

TA的得分主题

发表于 2020-5-16 21:22 | 显示全部楼层
larer 发表于 2020-5-16 17:38
服气,这也能写这么多,把VBA学完不得十年?

因为像我文科思维的人,根本无法理解K=K+1

TA的精华主题

TA的得分主题

发表于 2020-5-16 21:42 | 显示全部楼层
我去,你这样理解  进入到死胡同了, 这个K 指示一个变量, 当k=1 的时候,k = 1   那么 当k + 1,k = 1+1,k 的值就会变成2! 当k=2的时候,K+1  = 3
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-28 15:33 , Processed in 0.042757 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表