Excel精英培训网

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

[求助]第11题第二小题,我的思路为什么做出来了错误的答案?

[复制链接]
匿名  发表于 2015-3-26 11:24 |阅读模式
第11题第二小题,死活做不出来,可能因为我想歪了,所以赶紧上来求助。

我看到第11题 gycstudy 同学(http://www.excelpx.com/thread-308553-1-2.html)是这么写的
Sub 习题2()
Dim rg As Range
Dim n As Integer
n = 0
For Each c In Range("A2:C12")
If (VBA.IsNumeric(c) = True And c.Value > 0) Then
n = n + 1
If n = 1 Then Set rg = c.EntireRow
Set rg = Union(rg, c.EntireRow)
End If
Next c
rg.Select
End Sub

而我却想移动一下n=0的位置,写成这样
For Each c In Range("A2:C12")
n = 0
If (VBA.IsNumeric(c) = True And c.Value > 0) Then
n = n + 1
(我只有这段和他不一样,其他的地方我倒是认同)

但是出来的答案却是错的。为什么?

我的理解是,从A2道C12中,先设定n=0,如果c满足条件,n=1,若n=1则将满足条件单元格整行放入rg中,if语句结束,去看第二个单元格,然后n清零,重新开始。我觉得我的思路应该没有错啊?

如果按照 gycstudy 同学的思路来,n没有清零,n依然为1,当遇到第二个满足条件的单元格的时候n=2,那么根本不会执行then之后把整行放入rg中的语句。

但是奇怪的是,楼主的代码才能出现正确的结果。我的思路到底那里错了?求助。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-8-9 22:00 | 显示全部楼层
楼主理解错了,那个n=0是为了第一次能够设置c.entirerow,后面的union(rg,c.entirerow)都已经对每一个符合条件的entirerow进行select了。
像你那样的话,n=0放在循环里面,每次都清零了之后,由于if then每次都等于1 所以每次只能等于if函数里面的当前的单元格的值,意思就是每个符合的单元格都被清除出去了,你可以按F8自己逐句逐句的检查就知道了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-21 00:01 , Processed in 0.346860 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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