搜档网
当前位置:搜档网 › 最简单的Excel VBA教程

最简单的Excel VBA教程

很久前俺写的VBA教程,写的不好,凑合看吧。
最简单的Excel VBA教程[1]
By Sebastien

我们日常处理Excel里面的内容,所用到的功能无非就是找到需要找到的单元格,然后取出里面的数据,放到我们需要的目的单元格中,掌握了这类VBA应用大概可以应付绝大部分情况了。这个教程的内容就是在最短时间里教会你如何做这样的事情,当然,需要你知道一点VB编程的基本知识,以下的内容如果不知道要先看看帮助文件:

1. Dim
2. For … Next
3. Do … Loop


第一部分 如何开始使用VBA编辑器

有两种方法。第一种,先录制一个宏,这个大家都知道了。然后在工具菜单下的宏,宏(M)…,会看到你录制的宏,再点编辑就可以打开VBA编辑器了。第二种方法,直接找到工具菜单下的宏,点Visual Basic编辑器(V),启动后在左上显示Sheet1的地方点击右键,在菜单中选择插入,模块,然后在里面打Sub aa回车,你就会看见一个宏的结构已经完成了。

第二部分 读写单元格里面的数据(只有一个工作表的情况)

让我们用实例来解释。无论用第一部分说的哪种方法进入VBA编辑器,我们以
Sub aa()

End Sub
这个结构的宏为例来讲吧。

这里我们讲数据的读写。

1. 在特定单元格写入:
Sub aa()

Range("A1").Value = 1
Range("A2").Value = 2
Range("A3").Value = 3

End Sub
你会发现,我们在A1, A2, A3处写入了三个不同的数。

2. 去取特定单元格的内容:
再看这个例子,我们现在要取A1, A2, A3里面的内容怎么办呢?
先打开菜单中的“视图”->“立即窗口”。

Sub aa()

Dim A1 as integer, A2 as integer, A3 as integer

A1 = Range("A1").Value
A2 = Range("A2").Value
A3 = Range("A3").Value

Debug.Print A1, A2, A3

End Sub

4. 如何使用循环
Sub aa()
Dim i as integer

For i=1 to 3
Range("A" & i).Value = i '注意看这里的"A" & i
Debug.print Range("A" & i).Value
Next

End Sub

5. 其他需要知道的东西
如果现在用不上,那么以后会用到的,这里做个提醒,先有个印象,到用的时候再看VBA帮助:

(1) Cells
当你涉及的读写单元格有一大片的时候,Cells就方便多了。比如:
for i=1 to 3
for j=1 to 3
Cells(i,j).value = i+j
Next
Next
(2) Range("A1").Text
这倒无所谓,差别是Text取出的只当文本来看。
(3) Range("A1").Formula
单元格的公式,没有公式的话,也可以是值。
(4) Offset
我在A1单元格,怎么才能读写B1单元格的内容呢?
这样:Range("A1").offset(0,1).value
不就是offset(相对行数,相对列数)嘛!


第三部分 两个工作表之间的数据交换

刚才我

们讲的都是一个工作表里的单元格如何定位,如何读写数据,现在来看两个工作表之间如何来做。

在进入下面前先看看VBA中Application.Worksheets(1)表示什么,很简单,就是表示第一张Sheet,无论你对它改没改名字。如果要一定要用Sheet的名字怎么办?比如第一张表是"Sheet1"被改名成了"第一张表",那就这样:Application.Worksheets("第一张表")。

首先要知道正在读取或者写入的单元格属于哪个工作表,这里用比较保守的一种方法:

Sub aa()
Dim i as integer

'我喜欢写上Worksheet,那样的话写程序的时候会有下拉框自动出现
Dim MySheet1 As Worksheet, MySheet2 As Worksheet

'用了Set MySheet1 = …. 一定要用Set MySheet1 = Nothing来配对。
Set MySheet1 = Application.Worksheets(1)
Set MySheet2 = Application.Worksheets(2)

For i=1 to 3
MySheet1.Range("A" & i).Value = i
MySheet2.Range("A" & i).Value = MySheet1.Range("A" & i).Value
Debug.print MySheet2.Range("A" & i).Value
Next

Set MySheet1 = Nothing
Set MySheet2 = Nothing

End Sub

用Set虽然麻烦些,但是有好处,在上面的例子中,至少你不会引用错工作表,以后用多了还会发现其他的好处的。如果VBA的帮助看不太明白,你就先照着用,慢慢就明白了。

常用的Set也可以用在Range里面,道理和上面差不多,看看帮助就知道了。

有了这些基本知识,一些简单的程序就可以写起来了,不是吗?

试试这个练习题,在Sheet1的A1:C5里面写入一些数据,然后把这些数据拷贝到Sheet2的B5:D9里面。


本示例在 Sheet1 上的单元格区域 A1:D10 中进行循环。如果这些单元格中的某个值小于 0.001,则将其值替换为 0(零)。


For Each c in Worksheets("Sheet1").Range("A1:D10")
If c.Value < .001 Then
c.Value = 0
End If
Next c

相关主题