VBA / 初階課程筆記-1

嘗試整理之前在東吳進修推廣部的 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個儲存格