嘗試整理之前在東吳進修推廣部的 VBA 初階與進階課程的筆記
目前的構想是透過每次上課的大綱與範例練習檔,從中抓出重點
資料有點久遠,整理起來才發覺自己當初都沒好好做好筆記跟分類檔案
資料會直接引用當時的範例檔案,在此先說明一下,避免侵犯到講師著作權
但還是會以自己的筆記與理解為主
105.3.3 第1次上課 (範例-01文字與資料函數.xls)
1.Excel文字類函數練習:
REPT(要重複的字元 , 依據條件)
INT(),將輸入的數值字元串轉為整數資料型態,如果是浮點數(小數)則四捨五入
綜合練習
題目說明:請計算各員工應得到「★」等級(每100筆銷售量給予一顆★)
*運用到REPT與INT函數
C3=REPT(“★”,INT(B3/100))公式
說明:銷售量/100,由INT取四捨五入之後的整數,即為★的重複次數
LEFT(輸入字元串 , 字元數),從輸入的字元串串從左邊開始取幾個字元
RIGHT(輸入字元串 , 字元數),從輸入的字元串從右邊開始取幾個字元
綜合練習,分別取出區域號碼與電話號碼
公式
B11=LEFT(A10,2)
C11=RIGHT(A10,8)
LEN(),返回值=字元串的長度-字元數,包含空格,結果為數值
MID(輸入字元串 , 起始字元位置 , 長度),取出範圍內的字元串
TRIM(輸入字元串),將輸入的字元串中多餘的空格刪除,但假如兩個字元中只有一個空白,則不會被刪除
LEN()+IF練習
公式:
C3=LEN(B2)
D3=IF(LEN(B3)=10,"R","W")
,如果字元串長度為10字元則R,非10為W
MID()+IF練習
公式:
C12=MID(B12,2,1)
,從身份證字號-B12的第2字元,取1字元
D12=IF(MID(B12,2,1)="1","男","女")
,從身份證字號-B12的第2字元,取1字元→判斷1為男,非1為女
F12=IF(MID(B12,2,1)="1","先生","女士")
,從身份證字號-B12的第2字元,取1字元→判斷1為先生,非1為女士
備註:Excel的 IF(條件判斷式 , 成立時執行的程序 , 不成立時執行的程序)
2.如何在Excel編寫VBA程序
1) 開發人員→Visual Blasic
2) 插入→模組
3) 插入→程序
4) 新增程序
◎ 型態:
Sub 一般的VBA執行程序
Function 必須有引數,可以在excel當作函數使用,會有傳回值(結果)
◎ 有效範圍:
Public 可以跨模組使用
Private 只能在目前模組使用
3.使用VBA串接格式化文字
1) VBA ,撰寫 Sub()程序
Public Sub 門號()
For i = 4 To 103
Cells(i, "E") = "09" & Cells(i, "F") & "-" & Format(Cells(i, "G"), "000") & "-" & Format(Cells(i, "H"), "000")
Next
End Sub
備註:這裡用到VBA的For Next 迴圈
For 迴圈範圍(例如,i = 1 To 3,這樣會執行3次迴圈)
執行的程序
Next
備註:VBA的連結符號為 & 跟Excel一樣,字串必須用雙引號包起來,也跟Excel一樣
備註:VBA的Format()的使用方式跟Excel的Text()函數一樣
Format(儲存格 , 格式) == Text(儲存格 , 格式)
2) 按下執行
3) 工作表呈現結果 E欄
備註:如何在工作表設定表單控制項按鈕或圖案:指定巨集
1) 圖案-指定巨集
2) 表單控制項按鈕-指定巨集
4.如何自訂函數說明
1) VBA,撰寫 Function()程序
Public Function 手機(電信業者, 區碼, 末碼)
手機 = "09" & 電信業者 & "-" & Format(區碼, "000") & "-" & Format(末碼, "000")
End Function
備註 Function 手機,除了是名稱之外,也是用來接收傳回值
Function ( )內的是函數引數,也就是在工作表使用時要帶入的儲存格
2) 插入函數→使用者定義
3) 如同一般內建函數的使用方式
4.如何將自訂函數來源引數改為範圍
1) 撰寫VBA
Public Function 手機範圍(電信範圍)
a = 電信範圍
手機範圍 = "09" & a(1, 1) & "-" & Format(a(1, 2), "000") & "-" & Format(a(1, 3), "000")
End Function
這裡的「電信範圍」其實是涵蓋了同一列的連續 3個儲存格範圍
2) 工作表,選取的是連續 3個儲存格