EXCEL VBA從頭來過-基本語法(中篇) - 張凱喬
文章推薦指數: 80 %
這一篇原本要一次講變數與控制邏輯但是後來發現變數滿雜、滿多需要補充只好從上下兩篇變成上中下三篇了. “EXCEL VBA從頭來過-基本語法(中篇)” is published by 張凱喬.
GetunlimitedaccessOpeninappHomeNotificationsListsStoriesWriteEXCELVBA從頭來過-基本語法(中篇)這一篇原本要一次講變數與控制邏輯但是後來發現變數滿雜、滿多需要補充只好從上下兩篇變成上中下三篇了有變數跟控制邏輯就可以寫變數讀EXCEL內容利用控制邏輯作判斷、執行迴圈等可以做的事情就會變很多(一)、變數變數種類有:Integer整數Long長整數Single浮點數Double浮點數(雙精度)String字串Boolean布林值(True&False)Date日期其他比較複雜的還有Variant數值與Object物件等等Integer整數的範圍是-32,768~32,767Long長整數的範圍是-2147483648~2147483647(Long是二十億,還不夠就用Variant)宣告的方式是「Dim變數As類型」'a1是一個整數Dima1asIntegera1=100'b1是一個字串Dimb1asstringb1="blabla"而Variant可以是數字、字串、日期等等意思是代表所有的數字與文字而且可以容納的數字也很大,比Long還大缺點就是沒有限制記憶體大小,跑起來可能比較慢宣告Variant的方式就是不用宣告XD以下示範三種方法'這樣宣告一個Variant變數a,且a的值是100(意思是可以不用打宣告)a=100'這樣也是宣告一個Variant變數bDimb'這樣也是宣告一個Variant變數cDimcasVariantVariantDataTypeTheVariantdatatypeisthedatatypeforallvariablesthatarenotexplicitlydeclaredassomeothertype(using…msdn.microsoft.com雖然Variant很方便,一般來說是建議少用因為有點難控制,你也不知道你有沒有把整數存成浮點數補充如何一次宣告多個變數'其實就只是共用一個Dim,後面還是要重打DimaAsinteger,bAsinteger'如果像下面這樣打,c變數就會變成VariantDimc,dAsintegerObject是一個奇妙的東西與其說是物件,倒不如說是參照然而Obeject還有分很多種形式'直接訂a1是一個物件(通用物件的概念)'所以a1可以是工作表、活頁簿或欄位區域Dima1asObejecta1=Workbooks(1)a1=Range("A1,B2")'也可以使用固定物件型態,也就是直接定義'定義b1是一個工作表b1=Workbooks(1)'定義c1是一個欄位區域c1=Range("A1,B2")定義完之後他是甚麼物件就可以執行該物件的功能譬如'定義一個Range,再給予值Dimd1asRanged1=Range("A1,B2")d1.value=100'此時A1~B2四格的值都會變100(二)、陣列大家對陣列這個詞應該不陌生但每個程式語言對陣列概念的解讀不太一樣在VBA中陣列可以設定下界(起始點)與上界(結束點)此外,陣列的起始點可以是負數、也可以不填'建立一個i(5)到i(10)共六格的整數陣列Dimi(5to10)AsInteger'建立一個從m(-2)到i(2)共五格的整數陣列Dimm(-2to10)AsInteger'建立一個從n(0)到n(3)共四格的整數陣列(不給下界就是從0開始的意思)Dimn(3)AsInteger'建立一個沒有限制大小的p整數陣列Dimp()AsInteger'建立一個沒有限制大小、沒有限制內容物(使用Variant)的陣列Dimr()如果沒有限制陣列大小,我們又稱作動態陣列則使用時需要多加留意舉例而言你需要給值,陣列元素才會出現,否則會錯誤下面的例子會舉出動態陣列與靜態陣列的差異'建立一個a()動態整數陣列Dima()asinteger'建立一個b(0)~b(5)靜態整數陣列Dimb(5)asinteger'在陣列都還沒有給值之前,利用Msgbox讀出a(1)與b(1)'先做a(1),會出現錯誤(因為沒有給值,該陣列元素不存在)Msgbox(a(1))'b(1)則會正常顯示一個空白(雖然沒有給值,但定義陣列時已經有做出元素了)Msgbox(b(1))再來介紹幾個常用方法刪除及讀取陣列長度'建一個i(3)~i(6)共四個元素的整數陣列Dimi(3to6)AsInteger'清除內容Erasei'使a等於i陣列的上界=>a=6a=Ubound(i)'使b等於i陣列的下界=>b=3b=Lbound(i)'使c等於i陣列的長度=>c=4c=Ubound(i)-Lbound(i)+1當然陣列可以是多維的譬如Dimm(2,2)之類的最後可能大家寫陣列常會碰到的問題就是究竟可不可以用變數定義陣列長度譬如我想要a=10然後Dimi(a)在VBA是不行直接這樣宣告的要換一個方法先Dim一個空陣列,再ReDim塞入變數這個比較進階,參考官方文件ReDim陳述式在Usedat程序層級用來重新配置動態陣列procedureleveltoreallocatestoragespacefordynamicarrayvariables.變數的儲存空間。
TheReDim陳述…msdn.microsoft.com(三)、運算子運算子算是比較簡單的東西通常都是先記錄起來,打錯時可以查算術運算:^次方*乘法/除法\整數除法Mod餘數+加法-減法比較運算:=等於<>不等於大於<=小於或等於>=大於或等於邏輯運算:AndOrNotXor最後還有一個字串運算&簡單來說就是合併字串時使用ExcelVBA程式設計教學:各種運算子-G.T.Wang這裡介紹ExcelVBA中各種運算子的使用方式,還有許多的範例程式碼。
每個程式語言都會有一系列的運算子,不同的運算子可用於不同資料的運算,以下是ExcelVBA中常用的運算子。
下表是VBA中的算術運算子。
以下是數學…blog.gtwang.org(四)、補充:變數使用區域/保存期限你如果在模組層宣告一個變數則在這個模組裡,都能使用且直到活頁簿關閉才會重設在程式層宣告變數則只有在該程式(sub)裡才能使用且程式結束之後,變數不會儲存以上圖為例由於在test()裡重新宣告一次num所以這個num會讀取這個sub裡的num而不會讀取到模組層的再來,由於每執行結束,程式層變數都會重設所以不管你執行幾次test(),答案永遠是100(因為每次都是做0+100)但test1()沒有重新宣告,會讀取到模組層的num如上述所說,模組層的變數只有活頁簿結束才會重設所以你每執行一次test1(),模組層的num就會加1000你可以試著每執行一次test1()之後便執行一次test2()你會發現顯示數字會從1000變2000、3000以此類推阿除了模組層、程式層還有一個工程級,就是用Public宣告這樣就可以跨模組使用有興趣可以看看這篇先這樣下一篇講控制邏輯--4Morefrom張凱喬Follow數位轉型Lovepodcastsoraudiobooks?Learnonthegowithournewapp.TryKnowableAboutHelpTermsPrivacyGettheMediumappGetstarted張凱喬1.6KFollowers數位轉型FollowMorefromMediumNicoGoetzeFindinglastrowinExcelSheetnastrainingAdvancedExcelCoachingClassesRaulJimenez15TipstogetthemostoutofDevSummit2022ErskineRogersTiredofFormattingPivotTablesinExcel?BuildanAdd-inin5MinutesHelpStatusWritersBlogCareersPrivacyTermsAboutKnowable
延伸文章資訊
- 1Chapter 01 EXCEL VBA 程式設計基本介紹
VB與VBA同屬物件導向程式語言,使用語法相似. 度高,但使用上,VB所開發的程式可獨立執行,. 但VBA必須包含於文件內,無法獨立成為可執行程. 式。 在Office中撰寫之VBA程式 ...
- 2excel vba從頭來過-基本語法的蘋果、安卓和 ... - APP軟體應用教學指南
excel vba從頭來過-基本語法下篇,Chapter 01 EXCEL VBA 程式設計基本介紹,VBA巨集語言指的就是Visual Basic For Application, ... V...
- 3EXCEL VBA從頭來過-基本語法(上篇) | 健康跟著走
巨集指令- 是一種Windows下的巨集程式語言其語法承襲傳統的VisualBasic在微軟Office之中的各種軟體(如Word、Excel等)都可以直接使用...
- 4EXCEL VBA從頭來過-基本語法(下篇) - 張凱喬
這一篇已經不知道放多久了... 是時候來告別一下這個系列囉. “EXCEL VBA從頭來過-基本語法(下篇)” is published by 張凱喬.
- 5vba 語法大全
EXCEL VBA從頭來過-基本語法(上篇). ... VBA語句集200句我將學習VBA過程中常用的語句進行了歸納,希望能對Excel愛好者和VBA ... 下一節將討論組織及描述物件的方式。