VBA学习笔记901_代码留存
只是为了记录一些跑过的代码,尽量加上注释,但有些非常简单,只是为了以后快速熟悉代码结构
条件选择:https://zhuanlan.zhihu.com/p/28056849
循环控制:https://zhuanlan.zhihu.com/p/28224626
Excel对象操作:https://zhuanlan.zhihu.com/p/28493992
1. 条件选择
IF...THEN
`-----最基本-----------
If 逻辑表达式 Then
' 如果逻辑表达式为真,则执行这里的语句
End if
`-----加强版
If 逻辑表达式 Then
' 如果逻辑表达式为真,则执行这里的语句
Else
' 否则(即逻辑表达式为假),则执行这里的语句
End If
`-----完整态
If 逻辑表达式1 Then
' 逻辑表达式1为真,则执行这里的语句
ElseIf 逻辑表达式2 Then
' 逻辑表达式2为真,则执行这里的语句
Else
' 逻辑表达式1和2都返回了假,则执行这里的语句
End If
Select Case
`基本格式
Select Case 测试表达式
Case 表达式1
' 如果测试表达式等于表达式1,则执行这里的语句
Case 表达式2
' 如果测试表达式等于表达式2,则执行这里的语句
Case 表达式3
' 如果测试表达式等于表达式3,则执行这里的语句
' 后面可以有更多的Case
End Select
`举例
Sub test()
Dim score As Integer
score = 94
Select Case score
Case Is >= 90
Debug.Print "优"
Case Is >= 80
Debug.Print "良"
Case Is >= 60
Debug.Print "中"
Case Is < 60
Debug.Print "差"
End Select
End Sub
`最后的Case可以用 Case Else 表示其余所有的情况
`Case中可以用To表示范围,如Case 60 To 80
`Case中可以防止多个条件,及只要有一个条件满足就执行该Case,如Case Is=9, Is=7, Is=2
`注意,比较和赋值一样,都是一个等号!
Sub test()
Dim i As Integer
i = 3
Select Case i
Case Is >= 9
Debug.Print "Nine+"
Case Is = 8
Debug.Print "Eight"
Case 4 To 8
Debug.Print "4~8"
Case Else
Debug.Print "4-"
End Select
End Sub
2. 循环
固定次数的循环For
`最基本的循环体
Sub test()
Dim i As Integer
For i = 1 To 10
Debug.Print i
Next
End Sub
`可以加上步长
For i = 1 To 20 Step 3
Debug.Print i
Next
循环次数不明确的For
For Each 循环变量 In 循环对象
' 循环执行的语句
Next 循环变量
`举例如下
Dim k As Variant '作为循环变量,k必须是variant或者object
Dim arr As Variant 'arr本身是个Variant,而其元素可以是其它类型
arr = Array("a", "b", "c", "d")
For Each k In arr
Debug.Print k
Next k
Do...Loop
Do [While | Until] 循环条件
' 用于循环执行的语句
Loop
·还有一种形式是先执行一遍循环体再判断的
Do
' 用于循环执行的语句
Loop [While | Until] 循环条件
3. 操作Excel对象
四种对象:Workbook、Worksheet、Range、Cell
'通过表名找到Worksheet (在VBE左侧窗口SheetX(...)中的...即为表名)
Dim wsSlea As Worksheet
Set wsSlea = Worksheets("SLEA") '给对象赋值要用Set varName = ... 的形式
'注意上面右边Worksheets最后有个s
Dim rng As Range
'选取单个单元格
Set rng = sht_slea.Range("D2")
'选取连续单元格并标底色
Set rng = sht_slea.Range("A1:D4")
rng.Interior.ColorIndex = 16
4. 实际例子
Rem 统计非空单元格数量统计非空单元格数量
Dim arr() As String '此时无法判定这个arr的大小,但由于dim声明变量时,arr(n)中的n必须是确定值,而此时并不能确定,所以只能先这样处理,以后再ReDim
Dim n As Long
'统计非空单元格,实际是用了Excel已有的公式,这种方法要记住
n = Application.WorksheetFunction.CountA(Range("D:D"))
ReDim arr(1 To n) As String
'统计Range区域中,底纹和c相同的单元格的数量
Function CountColor(arr As Range, c As Range)
Dim rng As Range
Dim cnt As Integer
cnt = 0
For Each rng In arr
If rng.Interior.Color = c.Interior.Color Then
cnt = cnt + 1
End If
Next rng
CountColor = cnt
End Function
’在Function的第一句加上如下语句,可以将该函数设置为易失性函数
Application.Volatile True

浙公网安备 33010602011771号