我们都知道, 一个表格里有很多个单元格. 由前面可知,我们要往一个单元格里写入数据,首先就要获得这个单元格的引用. 这样程序才知道在哪里写入数据.
比如我们要往单元格 A1 写入数据, 可以用 range("A1") ,来表示单元格A1 . 那么如果我们要表示多个单元格该用什么语句呢?
1, 比如我们有如下的表格.我们要在每行的单元格里写上美元两个字
我们知道,range("A1")可以表示 A1 ,同理,range("A5")可以表示A5 ,在vba里, 我们可以把A1到A5理解为一个区域,
当我们知道一个区域的首尾两个单元格的引用的时候, 就可以用 range(首,尾)来表示这个区域.
在这里
首是 range("A1")
尾是range("A5")
那么这个区域就是 range(首,尾), 即 range(range("A1"),range("A5"))
来,接下来我们复制如下代码来试试
Public Sub diandian8()
For Each danyuan In Range(Range("A1"), Range("A5"))
danyuan.Value = danyuan.Value & "美元"
Next
End Sub
运行后你就会发现:
代码说明:
前面一节我们说过了 一个循环结构
for each 红包 in 红包集
next
表示出红包集里拿出一个一个红包.
在这里我们可以理解为:
for each 单元格 in 单元格组成的区域
next
即
For Each danyuan In Range(Range("A1"), Range("A5"))
danyuan.Value = danyuan.Value & "美元"
Next
这三句可以理解为 从区域里拿出一个又一个的单元格. 然后再这个单元格里加上美元两个字.
2, 由前面我们可以知道,表示一个区域可以使用range(首,尾) 来表示. 在使用的过程中你会发现. 首往往是很好描述的,正常要吗是range("A1") 或者 range("A2"), 但是尾往往不好描述.
比如今天我们的只有五行数据,可以用range("A5")来描述. 可是明天有10行数据你该怎么为? 你可以说我们可以用range("A10"), 这当然可以,可是有没有一种办法,可以让它自动随着你的行数变呢? 我们一直追求的是,能懒则懒
这里vba提供了一种方法:
Range("A1000").End(xlUp)
这里,range("A1000") 表示的是单元格A1000, 就是A列的第1000行的那个单元格.这个End(xlUp)就厉害了. 初中毕业的我们都知道, up是向上的意思, 比如我们耳熟能详的精典语名: good good study ,day day up. 所以这个可以理解为从A1000为起点,一直往上, 直到遇到一个不是空的单元格为止, 然后就返回这个不是空的单元格的引用.
所以在我们这个表格中, 从A1000往上,不是空的单元格就是A5了, 即Range("A1000").End(xlUp) 就表示A5的引用了.
如何验证这点呢,来,复制下面的句话
Public Sub diandian8()
Debug.Print Range("A1000").End(xlUp).Value
End Sub
运行后你会发现:
所以当我们的表格变成了 这样时,
你就可以用
Public Sub diandian8()
For Each danyuan In Range(Range("A1"), Range("A1000").End(xlUp))
danyuan.Value = danyuan.Value & "美元"
Next
End Sub
这个时候不管你A列有多少行数据, 只要不超过1000行,不管怎么变,都可以再每行后面加美元两个字了.