因为帮一个朋友弄excel中的一些数据处理,然后用到了VBA的编程。其中要点如下:
Sub MyFirstVBAProgram()
Dim strName As String ' As String 定义了变量的数据类型
Dim strHello As String
strName = InputBox("输入名字:")
strHello = "你好," & strName & "!"
MsgBox strHello
End Sub
Function MyAdd(varA, varB) As Variant
MyAdd = varA + varB
End Function
Sub TestAdd()
Dim a,b,c
a = 12
b = 34
c = MyAdd(a,b)
MsgBox c
End Sub
Public Function Shipping(Price)
Shipping = Price * 0.1
End Function
' 注释
VBA中的数据类型
Byte 0 - 255
Bollean True 或者 False
Integer -32768 - 32767
Long
Single
Double
Date
String(变长)
Variant 是一个特殊的数据类型,可以表示任意类型的数据,对于没有定义数据类型的变量,
默认为这个类型
创建变量
使用Dim语句
Dim 变量名 As 数据类型
& 表示连接两个字符串
+ 也可以用来表示连接两个字符串
运算符
^(某次方) * / \(整除) Mod + -
Function Add(a As Double, b As Double) As Double
最后一个As Double表示返回值的类型,返回值为Add
条件语句
If T < 2 Then
Target = 200
ElseIF T >= 2 And T < 3 Then
Target = 300
Else
Target = 500
End If
注意,在判断值相等时候,用的是=号
逻辑运算符
And Or Not
循环语句
Dim i As Long
Dim sum As Long
For i = 1 To 8 Step 2
sum = sum + i
Next i ' 循环结束
DO While count <= 100
sum = sum + count
count = count + 1
LOOP
Exit提前结束循环
For i = 1 To 100
If i = 50 Then
Exit For
End If
Next i
嵌套循环中,Exit语句会退出他所在的那层循环,而不会退出其他循环
ActiveSheet.Cells(i,j).Value为Excel对象,ActiveSheet表示当前的数据表,
Cell(i,j)表示数据表的第i行第j列的单元格,Value表示单元格的值。
数组
Dim Months(11) As String
Months表示数组名称,11表示数组的最大索引,String为元素类型
_ 可以将几行代码算作一行,相当于\
Rnd是VBA的函数,返回一个0到1之间的平均值
Application对象代表了Excel程序,通过Excel的Application对象,可以操作当前激活的工作薄,
工作表或者活动单元格
将活动工作表的第一行第二列的单元格设置为当前时间
Application.ActiveSheet.Cells(1,2) = Time
ActiveCell.Value 表示当前活动单元格的值
Workbok对象代表Excel的一个工作薄,通过Workbok可以得到工作薄中的工作表(Sheets),
获得当前工作薄的名称,保存路径,保存工作薄等。
Application.ActiveWorkbok.Save ' 保存工作薄
Worksheet
Worksheet对象代表了一个工作表,可以进行拷贝、粘贴、打印等工作
Range对象
代表工作表的一个单元格或者单元格区域
Worksheets("Sheet1").Range("A1").Value = 20
Range的Value属性可以返回Range的值,如果是一个单元格,那么就是一个具体的数值或者字符串,
如果是一个单元格区域,则返回一个数组。
同样,我们可以通过Value属性给Range赋值
将第一列和第二列的单元格的内容连接之后,赋值给第三列
Sub MergeTest()
Dim i As Long
For i = 3 To 30
Cells(i,3) = Cells(i,1) & " " & Cells(i,2)
Next
End Sub
使用Application对象的Cells属性来返回表格数据(Application可以省略)
使用VBA操作工作表单元格
[A1] = 100 ' 在A1 单元格输入100
[A2:A4] = 10 ' 在A2:A4单元格输入10
Range("B1") = 200
Range("C1:C3")=300
Cells(1,4) = 400 ' 在D1单元格输入400
Range(Cells(1,5),Cells(5,5)) =50 ' 在E1:E5单元格输入50
在单元格D1:D20中循环,将所有绝对值小于0.1的数字都设置为0
Sub RoundToZero()
Dim i As Long
Dim rCell As Range
For i = 1 To 20
Set rCell = Worksheets("Sheet2").Cells(i, 4)
If IsNumeric(rCell.Value) Then
If Abs(rCell.Value) < 1# Then
rCell.Value = 0
End If
End If
Next i
End Sub