Excel精英培训网

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

[已解决]【求教】区分变量为全部的赋值和最后的赋值?

[复制链接]
发表于 2009-11-10 23:21 | 显示全部楼层 |阅读模式

下面的第一个宏(M多行)是选取全部A列中有9的所在行,即有结果:第2,4,6,9行被同时选取。

而宏(M1行)也是循环,怎么就只选取了第4行而不是1,2,3,4行都选取呢??

为什么第一个宏的变量Rng能不断的被增加新值,最后该ran为所有的值的集合(A2,A4,A6,A9)???

而第二个宏的ran只是最后一个被赋予的值呢????


Sub M多行()
    Dim Ro As Integer
    Dim Rng As Range
    Dim RngCount As Integer
    For Ro = 1 To [A65536].End(xlUp).Row
        If Cells(Ro, 1).Value = 9 Then
            RngCount = RngCount + 1
            If RngCount = 1 Then
                Set Rng = Cells(Ro, 1)
            Else
                Set Rng = Union(Rng, Cells(Ro, 1))
            End If
        End If
    Next
    Rng.EntireRow.Select
    Set Rng = Nothing
End Sub

Sub M1行()
    Dim Ro As Integer
    Dim Rng As Range
    Dim RngCount As Integer
For Ro = 1 To 4
Set Rng = Cells(Ro, 1)
Set Rng = Union(Rng, Cells(Ro, 1))
Next
Rng.EntireRow.Select
End Sub


不明白如下:

为什么第一个Rng.EntireRow.Select能选取多个行???


而第二个Rng.EntireRow.Select只能选取最后1个行???最后一个循环又怎么改变能让Rng.EntireRow.Select选取4行????

[此贴子已经被作者于2009-11-10 23:40:07编辑过]
最佳答案
2009-11-11 08:24
什么第一个Rng.EntireRow.Select能选取多个行???


而第二个Rng.EntireRow.Select只能选取最后1个行???最后一个循环又怎么改变能让Rng.EntireRow.Select选取4行????

这里的问题在于RNG 如果RNG是最后一行的单元格就是选择最后一个行 要是多行 就选中多行

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2009-11-10 23:31 | 显示全部楼层

For Ro = 1 To 4   '当Ro=4时
  Set Rng = Cells(Ro, 1)  'Rng还只是一个单元格a4
回复

使用道具 举报

 楼主| 发表于 2009-11-10 23:35 | 显示全部楼层

QUOTE:
以下是引用过儿在2009-11-10 23:31:00的发言:
For Ro = 1 To 4   '当Ro=4时
  Set Rng = Cells(Ro, 1)  'Rng还只是一个单元格a4

请老师能详细的说下了

为什么第一个Rng.EntireRow.Select能选取多个行???

而第二个Rng.EntireRow.Select只能选取最后1个行???最后一个循环又怎么改变能让Rng.EntireRow.Select选取4行????

回复

使用道具 举报

发表于 2009-11-10 23:38 | 显示全部楼层

Sub M1行()
    Dim Ro As Integer
    Dim Rng As Range
For Ro = 1 To 4
If Rng Is Nothing Then
Set Rng = Cells(Ro, 1)
Else
Set Rng = Union(Rng, Cells(Ro, 1))
End If
Next
Rng.EntireRow.Select
End Sub
回复

使用道具 举报

 楼主| 发表于 2009-11-10 23:43 | 显示全部楼层

QUOTE:
以下是引用oobird在2009-11-10 23:38:00的发言:
Sub M1行()
    Dim Ro As Integer
    Dim Rng As Range
For Ro = 1 To 4
If Rng Is Nothing Then
Set Rng = Cells(Ro, 1)
Else
Set Rng = Union(Rng, Cells(Ro, 1))
End If
Next
Rng.EntireRow.Select
End Sub

为什么多了一个单元格是否为空的判断

Rng.EntireRow.Selet里面的rng就表示了多个

而没有这个判断,就是原来的宏,为什么rng就只表示1个呢?????????

回复

使用道具 举报

发表于 2009-11-11 07:37 | 显示全部楼层

         If RngCount = 1 Then  '红色字体的就是判断
                Set Rng = Cells(Ro, 1)
回复

使用道具 举报

发表于 2009-11-11 08:10 | 显示全部楼层

路过学习
回复

使用道具 举报

发表于 2009-11-11 08:24 | 显示全部楼层    本楼为最佳答案   

什么第一个Rng.EntireRow.Select能选取多个行???


而第二个Rng.EntireRow.Select只能选取最后1个行???最后一个循环又怎么改变能让Rng.EntireRow.Select选取4行????

这里的问题在于RNG 如果RNG是最后一行的单元格就是选择最后一个行 要是多行 就选中多行

回复

使用道具 举报

发表于 2009-11-11 08:26 | 显示全部楼层

Set Rng = Cells(Ro, 1)'这里相当于每次都初始化了一次
Set Rng = Union(Rng, Cells(Ro, 1))
回复

使用道具 举报

 楼主| 发表于 2009-11-11 12:25 | 显示全部楼层

QUOTE:
以下是引用搁浅2008在2009-11-11 8:24:00的发言:
什么第一个Rng.EntireRow.Select能选取多个行???


而第二个Rng.EntireRow.Select只能选取最后1个行???最后一个循环又怎么改变能让Rng.EntireRow.Select选取4行????

这里的问题在于RNG 如果RNG是最后一行的单元格就是选择最后一个行 要是多行 就选中多行

上面都看了,怎么就没有看出问题来呢???

这里的问题在于RNG 如果RNG是最后一行的单元格就是选择最后一个行 要是多行 就选中多行

-------------怎么判断出最后的rng是最后一行的单元格,还是多行呢???????

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 05:40 , Processed in 0.493489 second(s), 4 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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