Excel VBA 程式設計教學:變數的宣告、定義與操作 - GT Wang

文章推薦指數: 80 %
投票人數:10人

這裡介紹如何在Excel VBA 中宣告、初始化與操作各種變數。

一般在程式設計上,變數在使用前都 ... Dim x As Boolean x = True MsgBox "value is " & x. Blogger舊站 關於 Facebook Flickr 物聯網 網站架設 程式設計 統計 素食 特價優惠 宗教 物聯網 網站架設 程式設計 統計 素食 特價優惠 宗教 ExcelVBA程式設計教學:變數的宣告、定義與操作 2016/10/05 6則留言 這裡介紹如何在ExcelVBA中宣告、初始化與操作各種變數。

一般在程式設計上,變數在使用前都要經過宣告(declare)與定義(define)兩個步驟,宣告就是讓電腦知道我們要使用變數,而定義則是將變數的內容指定為一個特定的值,在ExcelVBA中也是一樣有這些步驟,以下是一些教學與範例。

宣告與初始化變數 ExcelVBA中的變數宣告是使用Dim與As兩個關鍵字,分別指定變數名稱以及變數的類型,例如宣告一個整數類型的變數x: DimxAsInteger 這樣就會建立一個變數x,不過這時候該變數並沒有儲存任何的資料,若要設定變數一開始的值,就要對變數進行定義,而定義變數的語法很單純,只是使用簡單的等號而已: x=5 這樣就可以將變數x指定成5,隨後就可以開始使用這個新建立好的變數了: Range("A1").Value=x 這是浮點數的例子: DimxAsDouble x=5.5 MsgBox"valueis"&x 布林值: DimxAsBoolean x=True MsgBox"valueis"&x 字串: DimxAsString x="G.T.Wang" MsgBox"Mynameis"&x ExcelVBA中的變數類型有好多種,完整的變數類型列表請參考MSDN網頁。

萬用類型變數 上面介紹的那些是屬於一般性的變數類型,而VBA中種特殊的萬用類型變數,也就是一種可以儲存任何資料的類型,其稱為Variant,其使用方式與一般的類型類似: DimxAsVariant x="G.T.Wang" MsgBox"Mynameis"&x x=123 MsgBox"Thevalueis"&x 宣告為Variant的變數可以儲存任何類型的資料。

如果在宣告變數時不指定變數類型,則VBA預設會將變數視為Variant類型,所以這兩種寫法的效果是相同的。

DimxAsVariant Dimx'預設為Variant Variant類型的變數通常可用於從Excel儲存格中讀取使用者輸入的資料,由於使用者輸入的資料變異性很大,可能會是任何類型,所以直接使用Variant來儲存會比較方便。

雖然Variant非常方便,但它的缺點就是程式執行效能較差,所以除非必要,在一般的情況下還是使用固定的變數類型較佳。

未經宣告的變數 ExcelVBA也允許使用者省略變數宣告,所以其實未經宣告也可以直接定義變數: MyVar=35 未經宣告的變數預設會是Variant萬用類型。

雖然不宣告就使用變數非常方便,但明確宣告變數可以讓程式執行效率較好,而且比較不容易因為打錯字造成bugs,所以建議在寫程式時都明確加入變數宣告。

如果想避免自己在寫程式時,不小心在沒有宣告的情況下就使用變數,或是有宣告變數,但是在使用時打錯又沒發現,可以在程式碼的開頭加上: OptionExplicit'強迫變數宣告 SubHello() DimMyVarAsInteger MyVar=10 MyInt=10'未宣告 EndSub 這樣只要遇到變數未宣告就使用的狀況,編譯時就會出現錯誤訊息: 變數未宣告錯誤 變數範圍 在一般的Sub副程式中宣告的變數,其範圍僅限於該副程式,也就是所謂的區域變數: SubHello1() DimMyVarAsInteger MyVar=12 MsgBoxMyVar EndSub SubHello2() DimMyVarAsInteger MyVar=34 MsgBoxMyVar EndSub 區域變數 若希望一個變數可以在整個模組內的副程式中使用,則可將變數宣告於副程式之外,建立模組層級的變數: DimMyVarAsInteger SubHello1() MyVar=12 MsgBoxMyVar EndSub SubHello2() MsgBoxMyVar EndSub 這樣一來,在Hello1執行完之後,再繼續執行Hello2時,其所取得的MyVar變數值就會是Hello1中所設定的12。

模組層級變數 如果在程式比較複雜時,一個應用程式中可能會有好多個模組,一般模組層級的變數只能在該變數隸屬的模組之內被存取,若要在其他模組之內也可以存取,就必須將變數宣告為公開(public)的變數,宣告方式是將Dim改為Public。

