程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

VBA自学系列之第一篇

balukai 2025-05-16 11:43:38 文章精选 1 ℃

1-1、对象:

1.对象:现实生活所谓的对象,是真实存在物体。

在excel中就指的是:工作簿,工作表,单元格,图表,透视表之类的

2.集合:也是一种特珠的对象,不过没有指特定哪个对象,只是一种统称。如“人”就是一个集合的叫法。

在excel中的集合如:workbooks,worksheets,cells等等

3. 常用代码操作excel中的对象

'1、工作簿(Workbooks)

' Workbooks(N)第N个工作簿

' Workbooks ("工作簿名")

' ActiveWorkbook 活动工作簿

' ThisWorkBook '代码所在工作簿

'2、工作表(Worksheets)

'Sheets(N) 第N个工作表

'Sheets("工作表名")

'SheetN 第N个工作表

'ActiveSheet 活动工作表

'worksheets 与 Sheets的区别

'3、单元格(cells)

'Range ("单元格地址")

'Cells(行号,列号)

'[A1]单元格简写

'Activecell 活动单元格

'Selection 当前被选取的区域


1-2属性


VBA属性:指对象所具有的特性。

人的属性:姓名,年龄,身份证号,住址….

'VBA属性: 指对象所具有的特性?

'人的属性:姓名,年龄,身份证号,住址….


Sub 属性()

Debug.Print Sheet1.Name

Debug.Print Sheet1.Range("a1").Value

End Sub

'VBA对象属性的赋值

Sub 属性赋值()

Sheet2.Name = "改变自己"

Sheet2.Range("a1") = "学习VBA"

End Sub


1-3方法

'方法:实际上就是对对象的操作,它是一种动作,一种行为。

Sub 选择方法()

Range("a1:a10").Select

'注:如果单元格区域前没有写工作表名,则默认为活动工作表

End Sub


Sub 复制方法()

Sheet1.Range("a1:a10") = 1 '将1写入表一的a1:a10区域

Sheet1.Range("a1:a10").Copy Sheet2.Range("a1") '将表一的a1:a10区域的值复制到表2的a1

End Sub


Sub 删除方法()

Sheets(3).Delete

End Sub


1-4常量与变量


'1.常量:常量是定义了之后就不做变化了。

' 常量定义格式:Const 常量名= 常量表达式

Sub 常量()

Const pi = 3.145926

End Sub


'2.变量:在定义之后还能再次赋值

'变量定义格式:Dim 变量 As 变量类型


Sub 变量()

Dim a As Integer

a = 100

End Sub


'3.常量变量应用

'--------------------------------------------------------------------

Sub 应用()

Const pi = 3.1415926

Dim a As Integer

a = 200

Debug.Print pi * a

End Sub

'--------------------------------------------------------------------

'4.注意事项

'A.VBA允许使用未定义的变量,默认是变体变量(Variant)

'B.变量的强制声明:Option Explicit


'5.变量名的命名规则

'以字母开头

'不能用保留字

'不超过 255 个字符。

'同一范围内必须是唯一


1-5变量类型


'1.VBA中的常见数据类型:

' 类型 注释 简写 占用内存

' Integer 整型 % 2Byte

' Single 单精度 ! 4Byte

' Double 双精度 # 8Byte

' Long 长整型 & 4Byte

' String 字符型 $ 定长或变长( 变长字符串最多可包含大约 20 亿 ( 2^31)个字符。 定长字符串可包含 1 到大约 64K ( 2^16 ) 个字符。)

' Currency 货币型 @ 8Byte

'--------------------------------------------------------------------

Sub 数据类型()

Dim a As Integer

Dim b%

End Sub

'--------------------------------------------------------------------

Sub 多数据类型声明()

Dim a As Integer, b As Single, c As String

Dim d%, e!, f$

End Sub


1-6判断语句

1、IF条件判断语句

'VBA中的IF条件判断语句,就像函数中的IF一样

'IF可单条件,也可多条件。

