Excel精英培训网

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

第11集练习题代码

[复制链接]
发表于 2013-8-30 13:53 | 显示全部楼层 |阅读模式
题目1:任意选取本工作表中的一个区域,然后把选取区域中的大于0的数字替换为字符“正数” ,代码如下:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For Each c In Selection
If (VBA.IsNumeric(c) = True And c.Value > 0) Then
c.Value = "正数"
End If
Next c
End Sub

题目2:用代码一次选取“A2:C12”区域所有大于0数字所在的行,代码如下:
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


匿名  发表于 2015-3-26 11:20
题目2,我总想这么写代码
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清零,重新开始。我觉得我的思路应该没有错啊?

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

但是奇怪的是,楼主的代码才能出现正确的结果。我的思路到底那里错了?求助。
回复

使用道具

发表于 2019-3-3 18:47 | 显示全部楼层
QQ_D31552 发表于 2015-3-26 11:20
题目2,我总想这么写代码
For Each c In Range("A2:C12")
n = 0

N是为了初始化 union第一个参数的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 17:56 , Processed in 0.357057 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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