Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3262|回复: 16

[已解决]请问高手这两句代码有什么不同?

[复制链接]
发表于 2014-7-7 15:04 | 显示全部楼层 |阅读模式
Sub c()
Application.ScreenUpdating = False               
Dim a, i As Long
For i = [a65536].End(xlUp).Row To 2 Step -1
a = Cells(i, 6)
Cells(i, 10) = a
If Len(a) <> 11 Then Cells(i, 10) = ""
'If Len(a) <> 11 Then a = ""
Next
Application.ScreenUpdating = True               
End Sub
以上代码If Len(a) <> 11 Then Cells(i, 10) = ""这句与
If Len(a) <> 11 Then a = ""有什么区别,运行为什么结果不一样?

最佳答案
2014-7-7 22:27
ttud 发表于 2014-7-7 21:57
fffox老师,照你说的,所有项都为空了。

你代码里的
If Len(a) <> 5 Then a = "": Cells(i, 12) = a
要分成两行写:
If Len(a) <> 5 Then a = ""
Cells(i, 12) = a

上一种写法是指,当条件成立时,执行a = ""和 Cells(i, 12) = a这两条语句
下一种写法是指,当条件成立时,执行a=""这条语句,而Cells(i, 12) = a这一语句不管条件是否成立均会执行到。

改成下一种写法后,执行结果与If Len(a) <> 5 Then Cells(i, 12) = "" 相同
发表于 2014-7-7 15:10 | 显示全部楼层
第二句
'If Len(a) <> 11 Then a = ""
是注解,不参与程序运行。
回复

使用道具 举报

发表于 2014-7-7 16:53 | 显示全部楼层
回复

使用道具 举报

发表于 2014-7-7 18:20 | 显示全部楼层
不同在于:
cells(i,10)="" 改变的是单元格的值(为空)
a="" 改变的是变量a的值(为空)
变量a并不是cells对象,而只是对应单元格的值,因此在对变量a作改动的时候,单元格的值并不会变化。
回复

使用道具 举报

 楼主| 发表于 2014-7-7 20:22 | 显示全部楼层
xdragon 发表于 2014-7-7 18:20
不同在于:
cells(i,10)="" 改变的是单元格的值(为空)
a="" 改变的是变量a的值(为空)

谢谢,我再理解下
cells(i,10)=a  a=""与cells(i,10)="" 为什么转化一下,答案就不一样了。
回复

使用道具 举报

 楼主| 发表于 2014-7-7 20:23 | 显示全部楼层
baksy 发表于 2014-7-7 16:53
请问,问题解决了吗?

问题还没解决。
回复

使用道具 举报

发表于 2014-7-7 20:32 | 显示全部楼层
ttud 发表于 2014-7-7 20:22
谢谢,我再理解下
cells(i,10)=a  a=""与cells(i,10)="" 为什么转化一下,答案就不一样了。

注意顺序。要先是a="",再是 cells(i,10)=a,这样就和cells(i,10)=""一样了
回复

使用道具 举报

 楼主| 发表于 2014-7-7 21:57 | 显示全部楼层
fffox 发表于 2014-7-7 20:32
注意顺序。要先是a="",再是 cells(i,10)=a,这样就和cells(i,10)=""一样了

fffox老师,照你说的,所有项都为空了。


删除符合条件的行.rar (7.44 KB, 下载次数: 6)
回复

使用道具 举报

发表于 2014-7-7 22:27 | 显示全部楼层    本楼为最佳答案   
ttud 发表于 2014-7-7 21:57
fffox老师,照你说的,所有项都为空了。

你代码里的
If Len(a) <> 5 Then a = "": Cells(i, 12) = a
要分成两行写:
If Len(a) <> 5 Then a = ""
Cells(i, 12) = a

上一种写法是指,当条件成立时,执行a = ""和 Cells(i, 12) = a这两条语句
下一种写法是指,当条件成立时,执行a=""这条语句,而Cells(i, 12) = a这一语句不管条件是否成立均会执行到。

改成下一种写法后,执行结果与If Len(a) <> 5 Then Cells(i, 12) = "" 相同
回复

使用道具 举报

 楼主| 发表于 2014-7-8 08:57 | 显示全部楼层
xdragon 发表于 2014-7-7 18:20
不同在于:
cells(i,10)="" 改变的是单元格的值(为空)
a="" 改变的是变量a的值(为空)

谢谢老师,你说的有道理。但还是不清楚单元格与变量的值有什么区别。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 16:51 , Processed in 0.444524 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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