'--------------------------------------------------------------------

Sub IF条件判断之单条件1()

Dim a%, b%

a = 2

b = 2

If a = b Then MsgBox "相等"

End Sub

'--------------------------------------------------------------------

Sub IF条件判断之单条件2()

Dim a%, b%

a = 2

b = 2

If a = b Then

MsgBox "相等"

End If

End Sub

'--------------------------------------------------------------------

Sub IF条件判断之单条件3()

Dim a%, b%

a = 2

b = 2

If a = b Then

MsgBox "相等"

Else

MsgBox "不相等"

End If

End Sub

'--------------------------------------------------------------------

Sub IF条件判断之多条件等级划分()

If Sheet1.Range("b1") >= 90 Then

Sheet1.Range("b2") = "优秀"

ElseIf Sheet1.Range("b1") >= 80 Then

Sheet1.Range("b2") = "良好"

ElseIf Sheet1.Range("b1") >= 70 Then

Sheet1.Range("b2") = "中等"

ElseIf Sheet1.Range("b1") >= 60 Then

Sheet1.Range("b2") = "一般"

Else

Sheet1.Range("b2") = "较差"

End If

End Sub

'--------------------------------------------------------------------

'VBA中的IIF函数与工作表函数(IF)的语法结一致

Sub IIF函数应用()

Cells(2, 3) = IIf(Cells(1, 2) > 80, "优秀", "不优秀")

End Sub


2、判断语句之Select


'Select Case 语句 根据表达式的值,来决定执行几组语句中的其中之一。

'--------------------------------------------------------------------

Sub select单条件判断()

i = 1

Select Case i

Case Is > 0

MsgBox "正数"

Case Else

MsgBox "负数"

End Select

End Sub

'--------------------------------------------------------------------

Sub select多条件判断()

Select Case Sheet1.[d1].Value

Case "A"

Sheet1.[a3] = "A型血的你,是个不怎么样的人!"

Case "B"

Sheet1.[a3] = "B型血的你,也是个不怎么样的人~"

Case "AB"

Sheet1.[a3] = "AB型血的你,是个更不怎么样的人~"

Case "O"

Sheet1.[a3] = "O型血的你,还是不错的!"

Case Else

Sheet1.[a3] = "没有这种型血,看来你 是个最不怎么样的人~!"

End Select

End Sub

'--------------------------------------------------------------------


1-7循环语句

1、循环语句之DO LOOP

'--------------------------------------------------------------------

Sub 基本示例()

Dim rs%

rs = 1

Do

rs = rs + 1

If rs > 10 Then

Exit Sub

Else

If Cells(rs, 2) >= 90 Then Cells(rs, 3) = "√"

End If

Loop

End Sub

'--------------------------------------------------------------------


2、循环语句之DO WHILE LOOP

'--------------------------------------------------------------------

Sub 循环语句while()

Dim rs As Integer

rs = 2

Do While Cells(rs, 2) <> "" '当单元格不等于空时,则循环

If Cells(rs, 2) >= 90 Then Cells(rs, 3) = "√"

rs = rs + 1

Loop '循环

End Sub

'--------------------------------------------------------------------

3、 循环语句之DO UNTIL LOOP

'do until...loop

'--------------------------------------------------------------------

Sub 循环语句DOLOOP2()

Dim rs As Integer

rs = 2

Do Until Cells(rs, 2) = "" '直到单元格为空为止,才结束

If Cells(rs, 2) >= 90 Then Cells(rs, 3) = "√"

rs = rs + 1

Loop '循环

End Sub


'实例-隔行填色

'--------------------------------------------------------------------

Sub 隔行填色()

Dim rs As Integer

rs = 2

Do Until Sheet2.Range("a" & rs) = ""

Sheet2.Range("a" & rs & ":g" & rs).Interior.ColorIndex = 7

rs = rs + 2

Loop

End Sub

'--------------------------------------------------------------------


4、 循环语句之WHILE与UNTIL位置变化

