簡明Excel VBA(一) 數(shù)據(jù)類型净捅,變量圈浇,數(shù)組以及運算符

簡明Excel VBA

本文集同步于GitHub倉庫:# bluetata/concise-excel-vba

0x01 語法說明

都知道學(xué)會了英語語法,再加上大量的詞匯基礎(chǔ)您旁,就算基本掌握了英語了烙常。
類似的要使用vba,也要入鄉(xiāng)隨俗被冒,了解他的構(gòu)成坪仇,簡單的說vba包含數(shù)據(jù)類型公浪、
變量/常量對象和常用的語句結(jié)構(gòu)妓灌。

不過呢在量和復(fù)雜度上遠(yuǎn)低于英語跃洛,不用那么痛苦的記單詞了率触,所以vba其實很簡單的。
熟悉了規(guī)則之后剩下就是查官方函數(shù)啦汇竭,查Excel提供的可操作對象啦葱蝗。

順帶一提的是,函數(shù)其實也很容易理解细燎,方便使用两曼。拿到一個函數(shù),例如Sum玻驻,
只要知道它是求多個數(shù)的和就夠了悼凑,剩下的就是用了。例如Sum(1000,9)結(jié)果就是1009了璧瞬。
函數(shù)的一大好處就是隱藏具體實現(xiàn)細(xì)節(jié)户辫,提供簡潔的使用方法。

1.1 數(shù)據(jù)和數(shù)據(jù)類型

Excel里的每一個單元格都是一個數(shù)據(jù)嗤锉,無論是數(shù)字渔欢、字母或標(biāo)點都是數(shù)據(jù)。
對數(shù)據(jù)排排隊瘟忱,吃果果奥额,對不同的數(shù)據(jù)扔到不同的籃子里歸類,籃子就是數(shù)據(jù)類型了访诱。

在Excel-vba中披坏,數(shù)據(jù)類型只有數(shù)值文本盐数、日期棒拂、邏輯錯誤五種類型。
前四種最為常用。具體描述參見下表:

類型 類型名稱 范圍 占用空間 聲明符號 備注
邏輯型
布爾 Boolean 邏輯值True或False 2
數(shù)值型
字節(jié) Byte 0~255的整數(shù) 1
整數(shù) Integer -32768~32767 2 %
長整數(shù) Long -2147483648~2147483647 4 &
單精度浮點 Single 4 !
雙精度浮點 Double 4 #
貨幣 Currency 8 @
小數(shù) Decimal 14
日期型
日期 Date 日期范圍:100/1/1~9999/12/31 8
文本型
變長字符串 String 0~20億 $
定長字符串 String 1~65400
其他
變體型 Variant(數(shù)值) 保存任意數(shù)值帚屉,也可以存儲Error,Empty,Nothing,Null等特殊數(shù)值
對象 Object 引用對象 4

表1.1 VBA數(shù)據(jù)類型

補充一點是谜诫,數(shù)組就像一筐水果,里面可以存不止一個數(shù)據(jù)攻旦。
他不是一個具體的數(shù)據(jù)類型喻旷,叫數(shù)據(jù)結(jié)構(gòu)更合適些。

1.2 常量和變量

定義后不能被改變的量牢屋,就是常量且预;相反的變量就能修改具體值。

在vba里烙无,使用一個 變量/常量 要先聲明锋谐。

常量聲明方法如下:</br>
Const 常量名稱 As 數(shù)據(jù)類型 = 存儲在常量中的數(shù)據(jù)
例如:

Const PI As Single = 3.14 ' 定義一個浮點常量為PI,值為3.14

變量聲明方法如下:</br>

Dim 變量名 As 數(shù)據(jù)類型

變量名截酷,必須字母漢字開頭涮拗,不能 包含空格、句號迂苛、感嘆號等三热。

數(shù)據(jù)類型,對應(yīng)上面 ↑ 表1.1里的那些

更多的聲明方法三幻,跟Dim聲明的區(qū)別是作用范圍不同:

Private v1 As Integer   ' v1為私有整形變量
Public v2 As String     ' v2為共有字符串變量
Static v3 As Integer    ' v3為靜態(tài)變量就漾,程序結(jié)束后值不變

' 變量聲明之后,就可以賦值和使用了
v1 = 1009
v2 = "1009"
v3 = 1009

' 使用類型聲明符念搬,可以達到跟上面同樣的效果
public v2$  ' 與 Public v2 As String 效果一樣

' 聲明變量時从藤,不指定具體的類型就變成了Variant類型,根據(jù)需要轉(zhuǎn)換數(shù)據(jù)類型
Dim v4

1.3 數(shù)組

使用數(shù)組和對象時锁蠕,也要聲明夷野,這里說下數(shù)組的聲明:

' 確定范圍的數(shù)組,可以存儲b - a + 1個數(shù)荣倾,a悯搔、b為整數(shù)
Dim 數(shù)組名稱(a To b) As 數(shù)據(jù)類型

Dim arr(1 TO 100) As Integer ' 表示arr可以存儲100個整數(shù)
arr(100) '表示arr中第100個數(shù)據(jù)

' 不指定a,直接聲明時舌仍,默認(rèn)a為0
Dim arr2(100) As Integer ' 表示arr可以存儲101個整數(shù),從0數(shù)
arr2(100) '表示arr2中第101個數(shù)據(jù)

' 多維數(shù)組
Dim arr3(1 To 3,1 To 3,1 To 3) As Integer ' 定義了一個三維數(shù)組妒貌,可以存儲3*3*3=27個整數(shù)

