概述:
這時候讓我想起英語語法,太枯燥了,不過沒辦法,已經(jīng)想玩游戲,你得知道游戲規(guī)則,才能玩的更騷。。。。
數(shù)據(jù)類型就是根據(jù)不同數(shù)據(jù)特性,定義不同類型,例如文本、日期、數(shù)值等
VBA里的數(shù)據(jù)類型有:字節(jié)型(Byte)、整數(shù)型(Integer), 長整數(shù)型(Long), 單精度浮點型(Single), 雙精度浮點型(Double),貨幣型(Currency)等等
常量就是不變的量,例如π,變量就是可以變。
語法:Dim 變量名 As 數(shù)據(jù)類型
例如:Dim Str As String (Str就是裝String類型的數(shù)據(jù))
Dim str As String*10 (表示最多裝10個字節(jié)數(shù)據(jù))
使用變量類型聲明符(簡寫模式)如上圖所示類型標識符
Dim Str$ (這里$字符串, 原來美元就是一個字符串丫)
聲明多個變量(逗號隔開)
Dim str As String, num As Integer,
相當于:
Dim str As String
Dim num As Integer
如果不指定變量類型
Dim Str (默認是Variant類型)
什么是Variant
所有數(shù)據(jù)類型統(tǒng)稱,它表現(xiàn)所有數(shù)據(jù)類型,意味它很大(一般不要聲明為Variant,你計算都不知道應該給你這個變量分配多少內(nèi)存,殺雞焉用牛刀一個道理)
強制聲明所有變量
方法一:在模塊的第一句手動輸入代碼:“Option Explicit”,它會強制檢查。
方法二:在工具菜單欄中有設置選項,在每一次插入模塊自動會添加 Option Explicit
還可以聲明變量的作用域(也就是變量在哪里有效)
語法一: Public 變量名 As 數(shù)據(jù)類型
語法二:Private 變量 As 數(shù)據(jù)類型
語法三:Static 變量名As 數(shù)據(jù)類型
例如:
Public str As String
Private str As String
Static str As String
變量的作用域
把數(shù)量存儲到變量里
基本數(shù)據(jù)類型
語法 【Let】 變量名稱 =數(shù)據(jù) (【】表示可以省略)
簡寫為 變量名稱=數(shù)據(jù)
- Option Explicit
- Sub 第一個宏()
- Dim str As String '聲明變量名為str,類型為String
- Let str = '一起來學VBA' '將“一起來學VBA”賦值給str變量,那么str就代表這個字符串
- Range('A1').Value = str '將字符串轉(zhuǎn)換填充單元格A1
- End Sub
給對象變量賦值,語法
Set 變量名稱 = 對象(Set不能省略)
- Option Explicit
- Sub 第一個宏()
- Dim rng As Range '聲明一個Range變量,可以表示單元格
- Set rng = Worksheets('Sheet2').Range('A1') '將工作表Sheet1的A1單元格對象賦值給rng
- rng.Value = '學習VBA就是這么簡單' '這時候rng就代表A1單元格
- End Sub
常量通常用來存儲一些固定的不會被修改的值,如圓周率π,各種稅率 (其實就是取有意義變量代替值)
所以只能賦值一次
語法: Const 變量名稱 As 數(shù)據(jù)類型 = 數(shù)值
常量作用域類似變量,在過程中定義,過程內(nèi)可用(本地常量),過程外定義,模塊級常量, public + 過程外定義 公共常量
什么是數(shù)組
數(shù)組類似你買一盒餅干,分成幾個格,每一個的餅都是一樣的。
數(shù)組特點:
語法:
Dim 數(shù)組名(a to b) As 數(shù)據(jù)類型
Dim num (1 to 50) As String (表示50個字符串打包成的數(shù)組)。
給數(shù)組賦值
num(1) = '1號' (序號為1 放入一個字符串為'1號')
num(2)='2號' (序號為2 放入一個字符串為 “2號”)
簡寫 Dim arr(49) As String 相對于 Dim arr(0 to 49) As String (注意是從0開始的)
例子:
- Option Explicit
- Sub 第一個宏()
- Dim num(1 To 10) As String
- num(1) = '1號'
- num(2) = '2號'
- num(3) = '3號'
- Range('A1') = num(1)
- Range('A2') = num(2)
- Range('A3') = num(3)
- End Sub
以上是一維數(shù)組,就像排隊買早餐
如果要在電影院確定你位置這時候需要二維數(shù)組,也就是第幾排第幾列
Dim 電影院 (1 to 10, 1 to 30) As String (表示電影院10行,每行30十個座位)
簡寫 Dim 電影院(9, 29) As String (因為從0開始,所以減一)
三維數(shù)組類似: 空間坐標, x,y,z軸
Dim 坐標 (1 to 10, 1 to 20, 1 to 2) As String (可以認為是x軸范圍1到10, y軸范圍為1到20, z軸坐標1到2所組成所有點)
當然還有四維數(shù)組、五維數(shù)組等等。一般用的最多的只有一、二數(shù)組。
聲明動態(tài)數(shù)組
語法: Dim 數(shù)組名稱 () (既然動態(tài),表示剛開始時候不知道到底裝多少元素,所以括號里什么也沒有寫,只知道是數(shù)組數(shù)據(jù)類型)
如果知道確定大小之后可以采用 ReDim (Re 在英語中就是再一次意思) 關(guān)鍵詞進行定義大小
代碼:
- Option Explicit
- Sub 統(tǒng)計單元格()
- Dim arr() As String
- Dim n As Long
- '統(tǒng)計A列有多少個非空單元格
- n = Application.WorksheetFunction.CountA(Range('A:A'))
- MsgBox ('A列所有單元格的數(shù)量:' & n)
- '重新定義數(shù)組大小
- ReDim arr(1 To n) As String
- End Sub
其他常用的創(chuàng)建數(shù)組的方式
方法一: 使用Array函數(shù)創(chuàng)建數(shù)組
語法:Array(元素1,元素2) (注意括號和逗號都是英文,記住一點就是設計涉及軟件都是英文的狀態(tài)的符號,這是也是剛開始最容易犯的錯誤,怎么也找不到錯誤的位置)
- Option Explicit
- Sub ArrayTest()
- Dim arr As Variant
- '將1到10十個自然數(shù)賦給數(shù)組arr
- arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
- MsgBox 'arr數(shù)組的第二個元素為(注意編號從0開始):' & arr(1)
- End Sub
方法二: 使用Split 函數(shù)創(chuàng)建數(shù)組 (Split:就是分割意思)
語法: Split('字符串', '以字符作為分割線')
- Option Explicit
- Sub SplitTest()
- Dim arr As Variant
- '利用split 生成數(shù)組
- arr = Split('堅持不懈,直到成功', ',')
- MsgBox 'arr數(shù)組的第二個元素為(注意編號從0開始):' & arr(1)
- End Sub
方法三: 通過Range對象直接創(chuàng)建數(shù)組 (Range是VBA用得最多,它代表單元格范圍,可以單個,也可以是多個)
- Option Explicit
- Sub RngArrTest()
- Dim arr As Variant '定義變量
- arr = Range('A3:C11').Value '首先將單元A3到C11存到變量arr中
- Range('A13:C17').Value = arr '然后將新的值寫入單元格中
- End Sub
UBound和LBound函數(shù) (計算索引值)
用到數(shù)組最關(guān)心的數(shù)組什么時候數(shù)組最后一個元素,所有這個用這個函數(shù)解決你疑慮
語法: UBound(arr) (upper取第一個字母,表示大,也就是數(shù)組最后一個元素的序號是多少)
LBound(arr) (Lower 取第一個字母,表示小, 也就是數(shù)組第一個元素的序號是多少)
那么數(shù)組中有多少個元素呢?
UBound(arr) - LBound(arr) + 1
- Option Explicit
- Sub RngArrTest()
- Dim arr(10 To 50) '定義數(shù)組,從10到50
- MsgBox '數(shù)組的最大索引號是: ' & UBound(arr) & Chr(13) _
- & '數(shù)組的最小索引號是:' & LBound(arr) & Chr(13) _
- & '數(shù)組的元素個數(shù)是:' & UBound(arr) - LBound(arr) + 1
- End Sub
對于多維數(shù)組求索引號
- Option Explicit
- Sub RngArrTest()
- Dim arr(1 To 10, 1 To 100) '定義二維數(shù)組
- MsgBox '第一維的最大索引號是:' & UBound(arr, 1) & Chr(13) _
- & '第二維的最小索引號是:' & LBound(arr, 2)
- End Sub
Join 函數(shù),(這個函數(shù)和Split函數(shù)剛好相反,它將字符串連成一個字符串 )
語法: Join (數(shù)組 , '連接符')
- Option Explicit
- Sub JoinTest()
- Dim arr As Variant, txt As String
- arr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
- txt = Join(arr, '-')
- MsgBox txt
- End Sub
將數(shù)組寫入單元格區(qū)域
批量寫入數(shù)據(jù),利用轉(zhuǎn)置(也就是行變成列,列變成行)
- Option Explicit
- Sub ArrToRng1()
- Dim arr As Variant
- arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
- '將數(shù)組批量寫入單元格
- Range('A1:A9').Value = Application.WorksheetFunction.Transpose(arr)
- Range('B1:B9').Value = arr
- End Sub
東西太多了,見下一節(jié)