cwchen.nou-2 - Excel VBA基礎入門班
文章推薦指數: 80 %
來源Excel\VBE→選取欲複製的VBA程式碼→右鍵\複製; 目的Excel\VBE→插入\模組→ ... 取得任意儲存格的位址,可使用「Address屬性」回傳的位址為絕對位址「$A$2」。
SearchthissiteSkiptomaincontentSkiptonavigationExcelVBA基礎入門班個人巨集活頁簿位置:C:\Users\使用者\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB參考用書ExcelVBA+巨集入門:實現零加班、光速般的工作效率,ISBN:978-986-434-197-9,博碩文化,http://www.drmaster.com.tw/Bookinfo.asp?BookID=MI11609巨集簡介含巨集的Excel檔,副檔名為[*.xlsm]含有巨集的檔案或網路下載的檔案,欲開啟時均須點選「啟用內容」,以免被惡意的程式入侵。
這是一種對電腦的保護機制。
啟用「開發人員」功能區:檔案\選項\自訂功能區\[V]開發人員。
執行巨集的方法:使用「巨集視窗」執行→點選巨集名稱→執行利用「配置巨集的按鍵」執行建立按鍵:開發人員\控制項\插入\表單控制項\按鈕插入\圖例\圖案\矩形→右鍵\指定巨集查看「巨集內容」,「VBE(VisualBasicEditor)」:開發人員\程式碼\VisualBasic。
VBE←→Excel:Alt+F11執行巨集:在巨集內任一點點選→「►執行鈕」或「F5」。
巨集可做的事:數值的輸入建立圖表資料計算資料取出與轉換須經判斷的工作須經大量資料且重複動作資料型態:一個文字:字元多個文字串接:字串計算值:數值巨集:多個小動作的集合。
VBA(VisualBasicforApplication)使用的字型均為「半形」,可使用「中文」於「巨集名稱」、「儲存格資料」、「註解」、「變數名稱」。
「VBA」就是「巨集」內所使用的程式語言。
巨集編輯新增模組:VBE\插入\模組複製模組:來源Excel\VBE→選取欲複製的VBA程式碼→右鍵\複製目的Excel\VBE→插入\模組→右鍵\貼上其他物件:Sheet1、ThisWorkbook不同檔案,確有相同名稱的巨集名稱命名法:「活頁簿名稱!巨集名稱」變更巨集內容;修改VBA巨集內容:VBE\直接修改內容變更巨集名稱:變更「sub」之後的巨集名稱巨集名稱命名規則:可使用註解:「單引號'」之後的文字均屬於註解,註解的文字會變成「綠色」巨集結構:Sub巨集名稱()巨集內容EndSubVBA的多行巨集內容,成為「陳述式」儲存含巨集的活頁簿:檔案\另存新檔\存檔類型(Excel啟用巨集的活頁簿(*.xlsm))VBA的除錯方法:以「紅色」顯示接續行:「空白+底線」=「_」執行時的錯誤:程式語法沒有錯誤,但卻無法執行。
例如:程式中使用某個物件,程式的寫法完全沒錯,但程式執行時卻發現根本沒有該物件,因此程式無法執行。
邏輯錯誤:程式語法沒有錯誤,可執行,無錯誤訊息,但不是你要的結果。
逐行執行:F8或「偵錯\逐行」。
程式錯誤無法停止的處理方法:執行時間太長,而凍結畫面:ESC鍵,可中斷程式執行。
程式產生無限回圈,無法以ESC停止,可使用「Ctrl+Alt+Del」呼叫工作管理員停止Excel執行。
再開啟,可自動利用「檔案修復」功能找回原檔,但也有可能找回不完整檔案。
養成「先存檔再執行」的習慣,防止因中斷Excel而喪失之前編寫的程式碼。
物件Excel常用的物件:活頁簿物件:Workbook工作表物件:Worksheet儲存格物件:Range字型物件:Font篩選物件:Filter圖表物件:Chart命令物件:「物件.命令」,對「物件」做「命令」。
「集合」指定物件活頁簿集合:Workbooks工作表集合:Worksheets儲存格沒有集合。
「集合」中的「物件」,稱為「成員」。
例題:第2個活頁簿:Workbooks(2)Sheet2的工作表:Worksheets("Sheet2")或Worksheets(2)儲存格物件管理Range例題:單一儲存格「C1」:Range("C1")連續多儲存格「B1:D5」:Range("B1:D5")不連續多儲存格「B1:D5,E10」:Range("B1:D5,E10")取得任意儲存格的位址,可使用「Address屬性」回傳的位址為絕對位址「$A$2」。
指定集合的物件語法:集合(索引編號)集合("物件名稱")例題:指定test.xlsm活頁簿Workbooks("test.xlsm")'注意呼叫時,需增加副檔名Workbooks(1)'第1個開啟的活頁簿指定Sheet2工作表,[Link]Worksheets(2)Worksheets("Sheet2")儲存格指定方法單一儲存格C1:Range("C1")多儲存格B1:C5:Range("B1:C5")分層結構指定方法「不使用」結構分層表示法目前工作表的C1儲存格:Range("C1").Value="AAA"「使用」結構分層表示法:以「.句點」表示「母物件」與「子物件」的關係,如「母物件.子物件」於活頁簿test.xlsm中,工作表Sheet1中的儲存格C1:Workbooks("test.xlsm").Worksheets("Sheet1").Range("C1")="AAA"「目前」物件作用中的儲存格:ActiveCell作用中的工作表:ActiveSheet作用中的活頁簿:ActiveWorkbook正在執行程式碼的活頁簿;正在VBE編寫程式碼的活頁簿:ThisWorkbook選取的範圍:Selection範例:作用中儲存格的值:ActiveCell.Value="AAA"作用中工作表的名稱:ActiveSheet.Name="ABC"作用中活頁簿的名稱(包含副檔名):ActiveWorkbook.Name選取範圍的值:Selection.Value="AAA"表格篩選語法:Range("A1:H15").AutoFilterField:=篩選欄位的欄位序號Criterial:=篩選條件範例:Range("A1:H15").AutoFilterField:=2,Criteria1:="Man"Range("A1:H15").AutoFilterField:=4,Criteria1:=">=20"將「A1:H15」儲存格設定為篩選,及「資料\排序與篩選\篩選」:Range("A1:H15").AutoFilter設定完篩選完後,若要取消篩選,只要再下一次「Range("A1:H15").AutoFilter」,而不給篩選條件,即可。
屬性與方法屬性儲存格Range屬性儲存格的值:Range.Value儲存格位址:Range.Address(此屬性僅可讀取,不可設定)儲存格字型:Range.Font讀取語法:「物件.屬性」範例:MsgBox(Range("D1").Value)設定物件屬性質設定語法:物件.屬性=新的值範例:「Range("D1").Value="AAA"」縮排:編寫程式碼時,通常會利用Tab鍵縮排,將同一層的的語法利用縮排,排在同一條直線上,以方便解讀程式。
方法儲存格Range方法清除儲存格之值、格線、格式(例如:填入色彩):Clear刪除儲存格:Range.Delete選取儲存格:Range.Select語法:「物件.方法」範例:「Range("A1").Clear」方法+引數Range.Delete方法:儲存格刪除。
[Link]語法:「物件.方法引數名稱:=設定值」範例:將儲存格A1刪除,再將左邊資料位移填補,「Range("A1").DeleteShift:=xlShiftToLeft」語法:省略引述名稱,「物件.方法設定值」範例:將儲存格A1刪除,再將左邊資料位移填補,「Range("A1").DeletexlShiftToLeft」Range物件的Find方法:搜尋資料參考資料:[Link],[Link],LookIn[Link],LookAt[Link]語法:Range("A1:C10").Find(What:="搜尋的資料",LookIn:=搜尋資料類型,LookAt:=全部搜尋文字或部分搜尋文字相符)範例:Range("A1:C10").Find(What:="李小龍",LookIn:=xlValues,LookAt:=xlWhole),於儲存格A1:C10中的資料格值(LookIn:=xlValues),尋找「李小龍(What:="李小龍")」,且需全部文字相符(LookAt:=xlWhole)。
「物件」、「屬性」、「方法」的搜尋方式查詢說明文件說明文件-[Link]:VBE\說明\MicrosoftVisualBasicforApplication說明。
於VBE編輯VBA程式時,於「欲查詢處」點選後,按「F1」。
於網路(https://www.google.com.tw),查詢關鍵字「ExcelVBA關鍵字」。
查詢一本好的參考書籍。
錄製巨集開發人員\程式碼\錄製巨集→巨集名稱+(將巨集儲存於:現用活頁簿)→開始操作→開發人員\程式碼\停止錄製遇到不知道的物件、屬性、方法,可先利用巨集錄製產生範例提供參考。
不過,電腦產生的程式碼,有可能會有過於冗長,會產生許多不必要的程式碼。
字串與數值字串需利用雙引號「"」,於字串的前後標示。
例如:"ABCD"數值直接表示即可。
例如:5231物件資訊指定工作表的名稱Name:Worksheets(1).Name:第一個工作表的名字範例:Worksheets(1).Name="TEST"Worksheets(1).Name=Range("C1").Value表格篩選AutoFilter:[Link]Range("A1:E10").AutoFilterField:=2,Criteria1:="Man"引數Field:篩選的欄位序號引述Criteria1:篩選條件1新增方法Add:[Link]新增活頁簿:Workbooks.Add新增工作表-在第2個工作表Worksheets的後面新增一個工作表:Worksheets.AddAfter:=Worksheets(2)ThisWorkbook.Names.Add新增範圍名稱:[Link]範例:ThisWorkbook.Names.Add"範圍名稱",Range("A1:D10")。
Names.Add新增儲存格範圍名稱:[Link]刪除方法Delete刪除工作表:Worksheets(2).Delete刪除儲存格:Range("A1").DeleteShift:=xlShiftToLeft刪除範圍名稱:ThisWorkbook.Names("範圍名稱").Delete運算式與運算子資料輸入數值:直接輸入字串:字串前後都要加上「"雙引號」日期:日期前後都要將上「#」。
日期(#月/日/西元年#)、時間(#時:分:秒AM/PM#)。
日期為「序列值」,1為「12/30/1899」DateValue函數:可將字串轉成日期TimeValue函數:可將字串轉成時間範例:Range("A1").Value=#12/10/2019#Range("A2").Value=#10/29/197311:10:59PM#Range("A3").Value=DateValue("2019/10/15"),將「文字日期」轉換成「日期」。
Range("A4").Value=TimeValue("23:15:59"),將「文字時間」轉換成「時間」。
算數運算子加(+)、減(-)、乘(*)、除(/)、取商(\)、取餘數(Mod)、次方(^)語法:數值1運算子數值2字串連接運算子=「&」或「+」語法:字串1&字串2換行=「vbCrLf」「&」使用於數字連接時,可當字串連接,但「+」則當成數值計算。
除此之外,「&」和「+」的功能均相同。
常用常數[Link]「即時運算視窗」:VBE\檢視\即時運算視窗輸入:「?5+2」帶入運算子=「=」,將等號右邊的結果,存入左邊的變數或物件屬性裡。
邏輯判斷等於「=」練習乘法:MsgBox(Range.Value("C1").Value*10)除法:MsgBox(Range.Value("C1").Value/10)Range.End(方向)屬性:傳回端點儲存格參考資料[Link]傳回Range物件,該物件代表包含來源範圍之區域結尾處的儲存格。
相當於按下Ctrl+向上鍵、Ctrl+向下鍵、Ctrl+向左鍵或Ctrl+向右鍵。
方向參數:[Link]。
xlUp(上)、xlDown(下)、xlToLeft(左)、xlToRight(右)。
範例:Range("A1000").End(xlUp),由A1000往上找A欄中,最後一個有資料的儲存格。
Rnge.Offset(RowOffset,ColumnOffset):垂直方向移動RowOffset,水平方向移動ColumnOffset。
RowOffset:正數,向下移;負數,向上移。
ColumnOffset:正數,向右移;負數,向左移。
範例:Range("A1").Offset(1,0)。
傳回A1向下1格的儲存格,即A2。
變數應用語法:宣告變數。
若為未宣告變數資料型態,則為自動宣告為「Variant多樣型」。
Dim變數變數=值多變數宣告Dim變數1,變數2,變數3變數名稱「不分英文大小寫」。
語法:宣告「變數」與儲存於變數的「資料型態」Dim變數1,變數2As資料型態Dim變數1As資料型態1,變數2As資料型態2資料型態字串:String整數:Integer長整數:Long單精數:Single雙精數:Double日期:Date貨幣:Currency物件:Object多樣型:Variant使用「小數」時,常用的資料型態有Single和Double。
事先指定資料變數類型的優點:變數代入「值」的代入:利用「=」。
變數=值範例:Dimpr1AsInteger「物件」的代入:需利用「Set」與「=」Set變數=物件將變數內清除:Set變數=NothingRange.Copy方法:複製儲存格將第2個工作表中的「B4:E7」,複製至將第1個工作表中的「F9」:Worksheets(2).Range("B4:E7").CopyDestination:=Worksheets(1).Range("F9")Range.AutoFilter方法:若為設定「引數」,即儲存格設為「資料\排序與篩選\篩選」,但沒有設定篩選條件。
「A1:H15」儲存格設定為篩選,及「資料\排序與篩選\篩選」:Range("A1:H15").AutoFilterVBA使用變數可以不需要「事先宣告」。
為宣告的變數,會以「Variant」型態處理。
可代入「值」或「物件」。
「強制變數使用前要宣告」,在模組前增加「OptionExplicit」指令。
也可以直接在VBE內設定,「VBE\選項\編輯器\V要求變數宣告」。
特別變數宣告Variant,可使用任意「值」和「物件」的資料型態:Dim變數AsVariantObject,可使用任意「物件」的資料型態:Dim變數AsObjectActiveWorkbook.sheets:sheets代表工作表集合,與Worksheets相同。
[Link]範例:MsgBoxActiveWorkbook.sheets(1).Name,輸出工作中活頁簿的第一個工作表明稱。
TypeName(sheets):回傳物件的名稱。
[Link]常數常數:對「特定的固定值」給予「簡單的名稱」。
語法:Const常數名稱As資料型態=值常數有(1)自訂常數,(2)內建常數(常以xl或vb開頭)Range.Delete方法:刪除儲存格語法:Range("B2").DeleteShift:=引數引數=xlShiftToLeft:刪除儲存格,並由右邊儲存格左移填補。
[Link]引數=xlShiftToUp:刪除儲存格,並由下邊儲存格上移填補。
With陳述式語法:With物件.屬性=值.方法其他使用物件的程式碼EndWith模組等級變數:在「模組的開頭」且「不屬於任何巨集的地方」,宣告變數後,則該變數可在模組內所有的巨集使用該變數。
條件判斷-分歧執行、反覆執行If條件判斷成立-語法:If條件式Then條件成立時執行的程式碼區塊EndIf成立-不成立-語法(2個分歧):If條件式Then條件成立時執行的程式碼區塊Else條件不成立時執行的程式碼區塊EndIf成立-不成立-語法(3個分歧):If條件式1Then條件1成立時執行的程式碼區塊ElseIf條件2Then條件1不成立,但條件2成立時,執行的程式碼區塊Else條件1與條件2均不成立EndIf依此類推,可以寫出多個分歧路徑的語法「條件式」的寫法語法:運算式1/值1比較運算子運算式2/值2「值」比較運算子:小於:大於等於:>=等於:=不等於:<>「物件」運算子:等於/是:Is範例:Worksheets(2)IsWorksheets("工作表2"):成立變數IsNothing:(成立,變數內不存有物件),(不成立,變數內存有物件)「字串」運算子等於:=不等於:<>像/類似:LikeLike與萬用字元的組合應用任意長度字串:*任意1個文字:?任意1個數值:#[]內其中一個文字:[xyz][]外的文字:[!xyz]連續範圍[-]:[d-h]「多個」條件式之組合同時成立:條件式1And條件式2任一個條件式成立即可:條件式1Or條件式2反轉/反相條件式的結果:Not條件式SelectCase條件語法:SelectCase判斷/運算式/變數Case範圍1符合範圍1時,執行的程式碼區塊Case範圍2符合範圍2時,執行的程式碼區塊CaseElse不符合範圍1和範圍2時,執行的程式碼區塊EndSelect「範圍」的寫法某一個值:Case5某幾個值:Case3,5,8比較運算子設定範圍:CaseIs>60To範圍設定:Case10To90其他情況:CaseElse迴圈程序ForNext程序,含有固定重複次數:語法:For變數=初始值To終值重複執行的程式碼NextForEachNext程序,集合或陣列的處理:語法:ForEach處理單位變數In處理群組重複執行的程式碼Next其中「處理群組」為「集合」或「陣列」。
「處理單位變數」需「先以變數宣告」。
DoLoop程序,判斷「條件」迴圈:語法:Do重複執行的程式碼Loop終止條件:終止條件可放在「Do」或「Loop」後面。
While條件式:條件式為成立時,迴圈「繼續」執行。
Until條件式:條件式為成立時,迴圈「停止」執行。
陣列陣列宣告語法:語法:Dim陣列名(參數)As資料類型Dimarr(3)AsInteger:陣列有arr(0)、arr(1)、arr(2)、arr(3)共4個。
Dimarr(1To3)AsInteger:陣列有arr(1)、arr(2)、arr(3)共3個。
動態陣列,[Link]:定義陣列時,先不給定陣列大小,等要使用前再以ReDim定義陣列大小。
如果之後要再更改陣列大小,可使用ReDim,但若要保留之前存在陣列數值,需加Preserve,否則資料會被刪除。
Dimarr()AsIntegerReDimarr(2)arr(0)=1arr(1)=2arr(2)=3ReDimPreservearr(3)arr(3)=4Debug.Printarr(0),arr(1),arr(2),arr(3)Array()函數使用方法:先宣告變數為Variant型態。
變數=Array(元素1,元素2,元素3,元素4)範例:DimarrAsVariantarr=Array(1,2,3,4,5)Debug.Printarr(0),arr(1),arr(2),arr(3),arr(4)範例:物件,不需以Set設定物件DimarrAsVariantarr=Array(Range("A1"),Range("C1"),Range("E1"))Debug.Printarr(0).Address,arr(1).Address,arr(2).AddressFormat()函數應用:格式化資料顯示[Link-官方網站],[Link-使用範例]Ubound(陣列):陣列索引的上限Lbound(陣列):陣列索引的下限Join(陣列,間隔元素):[Link],將陣列裡的元素以「間隔元素」連接在一起,若沒有給「間隔元素」,則以「空白」間隔。
範例:DimaAsVariantDimbAsStringa=Array("Red","Blue","Yellow")b=Join(a)MsgBox(b)b=Join(a,"#")MsgBox(b)Split(字串,分隔元素)函數:[Link],將「字串」以「分隔元素」分割成「陣列」。
範例:DimmyarrAsVariantmyarr=Split("123#456#789","#")Debug.Printmyarr(0),myarr(1),myarr(2)計算與資料蒐集函數TypeName(參數):可傳回「參數」的「資料型態」。
字串函數,[Link],[Link2]。
日期與時間函數,[Link]。
Round()銀行家四捨五入函數:[Link]。
若可以進位,但進位後不是「偶數」,則不進位。
例:Round(10.51)→11Round(10.5)→10Round(10.4)→10日期與時間[Link]DimdAsDate'現在日期d=DateMsgBox("現在是:"&d)'現在時間d=Time()MsgBox("現在是:"&d)'現在日期與時間d=Now()MsgBox("現在是:"&d)Application.WorksheetFunction.函數():可呼叫Excel的函數()使用。
[Link]MsgBox函數,[Link]語法:MsgBox訊息,Buttons:=按鍵格式,Title:="標題"範例:MsgBox(Round(8.51,0),Buttons:=vbYesNo+vbCritical,Title:="TEST")Input函數,[Link]語法:InputBox(Prompt:="顯示內容",Title:="標題內容",Default:="預設輸入字串")時常配合函數:字串→數值:Val()函數字串→日期:DateValue()函數Appliction.IputBox()函數,[Link],[Link]語法:Application.InputBox(Prompt,Title,Default,Left,Top,HelpFile,HelpContextId,Type)例:DimselRangeasRangeSetselRange=Application.InputBox(Prompt:="選擇範圍",Type:=8)工作表函數使用原始Excel內建的函數。
工作表函數一覽表,[Link1],[Link2]Application.WorksheetFunction.工作表函數(引數)停止巨集:ExitSub事件處理事件活頁簿開啟活頁簿:Workbook_Open關閉活頁簿:Workbook_BeforeClose儲存活頁簿:Workbook_BeforeSave列印活頁簿:Workbook_BeforePrint儲存格變更:Workbook_SheetChange工作表致能工作表:Worksheet_Activate非致能工作表(選取其他工作表):Worksheet_Deactive刪除工作表:Worksheet_BeforeDelete選取儲存格:Worksheet_SelectionChange變更儲存格值:Worksheet_Change點2下儲存格:Worksheet_BeforeDoubleClick右鍵點1下儲存格:Worksheet_BeforeRightClick存取修飾子有「Private」和「Public」。
若設定為「Private」代表該巨集,僅能在該模組內使用。
若設定為「Public」或「沒有設定」,則外部模組也可使用該巨集。
範例PrivateSub巨集名稱()巨集程式碼EndSub若以「Private」和「Public」取代「Dim」宣告變數,若以「Public」宣告變數,則該變數可於模組外的其他模組使用。
[Link]範例:PublicmyvarAsInteger呼叫他巨集語法:Call巨集名稱Application.Intersect()方法,[Link]語法:Application.Intersect(Range1,Range2)傳回Range1與Range2間互相重疊的區域事件觸發致能/停止Application.EnableEvents=False'停止事件觸發Application.EnableEvents=True'致能事件觸發點2下儲存格:Worksheet_BeforeDoubleClick[Link]SubWorksheet_BeforeDoubleClick(ByValTargetAsRange,CancelAsBoolean)Target:回傳Range物件,傳回點2下的儲存格物件。
Cancel:布林值。
Cancel=True,可取消輸入狀態。
選取範圍Application.Selection方法或省略寫為Selection參考資料[Link]Range.Interior屬性:儲存格背景色,[Link],[Link-Interior.Color]Range("A1").Interior.Color=regRed'將儲存格A1填上紅色Range("A1").Interior.Color=RGB(255,0,0)'將儲存格A1填上紅色,[Link]Range("A1").Interior.ColorIndex=xlColorIndexNone'將儲存格A1填上無顏色,[Link],[Link2]自訂巨集Range.CurrentRegion自動擴展選取連續儲存格範圍,[Link],[Link]範例:Range("A1").CurrentRegion變數宣告的「位置」與「習慣」:一般宣告變數時,希望在「巨集的開頭」處宣告,方便讓讓讀者瞭解該巨集有哪些變數需使用。
另有宣告變數時,希望在「第一次使用該變數」前,避免讓讀者不知道為什麼要使用該變數。
Range.Rows:傳回指定範圍的列,[Link]範例:傳回選取範圍的第1列:Selection.Rows(1)Range("A1:B2").Rows(5).Select會傳回儲存格A5:B5Range.Columns:傳回指定範圍的欄,[Link]範例:Selection.Columns(1)會傳回選取範圍的第一欄Range("A1:B2").Columns(5).Select會傳回儲存格E1:E2Exit跳出ExitSub:跳出巨集SubExitIF:跳出If判斷ExitDo:跳出Do迴圈Range.FindNext:本方法尋找相符合同一條件的下儲存格,並傳回代表該儲存格的Range物件。
[Link]語法:Range.FindNext("儲存格位址")於儲存格位置後,搜尋下一個符合條件的儲存格。
WorksheetFunction.Max(範圍):使用Excel內建函數Max,找出範圍中最大數值。
Range.ClearContents:清除儲存格的「值」和「公式/算式」。
Range.Clear:清除儲存格的「值」和「公式/算式」和「格式」。
Range.Formula:以"字串"設定儲存格的公式,而公式裡面的儲存格位址以A1或C3,這種方式表示。
例如:Range("A1").Formula="=B2*C3"Range.FormulaR1C1[Link]:以「R1C1」標記法設定儲存格公式。
'以當時選取之儲存格為中心點'R[位置]:向上為減數,向下為正數'C[位置]:向左為減數,向右為正數例如:Range("A1").FormulaR1C1="=R[1]C[1]*R[3]C[2]"。
其中R[1]C[1]代表以A1為起點,R[1]為向下移動1行,C[1]為向右移動1列,即為B2。
其中R[2]C[2]代表以A1為起點,R[2]為向下移動3行,C[2]為向右移動2列,即為C4。
多工作表資料統計帶「引數」的自訂巨集語法:Sub巨集名稱(引數)巨集內的命令EndSub引數的命名方法與變數的命名方法一樣。
呼叫帶引數的巨集,需使用「Call」指令。
Ubound(陣列):傳回陣列的索引值的「最大值」。
[Link]Lbound(陣列):傳回陣列的索引值的「最小值」。
[Link]ActiveWindow.SelectedSheets:作用中的活頁簿中,被選取的工作表。
多活頁簿資料統計開啟活頁簿:語法:物件.Open(活頁簿的路徑)關閉活頁簿:語法:物件.CloseDir()函數:傳回符合搜尋目標(路徑+檔名格式),檔案的檔名。
傳回字串表示檔案、目錄或資料夾的名稱與指定模式、檔案屬性或是磁碟機的磁碟區標籤相符。
語法:Dir(檔案路徑&檔名規則)Dir函數可以使用字串的萬用字元「*」。
再繼續使用,可得到下一個檔案名稱。
若沒有檔案,則會傳回「空白字串」。
Applicatiov.ActiveWindow:使用中的Excel視窗[Link]Application.ActiveWindow.Caption:使用中的Excel視窗的名稱[Link]ActiveWindow.SelectedSheets:使用中的Excel視窗被選取的工作表集合。
[Link]ActiveWorkbook.Path:工作中活頁簿所在的「路徑」。
[Link]Application.GetOpenFilename:選取檔案對話視窗,可回傳完整檔案路徑與檔名。
[Link]語法:Application.GetOpenFilename(引數)「檔案種類FileFilter」引數,檔案篩選準則。
範例:FileFilter:="TextFiles(*.txt),*.txt,Add-InFiles(*.xla),*.xla"FileFilter:="VisualBasicFiles(*.bas;*.txt),*.bas;*.txt"FileFilter:="AllFiles(*.*),*.*"FileFilter:="Excel活頁簿(*.xlsx;*.xlsm),*.xlsx;*.xlsm"Application.FileDialog(檔案對話類型):檔案對話視窗。
[Link]檔案對話類型:msoFileDialogFilePicker:可讓使用者選取檔案。
msoFileDialogFolderPicker:可讓使用者選取資料夾。
msoFileDialogOpen:可讓使用者開啟檔案。
msoFileDialogSaveAs:可讓使用者儲存檔案。
Application.FileDialog(msoFileDialogFolderPicker).Show:顯示資料夾選取視窗。
Application.FileDialog(msoFileDialogFolderPicker).Title:「資料夾選取視窗的標題」屬性。
Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1):回傳第1個選取的資料夾名稱。
練習1.Range.PrintOut:列印指定範圍的儲存格。
[Link]例如:Range("A1:F10").PrintOutRange.Select:選取儲存格。
例如:Range("A1:F10").SelectRange.Rows.Count:儲存格範圍的「行數」。
Range.Columns.Count:儲存格範圍的「列數」。
Range.Rows(序列數):回傳第「序列數」的列Range.RowHeight屬性:回傳列高Range.ColumnWidth屬性:回傳行寬Range.Copy方法:複製儲存格。
[Link]語法:Range.copyDestination:=目標範例:orksheets("Sheet1").Range("A1:D4").Copydestination:=Worksheets("Sheet2").Range("E5")Range.Cells屬性:回傳範圍內的儲存格,回傳Range物件。
[Link],[Link-範例]Cells(列索引,欄索引):關鍵字後面緊接著指定列索引及欄索引。
範例:Cells(3,2)傳回儲存格「$B$3」,Cells(3,"B")傳回儲存格「$B$3」。
Range.Row屬性:傳回範圍內第1列的「列號」。
[Link]例如:Range("C5").Row,回傳「5」。
Range.Column屬性:傳回範圍內第1欄的「欄號」。
[Link]例如:Range("C5").Column,回傳「3」。
Range.SpecialCells(引數):傳回Range物件,代表與指定的類型及值相符的所有儲存格。
[Link]範例:Range("A1:F20").SpecialCells(xlCellTypeFormulas),傳回含有公式的儲存格物件。
2.ListObjects集合:「表格」集合。
[Link]ListObjects("表格名稱"),表格物件。
ListObject.ListRows:回傳ListRows物件。
表格物件的所有資料列,不包含標題列、總計列、插入列。
範例:Worksheets("工作表1").ListObjects("表格1").ListRows.Count,傳回工作表1內的表格1不包含標題列的列數。
範例:Worksheets("工作表1").ListObjects("表格1").ListRows(1).Range,工作表1內的表格1,其內的第1列中的儲存格物件。
ListObject.DataBodyRange:回傳Range物件。
表格內的值,不包含標題列。
[Link]Range.Sort:儲存格物件排序。
[Link]Range("A1:F20").SortKey1:=Range("A1"),Order1:=xlAscending,Header:=xlYes,資料範圍A1:F20進行排序,以欄位A1地增排序,有列標題且不加入排序。
ListRows.Add(位置,AlwaysInsert):將資料新增至ListObject物件內。
[Link]範例:dataTable.ListRows.Add(5,True).Range.Value=Array("abc",10,20)'將陣列("abc",10,20)插入第5列,(True)並將原第5列下移。
3.Worksheet.Move:移動工作表[Link]範例:Worksheets(3).MoveBefore:=Worksheets(1),將第3個工作表移到第1個工作表前。
Application.ScreenUpdating=False:Excel執行時,不要更新畫面。
[Link]選擇性引數Optional:[Link]範例:Subname(ByValparameter1Asdatatype1,OptionalByValparameter2Asdatatype2=defaultvalue)Range.AdvancedFilter方法:根據準則範圍,從清單中篩選或複製資料。
[Link]範例:對「儲存格B3:I51的第4欄」進行篩選,將篩選的資料複製到新位置(Action:=xlFilterCopy),新位置為第2個工作表的儲存格A1(CopyToRange:=Worksheets(2).Range("A1")),且只篩選出唯一的項目(Unique:=True),即相同的項目只留下一個。
Range("B3:I51").Columns(4).AdvancedFilterAction:=xlFilterCopy,CopyToRange:=Worksheets(2).Range("A1"),Unique:=True範例:dataRange.AdvancedFilterAction:=xlFilterCopy,CriteriaRange:=tmpSheet.Range("A1:A2"),CopyToRange:=baseRange.CurrentRegionAdvancedFilter方法:即「資料\排序與篩選\進階」,但使用此功能時,「篩選資料來源」、「篩選條件」、「結果目的地」需在同一個工作表中的工作表內。
CStr()函數轉換為字串String:[Link],[Link2]Replace()函數,搜尋目標字串後取代:[Link],[Link2]範例:Replace("Welcome~Everyone.","~","!"),搜尋「~」取代為「!」。
Left()函數,取回字串左邊n各字元:[Link]。
範例:Left("Welcome~Everyone.",7),得「Welcome」。
Range.EntireColumn屬性:[Link],傳回Range物件,傳回所有範圍內所有的欄位。
Range.AutoFit方法:[Link],將範圍內的表格欄位寬度與列高調整到最適大小。
ListObjects.Add方法:[Link],建立新的清單物件。
範例:Worksheets(1).ListObjects.Add(SourceType:=xlSrcRange,Source:=Range("B2:F12"),XlListObjectHasHeaders:=xlYes)於第1個工作表內「Worksheets(1)」,新增一個表格「ListObjects.Add」,表格資料來源是Range物件「SourceType:=xlSrcRange」,資料來源儲存格範圍為B2:F12「Source:=Range("B2:F12")」,資料來源有欄位標題「XlListObjectHasHeaders:=xlYes」。
Worksheets.Delete方法:[Link],刪除工作表。
當在刪除工作表時,均會顯示提示視窗,若要預設不顯示該視窗,可加一行指令「Application.DisplayAlerts=False」,即可。
4.Intersect(Range1,Range2,...)函數:[Link1],[Link2]。
回傳Range物件,即回傳互相重疊的儲存格範圍。
OnError陳述式:[Link],[Link2],[圖解說明],[圖解說明]OnErrorResumeNext會執行緊接在陳述式會導致執行時期錯誤,此陳述式繼續執行]或[緊接在最新的陳述式通話超出含有OnError的程序繼續下一步陳述式。
OnErrorResumeNext表示當一個執行階段錯誤產生時,程式控制立刻到發生錯誤陳述式接下去的陳述式,而繼續執行下去。
OnErrorGoTo0停止現在程序裏任何已啟動的錯誤處理程式,但會跳出錯誤訊息框。
Val()函數:字串→數值Trim()函數:[Link1],[Link2]。
去除字串前後的空格。
Join(陣列,分隔符號)函數:[Link1],[Link2]。
將陣列中的元素以「分隔符號」串接起來,若未給分隔符號則以「空白」串接。
程式除錯,ErrorHandling錯誤處理:[Link]。
Err.Number錯誤號碼、Err.Description錯誤敘述:[Link]Application.Undo方法:[Link]。
取消最後一個使用者介面動作。
Application.EnableEvent方法:[官方],[Link-使用時機],[Link-使用時機2]。
啟動/取消物件觸發事件發生。
DateAdd(interval,number,date)函數:[官方],[Link]。
傳回設定間隔時間距離後的日期。
範例:DateAdd("m",1,"31-Jan-95"),1995/1/31後1個月的日期。
Day()函數:[Link]。
傳回日期(年月日)中的「日」。
範例:Day(#February12,1969#),回傳「12」Range.Row屬性:傳回範圍內第1列的「列號」。
[Link]例如:Range("C5").Row,回傳「5」。
Range.Cells屬性:回傳範圍內的儲存格,回傳Range物件。
[Link],[Link-範例]Cells(列索引,欄索引):關鍵字後面緊接著指定列索引及欄索引。
範例:Cells(3,2)傳回儲存格「$B$3」,Cells(3,"B")傳回儲存格「$B$3」。
Range.Interior屬性:儲存格背景色,[Link]Range("A1").Interior.Color=regRed'將儲存格A1填上紅色Range("A1").Interior.Color=RGB(255,0,0)'將儲存格A1填上紅色,[Link]Range("A1").Interior.ColorIndex=xlColorIndexNone'將儲存格A1填上無顏色,[Link],[Link2]Application.WorksheetFunction.函數():可呼叫Excel的函數()使用。
[Link]Excel函數Transpose()函數:[官方]。
轉置/旋轉儲存格。
Match()函數:[官方],[Link-範例]。
MATCH(搜尋值,搜尋範圍,搜尋類型)。
搜尋值:想要尋找的值。
搜尋範圍:搜尋的範圍。
搜尋類型:指定搜尋類型,若至指定為0則代表尋找完全一樣的值;若指定為1則代表尋找小於或等於搜尋值的最大值;若指定為-1則代表尋找大於或等於搜尋值的最小值。
CLng()函數:[官方],將數值轉會為長整數Long。
ActiveWindow物件:[官方]。
代表目前在上方/目前在使用的Excel視窗。
ActiveWindow.RangeSelection方法:[官方]。
傳回Range物件,代表所指定視窗中工作表上選取的儲存格。
Range.Column屬性:傳回範圍內第1欄的「欄號」。
[Link]例如:Range("C5").Column,回傳「3」。
ReportabuseGoogleSitesReportabuse
延伸文章資訊
- 1EXCEL VBA:儲存格@ 我的生活.我自己 - 隨意窩
Item(5,3) '引儲存格C5 '作用儲存格:ActiveCell ActiveCell. ... 201205310000EXCEL VBA:儲存格 ?未分類. 儲存格. [R1C1]格式...
- 2Excel VBA取得儲存格的值及位置:回傳畫出數學向量
本文介紹VBA的AddConnector、ShapeRange.Line、With…End、ActiveSheet.Cells.Value等方法,設計程式依照Excel所輸入的儲存格位址畫出線條箭頭。
- 3VBA004 取得啟用中的儲存格位址 - 錦子老師
Chapter VBA VBA004 取得啟用中的儲存格位址Section 如果目前最前方的表為工作表,而非圖表、表單等等…,就回傳回作用中單一儲存格的絕對位址, ...
- 4Range.Address 屬性(Excel) | Microsoft Docs
附註:以Excel VBA 7.1 進行測試的結果顯示不一定需要明確的起始點。 ... 下列範例對Sheet1 中的同一儲存格位址使用了四種不同的表達模式。
- 5如何用vba知道作用儲存格&欄&列的位置- Excel程式區
如題: 我想透過巨集的方式得知作用儲存格位置,例如得知為RANGE("A5") 也想透過vba自動查詢某一關鍵字,查詢完之後,想得知查詢的儲存格位置並且想 ...