' 動態(tài)數(shù)組,不確定數(shù)組大小時使用
Dim arr4() As Integer   ' 定義arr4為整形動態(tài)數(shù)組
ReDim arr4(1 To v1)     ' 設(shè)定arr4的大小铸豁,不能重新設(shè)定arr4的類型

除了用Dim做常規(guī)的數(shù)組的聲明灌曙,還有下面這些聲明數(shù)組的方式:

' 使用Array函數(shù)將已知的數(shù)據(jù)常量放到數(shù)組里
Dim arr As Variant        ' 定義arr為變體類型
arr = Array(1, 1, 2, 3, 5, 8, 13, 21) ' 將整數(shù)存儲到arr中,索引默認(rèn)從0開始

' 使用Split函數(shù)分隔字符串創(chuàng)建數(shù)組
Dim arr2 As Variant
arr2 = Split("hello, world", ", ") ' 按,分隔字符串 hello,world 并賦值給arr2

' 使用Excel單元格區(qū)域創(chuàng)建數(shù)組
' 這種方式創(chuàng)建的數(shù)組,索引默認(rèn)從1開始
Dim arr3 As Variant
arr3 = Range("A1:C3").Value   ' 將A1:C3中的數(shù)組存儲到arr3中
Range("A4:C6").Value= arr3    ' 將arr3中的數(shù)據(jù)寫入到A4:C6中的區(qū)域

數(shù)組常用的函數(shù)

函數(shù) 函數(shù)說明 參數(shù)說明 示例
UBound(Array arr, [Integer i]) 數(shù)組最大的索引值 arr:數(shù)組节芥;i:整形在刺,數(shù)組維數(shù)
LBound(Array arr, [Integer i]) 數(shù)組最小的索引值 同上
Join(Array arr, [String s]) 合并字符串 arr:數(shù)組逆害;s:合并的分隔符
Split(String str, [String s]) 分割字符串 str:待分割的字符串;s:分割字符串的分隔符

函數(shù)說明

UBound(Array arr,[Integer i]);</br>
UBound為函數(shù)名</br>
arr和i 為UBound的的參數(shù)蚣驼,用中括號括起來的表示i為非必填參數(shù)</br>
arr和i 之前的Array魄幕,Integer表示對應(yīng)參數(shù)的數(shù)據(jù)類型</br>

補充
VBA 內(nèi)置函數(shù)列表

1.4 運算符

運算符的作用是對數(shù)據(jù)進行操作,像加減乘除等颖杏。這塊不再具體說明纯陨,列一下vba中常用的運算符。

運算符 作用 示例
算術(shù)運算符
+ 求兩個數(shù)的和
- 求兩個數(shù)的差
* 求兩個數(shù)的乘積
/ 求兩個數(shù)的商
\ 求兩個數(shù)相除后所得商的整數(shù)
^ 求一個數(shù)的某次方
Mod 求兩個數(shù)相除后所得的余數(shù) 10 Mod 9=3
比較運算符
= 比較兩個數(shù)據(jù)是否相等 相等返回 True;否則返回False
<> 不相等
< 小于
> 大于
<= 不大于
>= 不小于
Is 比較連個對象的引用關(guān)系
Like 比較兩個字符串是否匹配 String1 Like String2
文本運算符
+ 連接兩個字符串
& 連接兩個字符串
邏輯運算符
And 邏輯與
Or 邏輯或
Not 邏輯非
Xor 邏輯抑或 表達式1 Xor 表達式2兩個表達式返回的值不相等時為True
Eqv 邏輯等價 表達式1 Eqv 表達式2兩個表達式返回的值相等時為True
Imp 邏輯蘊含
' Like是個比較有用的運算符留储,常用來做匹配或模糊匹配翼抠。
' 在模糊匹配的時候,有一些通配符能方便模糊匹配規(guī)則的書寫
"這是一個demo1" Like "*demo1" = True    ' * 號表示匹配任意多個字符
"這是一個demo2" Like "????demo2" = True ' ? 號表示匹配任意單個字符
"這是一個demo3" Like "*demo#" = True    ' # 號表示匹配任意數(shù)字
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末获讳,一起剝皮案震驚了整個濱河市阴颖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赔嚎,老刑警劉巖膘盖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胧弛,死亡現(xiàn)場離奇詭異尤误,居然都是意外死亡,警方通過查閱死者的電腦和手機结缚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門损晤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人红竭,你說我怎么就攤上這事尤勋。” “怎么了茵宪?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵最冰,是天一觀的道長。 經(jīng)常有香客問我稀火,道長暖哨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任凰狞,我火速辦了婚禮篇裁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赡若。我一直安慰自己达布,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布逾冬。 她就那樣靜靜地躺著黍聂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上分冈,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天圾另,我揣著相機與錄音,去河邊找鬼雕沉。 笑死集乔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坡椒。 我是一名探鬼主播扰路,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼倔叼!你這毒婦竟也來了汗唱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤丈攒,失蹤者是張志新(化名)和其女友劉穎哩罪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體巡验,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡际插,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了显设。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片框弛。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖捕捂,靈堂內(nèi)的尸體忽然破棺而出瑟枫,到底是詐尸還是另有隱情,我是刑警寧澤指攒,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布慷妙,位于F島的核電站,受9級特大地震影響允悦,放射性物質(zhì)發(fā)生泄漏膝擂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一澡屡、第九天 我趴在偏房一處隱蔽的房頂上張望猿挚。 院中可真熱鬧,春花似錦驶鹉、人聲如沸绩蜻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽办绝。三九已至伊约,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間孕蝉,已是汗流浹背屡律。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留降淮,地道東北人超埋。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像佳鳖,于是被迫代替她去往敵國和親霍殴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348