假設應用程式中有兩個模組,分別為Module1與Module2,而我們想要在Module1中宣告一個MyVar變數,並且讓這個變數在Module2模組中也可以使用,則Module1會是這樣寫: PublicMyVarAsInteger SubHello1() MyVar=12 MsgBoxMyVar EndSub Module2則為: SubHello2() MsgBoxMyVar EndSub 這樣Module1與Module2兩個模組就可以同時存取MyVar這個變數的內容了。

常數 如果希望變數的內容在程式的執行過程中都是固定的,不會不小心被更改,可以把這種固定的變數加上Const,宣告為常數,例如: ConstMyIntegerAsInteger=42 這樣一來MyInteger這個整數就是一個不變的常數,無法被更改。

各種類型的變數都可以宣告為常數,用法都類似: ConstmyDateAsDate=#2/2/2020# ConstmyDayAsString="Sunday" 更多關於VBA的教學文章,請參考VBA程式設計。

參考資料:PowerSpreadsheets Windows,程式設計 ExcelOfficeVBA G.T.Wang 個人使用Linux經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

6留言 新增留言→ BEN 挑錯字,可刪除留言~ 只是使用簡單的等”好”而已=>只是使用簡單的等”號”而已 “有”就是所謂的區域變數=>“也”就是所謂的區域變數 2017/11/10 回覆 G.T.Wang 已修正,感謝提醒。

2017/11/13 回覆 江 請教一下.我要設一個巨集,第一次執行時,將A1:A10的資料,選擇性貼上到C1:C10的欄位.第二次執行時,將A1″A10選擇性貼上到D1:D10的欄位.以此類推,就是每次執行時,貼上的欄位會位移一欄,請問巨集要如何寫呢?謝謝! 2018/05/18 回覆 德瑞克 [a1:a10].copy ifcells(1,3)=””thencells(1,3).pastespecialxlvalues else:cells(1,[c1].end(xltoright).column+1).pastespecialxlvalues 2020/02/21 回覆 12111111114 您好 想請問以下這串程式怎麼用中文來解釋呢? 謝謝您~ Subexchange_rate() Dimarr(1000)AsDouble DimMaxAsDouble‘最大值 DimMinAsDouble‘最小值 DimAveAsDouble‘平均值 DimposAsInteger Dimpos_arrAsInteger Dimdate_maxAsString‘最大值日期 Dimdate_minAsString‘最小值日期 Ave=0 pos_arr=0 pos=2 DoWhileNotIsEmpty(Cells(pos,“B”)) arr(pos_arr)=Cells(pos,“B”).Value Ave=Ave+Cells(pos,“B”).Value pos=pos+1 pos_arr=pos_arr+1 Loop Ave=Ave/pos_arr Max=arr(0) Min=arr(0) date_min=Cells(2,“A”).Value date_max=Cells(2,“A”).Value Fori=1Topos_arr–1 IfMaxarr(i)Then date_min=Cells(i+2,“A”).Value Min=arr(i) EndIf Nexti MsgBox(“Thehightestrateappearedon”&date_max&”Itis“&Max&Chr(10)&“Thelowestrateappearedon”&date_min&”Itis“&Min&Chr(10)&“TheAveragerateis“&Ave) EndSub 2020/06/13 回覆 李佑婷 您好,請問取出陣列的值,除了用msgbox還有其他方式嗎? 我試圖用 redimstonesrecord(size,size) fori=0tosize forj=0tosize 工作表1.cells(i,j)=stonesrecord(i,j) next next 會顯示超出索引範圍、語法錯誤 且在即時運算視窗一開始用stonesrecord(0,0)可以取出值 但在跑了上面那一行之後,就取不出值變空格 所以想詢問,謝謝 2022/05/12 回覆 LeaveaReply取消回覆 留言* Name* Email* Website 搜尋 分類Arduino(5) BeagleBoneBlack(1) DIY(54) Linux(317) macOS(33) Octave(15) Perl(12) R(47) Windows(98) WordPress(16) 個人(15) 免費(35) 兒童(30) 實用工具(85) 手機(13) 技巧(45) 有趣(99) 樹莓派(57) 物聯網(55) 玄學(11) 生活(209) 程式設計(137) 統計學(8) 網頁空間(36) 網頁開發(128) 虛擬化(7) 農業(42) 遊戲(9) 開箱(132) 雲端(4) 宗教 如何戒邪淫、遠離婚外情 戒淫寶典:《壽康寶鑑》白話有聲書 公益 igiving公益網 社團法人新竹縣愛心物資集發協會 台灣世界展望會 Yahoo奇摩公益 家扶基金會 ©2022G.T.Wang



請為這篇文章評分?