×

关注微信公众号

vba入门课

2012-7-16 01:21| 发布者: 温强| 查看: 12150| 评论: 0

首先,vba是非常简单的,只要你用过excel,可以说vba就在你身边。

常用的vba的对象就这么几个。1 单元格区域,2 工作表,3 工作簿。

今天随便讲讲单元格区域吧。

单元格区域对象,叫range。你如果要操作单元格区域就要操作range对象啊

对单元格区域的操作大体上就这么几个常用的,选择,填充内容,排序,筛选等等。

我们从最简单的选择开始吧,主要是了解怎么表示区域,选择这个方法是select

每个工作表在被激活的时候都会有一个当前单元格,如果你选择一个单元格,就是用黑框框起来的那个单元格,

如果你选择很多个单元格,就是反白的那个单元格,

比如你要选择a1作为这个当前单元格,很简单就用这个语句。

你们大概都知道怎么用代码编辑器吧?

Sub test1()

Range("a1").Select

End Sub

你们可以新开一个工作簿,跟着做,运行代码

alt+f11,然后插入一个模块,把代码复制进去运行一下

这儿a1就代表你要选择的单元格的地址。这个跟一般的认知是一致的。

vba是大小写无关的,所以A1
和a1是一样的

比如要选择c1该怎么修改?

Range("c1").Select

Sub test1()

Range("c1").Select

End Sub
把a1改成c1就可以了。

接下来是选择区域。比如你要选择a1到a10

Sub test2()

Range("a1:a10").Select

End Sub

区域的写法跟大家一般的认知还是一样的。用冒号连接就代表区域。

如果要选择一行怎么搞? 行我们知道是rows 对象

Sub test3()

Rows(1).Select

End Sub

这样就是选择了第一行,
这儿简单讲一下对象的引用。一般的对象都是可以用这种方式来引用,就是某个对象的第一个,第二个这种。比如第一行rows(1),第三行就是rows(3),第一列columns(1) . 第五列就是columns(5)

还有一种引用方式就是用名称来引用,比如工作表'sheet1',就可以用类似sheets("sheet1") 这种形式来引用。

所以我们比如要选择第4列可以这样写

Sub test4()

Columns(4).Select

'columns("d").select
End Sub

第一条是用数字的方式来引用,第二条实用名称的方式来引用。第四列的名字是d列,所以这儿用d

接着我们看怎么给某个单元格填写数字。比如要给a1填写100,b1填写50

Sub test5()

Range("a1") = 100

Range("b1") = 50
End Sub

这样就给这两个单元格填写了数字了。

vba在excel中最重要的就是所见所得,程序里填写一个数字,在表格里就可以直接看到结果了。
嗯,因为这两句的效果完全一样,所以注释掉一句,你可以分别运行看看效果。

好了,现在我们在c1里填写一个公式求和

如果要填这个公式在工作表里,我相信大家都会=sum(a1:b1)

我们填写在代码里基本上也一样。

Sub test6()

Range("c1").Formula = "=sum(a1:b1)"

End Sub

这儿要填写的是公式,所以用到了formula,我们可以不用管他到底是属性还是方法,因为某些情况下很难区分到底是属性还是方法。只要能实现功能就好了。
大家看到了这个公式只是在外面加了个引号,其他的一点区别都没有。这样我们就可以在c1单元格里看到公式和结果了。

如果我只想要结果该怎么办哪。大家都知道工作簿随着公式越来越多,速度就越来越慢,所以我们既然用了vba了。我不要公式了,直接填充结果怎么弄?

这样可以直接引用单元格区域求值,也可以用evaluate

Sub test7()

'Range("c1") = Range("a1") + Range("b1")

Range("c1") = Evaluate("sum(a1:b1)")

End Sub
一般比较复杂的公式可以直接用evaluate求值,简单的可以用计算求值。


Sub test7()

'Range("c1") = Range("a1") + Range("b1")

Range("c1") = Evaluate("sum(a1:b1)")
End Sub

如果要选择两个不连续的区域,我们用逗号连接。

Sub test8()

Range("b2,d3").Select
End Sub

range对于区域的选择比较方便,但是在对区域循环的时候cells就比较方便。因为cells使用这种格式来表达。cells(row,column)

这种格式下,不论是对行,或者列循环都很方便,

比如要给第一列填充数据。可以采用下列方式

Sub test9()

Dim i As Long

For i = 1 To 10

Cells(i, 1) = i

Next i


End Sub
关于表达方式要熟练,肯定是要多运用的,开始的时候根本搞不清楚哪个代表行,那个代表列,多联系就知道了。

range还有一种简化的表达方式,这种方式源于evaluate

[a1] [a1:b1]
这种格式只能写死,没法做成循环。一般来说可以不要用。初学者就要老老实实的把所有的东西都写全。这样才不容易犯错。

在a1:a10填充序号,还可以用一种简单的方式。
Sub test10()

[a1:a10] = [row(1:10)]
End Sub
这种方式等价于下面这个
Sub test11()

'[a1:a10] = [row(1:10)]

Range("a1:a10") = Evaluate("row(a1:a10)")

End Sub
报名咨询 关注微信 在线报名 返回顶部