'---------------------------------------------------------------

'while与until不但可以放在DO后面,也可以放在LOOP后面

'事实上有时在循环的最后一行进行判断,更具有意义

'---------------------------------------------------------------


Sub doloop的最后判断循环()

Dim pss$, i!

Do

i = i + 1

If i > 3 Then Exit Do

pss = InputBox("请输入密码")

Loop While pss = "123"

End Sub


5、循环语句之FOR EACH NEXT

'当需要处理集合成员时,一般会用for each..next,实际上就是处理对象

'---------------------------------------------------------------

Sub foreachnext循环1()

Dim rng As Range, n!

For Each rng In Sheet1.Range("a2:a10") '取a2:a10中的每个单元格

If rng = "A1" Then rng.Interior.ColorIndex = 3

Next

End Sub

'---------------------------------------------------------------

Sub foreachnext循环2()

Dim wsh As Worksheet, n As Byte, m As String

For Each wsh In Worksheets '取当前工作表集合中的每个成员

n = n + 1

Sheet1.Cells(n, 3) = wsh.Name

Next

End Sub


6、循环语句之FOR NEXT


'FOR...NEXT也是循环语句,与之前的DO...LOOP不同之处在于,for next有一个内置计数器

'---------------------------------------------------------------

Sub fornext循环2()

Dim i!, j!

For i = 100 To 1 Step -2

j = j + i

Next

MsgBox j

End Sub

'---------------------------------------------------------------

Sub fornext循环()

Dim rng!

For rng = 2 To 16

Sheet1.Cells(rng, 4) = Sheet1.Cells(rng, 2) * Sheet1.Cells(rng, 3)

Next

End Sub

'---------------------------------------------------------------

Sub 九九乘法表制作()

Dim a!, b!

For a = 1 To 9

For b = 1 To 9

If b > a Then

Sheet2.Cells(a, b) = ""

Else

Sheet2.Cells(a, b) = a & "×" & b & "=" & a * b

End If

Next

Next

End Sub


1-8 exit与end


'exit是退出当前语句

'1.Exit Do

'2.Exit For

'3.Exit Function

'4.Exit Sub

Sub exitfor退出()

Dim i!

For i = 2 To 7

If Sheet1.Cells(i, 1) = "田七" Then

Exit For

End If

Next i

MsgBox "第一个(田七)的位置在" & i & "行"

End Sub

'---------------------------------------------------------------


'end结束一个过程或块。

'End

'End Function

'End If

'End Select

'End Sub

Sub aa()

i = 1

End

Exit Sub

j = 1

End Sub

'---------------------------------------------------------------


1-9 跳转语句


'GoTo line无条件地转移到过程中指定的行。

'注意 太多的 GoTo 语句,会使程序代码不容易阅读及调试。

'尽可能使用结构化控制语句(Do...Loop、For...Next、If...Then...Else、Select Case)。


Sub gotoline()

Dim str$

line:

str = InputBox("请录入用户名!")

If str <> "admin" Then GoTo line

End Sub

'---------------------------------------------------------------

'go to...return

Sub gotoreturn()

Dim i!

For i = 2 To 10

If Sheet1.Range("a" & i) > 1 / 3 Then GoSub 100

Next i

Exit Sub

100:

Sheet1.Range("b" & i) = "迟到"

Return

End Sub

'---------------------------------------------------------------


1-10错误分支语句


Sub onerrorresume()

Dim i!

On Error Resume Next '当错误的时候继续执行下去

For i = 2 To 8

Cells(i, 4) = Cells(i, 3) + Cells(i, 2)

Next i

End Sub

'---------------------------------------------------------------


'On Error GoTo当错误的时候去哪儿?

Sub onerrorgoto()

On Error GoTo 100

For i = 2 To 8

k = Sheet1.Cells(i, 2) + Sheet1.Cells(i, 3)

Next i

100:

MsgBox "对不起,错误发生在第" & i & "行"

End Sub

