|
楼主 |
发表于 2018-8-26 11:25:53
|
显示全部楼层
(一)、變數
變數種類有:
Integer 整數
Long 長整數
Single 浮點數
Double 浮點數(雙精度)
String 字串
Boolean 布林值(True & False)
Date 日期
其他比較複雜的還有 Variant 數值 與 Object 物件 等等
Integer整數的範圍是-32,768~32,767
Long長整數的範圍是-2147483648~2147483647
(Long是二十億,還不夠就用Variant)
宣告的方式是「Dim 變數 As 類型」
'a1是一個整數
Dim a1 as Integer
a1=100
'b1是一個字串
Dim b1 as string
b1="blabla"
而Variant可以是數字、字串、日期等等
意思是代表所有的數字與文字
而且可以容納的數字也很大,比Long還大
缺點就是沒有限制記憶體大小,跑起來可能比較慢
宣告Variant的方式就是不用宣告 XD
以下示範三種方法
'這樣宣告一個Variant變數a,且a的值是100 (意思是可以不用打宣告)
a= 100
'這樣也是宣告一個Variant變數b
Dim b
'這樣也是宣告一個Variant變數c
Dim c as Variant
Variant Data Type
The Variant data type is the data type for all variables that are not explicitly declared as some other type (using…
msdn.microsoft.com
雖然Variant很方便,一般來說是建議少用
因為有點難控制,你也不知道你有沒有把整數存成浮點數
補充如何一次宣告多個變數
'其實就只是共用一個Dim,後面還是要重打
Dim a As integer, b As integer
'如果像下面這樣打,c變數就會變成Variant
Dim c, d As integer
Object是一個奇妙的東西
與其說是物件,倒不如說是參照
然而Obeject還有分很多種形式
'直接訂a1是一個物件(通用物件的概念)
'所以a1可以是工作表、活頁簿或欄位區域
Dim a1 as Obeject
a1 =Workbooks(1)
a1 =Range("A1,B2")
'也可以使用固定物件型態,也就是直接定義
'定義b1是一個工作表
b1 =Workbooks(1)
'定義c1是一個欄位區域
c1 =Range("A1,B2")
定義完之後
他是甚麼物件 就可以執行該物件的功能
譬如
'定義一個Range,再給予值
Dim d1 as Range
d1 = Range("A1,B2")
d1.value=100
'此時A1~B2四格的值都會變100
(二)、陣列
大家對陣列這個詞應該不陌生
但每個程式語言對陣列概念的解讀不太一樣
在VBA中陣列可以設定下界(起始點)與上界(結束點)
此外,陣列的起始點可以是負數、也可以不填
'建立一個i(5)到i(10)共六格的整數陣列
Dim i(5 to 10) As Integer
'建立一個從m(-2)到i(2)共五格的整數陣列
Dim m(-2 to 10) As Integer
'建立一個從n(0)到n(3)共四格的整數陣列(不給下界就是從0開始的意思)
Dim n(3) As Integer
'建立一個沒有限制大小的p整數陣列
Dim p() As Integer
'建立一個沒有限制大小、沒有限制內容物(使用Variant)的陣列
Dim r()
如果沒有限制陣列大小,我們又稱作動態陣列
則使用時需要多加留意
舉例而言 你需要給值,陣列元素才會出現,否則會錯誤
下面的例子會舉出動態陣列與靜態陣列的差異
'建立一個a()動態整數陣列
Dim a() as integer
'建立一個b(0)~b(5)靜態整數陣列
Dim b(5) as integer
'在陣列都還沒有給值之前,利用Msgbox讀出a(1)與b(1)
'先做a(1),會出現錯誤(因為沒有給值,該陣列元素不存在)
Msgbox(a(1))
'b(1)則會正常顯示一個空白(雖然沒有給值,但定義陣列時已經有做出元素了)
Msgbox(b(1))
再來介紹幾個常用方法
刪除及讀取陣列長度
'建一個i(3)~i(6)共四個元素的整數陣列
Dim i(3 to 6) As Integer
'清除內容
Erase i
'使a等於i陣列的上界 => a=6
a=Ubound(i)
'使b等於i陣列的下界 => b=3
b=Lbound(i)
'使c等於i陣列的長度 => c=4
c=Ubound(i)-Lbound(i)+1
當然 陣列可以是多維的
譬如 Dim m(2,2)之類的
最後 可能大家寫陣列常會碰到的問題
就是究竟可不可以用變數定義陣列長度
譬如我想要 a=10 然後 Dim i(a)
在VBA是不行直接這樣宣告的
要換一個方法 先Dim一個空陣列,再ReDim塞入變數
這個比較進階,參考官方文件
ReDim 陳述式
在Used at 程序層級用來重新配置動態陣列 procedure level to reallocate storage space for dynamic array variables. 變數 的儲存空間。 The ReDim陳述…
msdn.microsoft.com
(三)、運算子
運算子算是比較簡單的東西
通常都是先記錄起來,打錯時可以查
算術運算:
^ 次方
* 乘法
/ 除法
\ 整數除法
Mod 餘數
+ 加法
- 減法
比較運算:
= 等於
<> 不等於
< 小於
> 大於
<= 小於或等於
>= 大於或等於
邏輯運算:
And
Or
Not
Xor
最後還有一個字串運算&
簡單來說就是合併字串時使用 |
|