'---------------------------------------------------------------


1-11 with语句


'with 语句 ,当对某个对象执行一系列的语句时,不用重复指出对象的名称。

Sub with语句1()

a = Range("a1").Address

b = Range("a1").Parent.Name

Range("a1") = "1234"

End Sub

'---------------------------------------------------------------

Sub with语句2()

With Range("a1")

a = .Address

b = .Parent.Name

.Value = "1234"

End With

End Sub

'---------------------------------------------------------------

Sub with嵌套1()

Range("a1").Value = "Who am i ?"

Range("a1").Parent.Name = "Hello World"

Range("a1").Font.Size = 20

Range("a1").Font.Bold = True

End Sub

'---------------------------------------------------------------

Sub with嵌套2()

With Range("a1")

.Value = "Who am i ?"

.Parent.Name = "Hello World"

With .Font

.Size = 20

.Bold = True

End With

End With

End Sub



1-12 函数

'---------------------------------------------------------------

Sub 带工作表函数的计算()

Dim i As Integer

For i = 1 To 10

Sheet1.Cells(i, 4) = "=sum(a" & i & ":b" & i & ")"

Next i

End Sub

'---------------------------------------------------------------


Sub 公式带引号的计算()

Cells(12, 1) = "=COUNTIF(A1:A10,"">9"")"

Cells(12, 2) = "=sum(INDIRECT(""a1:a10""))"

End Sub


'---------------------------------------------------------------

'借用工作表函数

Sub 运用工作表函数()

MsgBox
Application.WorksheetFunction.CountIf(range("a1:a10"), "钢笔")

MsgBox WorksheetFunction.CountIf(range("a1:a10"), "钢笔")

MsgBox Application.CountIf(range("a1:a10"), "钢笔")

End Sub

'---------------------------------------------------------------

'VBA函数

Sub VBA函数()

MsgBox VBA.Format(range("b1"), "yyyy年m月d日")

MsgBox Format(range("b1"), "yyyy年m月d日")

End Sub

'---------------------------------------------------------------

'自定义函数

Function SEX(rng As range)

SEX = IIf(Mid(rng, 15, 3) Mod 2, "男", "女")

End Function

'---------------------------------------------------------------


1-13运算符

'定义: 运算符是代表VBA某种运算功能的符号?


'1)赋值运算符 :=


'2)数学运算符: &(字符连接符)、+(加)、-(减)、Mod(取余)、\(整除)、*(乘)、/(除)、-(负号)、^(指数)


'3)逻辑运算符:Not(非)、And(与)、Or(或)、Xor(异或)、Eqv(相等)、Imp(隐含)


'4)关系运算符: = (相同)、<>(不等)、>(大于)、<(小于)、>=(不小于)、<=(不大于)、Like


'---------------------------------------------------------------

Sub mods()

a = 4 ^ 2

MsgBox a

End Sub

'---------------------------------------------------------------

'like用来比较两个字符串。


Sub likess()

a = 1 Like "[!2]"

MsgBox a

End Sub

'---------------------------------------------------------------


'like用来比较两个字符串。


' ?任何单一字符?

' * 零个或多个字符。

' # 任何一个数字 (0–9)。

' [charlist] charlist.中的任何单一字符?

' [!charlist] 不在 charlist 中的任何单一字符。


Sub a1()

a = "admin" Like "Admin" '区分大小写

End Sub

'---------------------------------------------------------------

Sub a2()

b = "abc" Like "a?c" ' 通配符运用

b2 = "abc" Like "???"

End Sub

'---------------------------------------------------------------

Sub a3()

c = "excel函数" Like "*函*"

End Sub

'---------------------------------------------------------------

Sub a4()

d = 88 Like "##"

End Sub

'---------------------------------------------------------------

Sub a5()

e = "a" Like "[a-z]"

f = 8 Like "[!1-7]"

g = 8 Like "[1-4,6-9]"

End Sub

'---------------------------------------------------------------

最近发表
标签列表