課程名稱:程式設計 授課老師:________ 第 八 章 內建函數的應用 課程名稱:程式設計 授課老師:________ 2017/3/9
本章學習目標 1.讓讀者瞭解內建函數的種類及各種應用。 2.說明使用者自定函數與內建函數的差異。 2017/3/9
本章內容 8-1 字串函數 8-2 轉換函數 8-3 數值函數 8-4 日期函數 8-5 IS相關函數 8-6 習題 2017/3/9
8-1 字串函數 函數名稱 功能說明 8-1.1 Left( ) 取字串左邊的字元 8-1.2 Right( ) 取字串右邊的字元 8-1.3 Mid( ) 取字串中間的字元 8-1.4 Len( ) 取字串的長度 8-1.5 LTrim( ) 與 Trim( ) 與 RTrim( ) 刪除字串中的空白字元 8-1.6 LCase( ) 與 UCase 轉換小寫與大寫字母 8-1.7 InStr( ) 尋找字串的最先出現位置 8-1.8 InStrRev( ) 反向尋找字串的最先出現位置 8-1.9 Space(n) 產生n個空白字元 8-1.10 StrConv(Str,id) 依照id的數值轉換指定的樣式 8-1.11 StrReverse(Str) 將字串反向排列 8-1.12 StrComp(Str) 比較兩個字串 8-1.13 Choose( ) 依據指定的值來取出對應的字串 8-1.14 Replace( ) 將字串中某些特定字串取代成另一字串 8-1.15 Split( ) 將字串分割成字串陣列 8-1.16 Join( ) 將字串陣列組合成一個字串 2017/3/9
8-1.1 Left ( ) 取字串左邊的字元 【語法】Left_str=Microsoft.VisualBasic.Left(Str,n) ' 指將Str字串的左邊n個字元放到Left_str中 2017/3/9
2017/3/9
8-1.2 Right ( ) 取字串右邊的字元 【語法】Right_str= Microsoft.VisualBasic.Right(Str,n) ' 指將Str字串的右邊n個字元放到Right_str中 2017/3/9
2017/3/9
8-1.3 Mid( ) 取字串中間的字元 【語法1】Mid_str=Mid(Str,n) ' 指將Str字串的第n個字元起後的全部字元放到Mid_str中 【語法2】Mid_str=Mid(Str,n,m) ' 指將Str字串的第n個字元起後面的m個字元放到Mid_str中 2017/3/9
2017/3/9
2017/3/9
2017/3/9
2017/3/9
8-1.4 Len( ) 取字串的長度 【語法】Len_str=Len(Str) ' 指將Str字串長度的值放到Len_str中 2017/3/9
2017/3/9
8-1.5 LTrim( ) 與 Trim( ) 與 RTrim( ) 刪除字串中的空白字元 【語法1】L_str=LTrim(Str) '傳回Str字串左邊的不含空白字元的字串 【語法2】T_str=Trim(Str) '傳回Str字串左右兩邊的不含空白字元的字串 【語法3】R_str=RTrim(Str) '傳回Str字串右邊的不含空白字元的字串 【說明】Trim(Str)與RTrim(LTrim(Str))功能一樣,都是刪除字串前後的 空白字元 2017/3/9
2017/3/9
8-1.6 LCase( ) 與 UCase 轉換小寫與大寫字母 【語法1】VBStr=LCase(Str) ' 指將Str字串轉成小寫字母放到VBStr變數中 【語法2】VBStr=UCase(Str) ' 指將Str字串轉成大寫字母放到VBStr變數中 2017/3/9
2017/3/9
8-1.7 InStr( ) 尋找字串的最先出現位置 【語法1】VBStr=InStr(Str1,Str2) 【語法2】VBStr=InStr(n,Str1,Str2) '指從Str1字串的左邊開始往右邊第n個字元找起,找出Str2首次出現的 【說明】 1. InStr(Str1,Str2)=InStr(1,Str1,Str2) 2. 如果找不到字串時,則傳回0 2017/3/9
2017/3/9
2017/3/9
8-1.8 InStrRev( ) 反向尋找字串的最先出現位置 【語法1】VBStr=InStr(Str1,Str2) ' 指從Str1字串的右邊開始往左邊第1個字元找起,找出Str2首次出現的 位置到VBStr變數中 【語法2】VBStr=InStr(Str1,Str2,n) ' 指從Str1字串的右邊開始往左邊第n個字元找起,找出Str2首次出現的 【說明】 1.InStrRev函數與InStr相同,只不過InStrRev是從右邊開始往左邊反向 的搜尋。 2. InStr(Str1,Str2)=InStr(Str1,Str2,1) 3. 如果找不到字串時,則傳回0 2017/3/9
2017/3/9
2017/3/9
8-1.9 Space(n) 產生n個空白字元 【語法】VBStr=Space(N) 【說明】指傳回n個空白字元的字串放到VBStr變數中 2017/3/9
8-1.10 StrConv(Str,id) 依照id的數值轉換指定的樣式 【語法】VBStr=StrConv(Str, id) 【說明】指依照id的數值轉換指定的樣式放到VBStr變數中 2017/3/9
2017/3/9
8-1.11 StrReverse(Str) 將字串反向排列 【語法】VBStr=StrReverse(Str) 【說明】傳回字串反向排列後放到VBStr變數中 2017/3/9
8-1.12 StrComp(Str) 比較兩個字串 【語法】VBStr=StrComp(Str) 2017/3/9
2017/3/9
2017/3/9
8-1.13 Choose( ) 依據指定的值來取出對應的字串 【語法】VBStr=Choose(index, str1,str2,……,strN) 【說明】依據Index的值,來傳回指定的字串。 2017/3/9
2017/3/9
8-1.14 Replace( ) 將字串中某些特定字串取代成另一字串 【語法】VBStr=Replace(Str, A,B) 【說明】將Str字串中的A字串取代成為B字串,若B字串為空字串, 則Str字串中的A字串將被刪除。 2017/3/9
2017/3/9
8-1.15 Split( ) 將字串分割成字串陣列 Split函數可以將母字串分解成許多子字串。 【語法】A=Split(Str1, Str2) 【說明】將Str1母字串依照Str2子字串的區隔符號,分解成許多個子字串, 並放到A子串陣列中,而A必需為Variant型態。 【舉例】 a = Split("1234567890987654321", "0"),這一個意思是說,有一個字串是 1234567890987654321,我們用 0 這個字把他當成肢解關鍵字,然後傳回到 A 變數裡, A 變數必需為Variant型態。 2017/3/9
2017/3/9
8-1.16 Join( ) 將字串陣列組合成一個字串 Join函數則可以將字串陣列結合成一個新的字串。 【語法】S=Join(aArray, Str) 【說明】將aArray子串陣列依照Str合併子字串的區隔符號,結合成一個新 的字串。如果Str參數省略,則以空白字元當做分隔字元。 2017/3/9
2017/3/9
8-2 轉換函數 在「文字框」工具的屬性中,Text屬性算是最常使用的屬性之一,其功能就是不管輸入的資料是文字或是數值,Visual Basic 2010都自動轉成字串存入Text屬性中。所以,在程式碼中欲對Text屬性中的資料做數值計算時,必須先使用Val函數將文字資料轉成數值方能做各種計算。 2017/3/9
8-2.1文字與數值轉換函數 函數名稱 功能說明 8-2.1.1 sc( ) 字元轉成Ascii碼 8-2.1.2 Chr( ) 8-2.1.3 Val ( ) 將字串轉成數值型態 8-2.1.4 Str ( ) 與CStr( ) 將數值轉成字串型態 2017/3/9
8-2.1.1 Asc( ) 字元轉成Ascii碼 【語法】Asc_str=Asc(Str) ' 傳回Str字串的第一個字元轉成Ascii碼 2017/3/9
8-2.1.2 Chr( ) Ascii碼轉成字元 【語法】Chr_str=Chr(Num) ' 將數值資料轉成相對應的Ascii字元 2017/3/9
8-2.1.3 Val ( )將字串轉成數值型態 【語法】Int_str=Val(Str) ' 指將Str字串轉成數值 【說明】Val在轉換字串時,如果Str的第一個字元不是數字時,Val將會無 法讀取字串,並且傳回數字0。 2017/3/9
8-2.1.4 Str ( ) 與CStr( ) 將數值轉成字串型態 【語法1】Str_str=Str(Int) ' 指將Int數值轉成字串 【說明1】Str在轉換數值時則: 1. Int數值為正數,則數值前面會保留一個空白字串。 2. Int數值為負數,則數值前面會有一個負號。 【語法2】Str_str=CStr(Int) ' 指將Int數值轉成字串 【說明2】CStr在轉換數值時則: Int數值為正數,則數值前面不會保留一個空白字串。 2017/3/9
2017/3/9
8-2.2 Format格式化轉換函數 Format函數是用來指定顯示內容的格式,它可以針對數值資料或日期資料來設定不同的顯示方式。 一、數值資料格式的字元列表 序號 格式字元 名稱 功能 1 C或c 貨幣格式 顯示使用者設定的貨幣格式 2 D或d 顯示含有小數點 顯示10進位數值中含有小數點的數值 3 E或e 科學符號 顯示六位數的科學符號 4 F或f 固定小數 顯示含有二位小數的數值 5 G或g 一般格式 顯示不含千位分隔符號的數值 6 N或n 基本格式 顯示含有二位小數及千位分隔符號 7 P或p 百分比格式 顯示含有百分比%的符號 8 X或x 十六進位格式 顯示十六進位的數值 2017/3/9
2017/3/9
2017/3/9
二、日期資料格式的字元列表 序號 格式字元 名稱 功能 1 D 完整日期 顯示的完整日期 2 d 簡短日期 顯示的簡短日期 3 F 完整日期及時間 顯示的完整日期與時間 4 f 簡短日期及時間 顯示的簡短日期與時間 5 G 一般日期 顯示的日期與時間 6 g 簡短日期與時間 顯示的簡短日期與簡短時間 7 T 完整時間 顯示時、分、秒的完整時間 8 M,m 月日格式 顯示幾月幾日 2017/3/9
2017/3/9
2017/3/9
除了以上所介紹的之外,VB2010還提供數值轉換函數,如下所示: 函數名稱 功能說明 8-2.2.1 FormatCurrency ( ) 將數值資料轉成貨幣值格式 8-2.2.2 FormatNumber ( ) 將數值資料格式化 8-2.2.3 FormatPercent ( ) 2017/3/9
8-2.2.1 FormatCurrency ( ) 將數值資料轉成貨幣值格式 【語法】Currency_value=FormatCurrency(X , n , vbTrue 或 vbFalse) 【說明】X代表數值資料,n代表小數位數 vbTrue代表小數點前要補零,vbFalse代表小數點前不用補零 2017/3/9
8-2.2.2 FormatNumber ( ) 將數值資料格式化 【語法】Number_value=FormatNumber(X , n , vbTrue 或 vbFalse) 【說明】X代表數值資料,n代表小數位數 vbTrue代表小數點前要補零,vbFalse代表小數點前不用補零 2017/3/9
8-2.2.3 FormatPercent ( ) 將數值資料格式化 【語法】Percent_value=FormatPercent(X , n , vbTrue 或 vbFalse) 【說明】X代表數值資料,n代表小數位數 vbTrue代表小數點前要補零,vbFalse代表小數點前不用補零 2017/3/9
8-2.3 數值型態轉換函數 函數名稱 功能說明 傳回n的整數部份 傳回轉換後整數n的資料型態 8-2.3.1 CByte (n ),CShort(n),CInt(n),CLng(n) 傳回n的整數部份 8-2.3.2 CSng (n ),CDbl(n),CDec(n) 傳回轉換後整數n的資料型態 2017/3/9
8-2.3.1 CByte (n ),CInt(n),CLng(n) 取整數部份 【語法1】VB_n=CByte(n) ‘ 指將n的整數部份以四捨五入轉成整值型態放 到Left_str中並且傳回值屬於Byte(位元)數值型態 【語法2】VB_n=CInt(n) ' 傳回值屬於Integer(整數)數值型態 【語法3】VB_n=CLng(n) ' 傳回值屬於Long(長整數)數值型態 2017/3/9
2017/3/9
8-2.3.2 CSng (n ),CDbl(n) 轉換整數的資料型態 【語法1】VB_n=CSng(n) ' 將數值n轉換成Single數值型態 【語法2】VB_n=CDbl(n) ' 將數值n轉換成Double數值型態 2017/3/9
8-2.4 其他轉換函數 函數名稱 功能說明 CBool(n ) 傳回轉換後的布林資料型態 CBool(n ) 轉換布林資料型態 8-2.4 其他轉換函數 函數名稱 功能說明 CBool(n ) 傳回轉換後的布林資料型態 CBool(n ) 轉換布林資料型態 【語法】VB_n=CBool(n) ' 將關係運算式與算術運算式的結果,轉換成布林 代數之資料型態。 【說明】1.當關係條件式成立時,則傳回True,否則傳回False。 2.當算術運算式結果為0時,則傳回False,否則傳回True。 【舉例】 Dim num1 As Integer=99 Dim num2 As Integer=100 MsgBox ("印出:" & CBool(num1=num2) ) ' 印出:False MsgBox ("印出:" & CBool(num1-num2) ) ' 印出:True MsgBox ("印出:" & CBool(num2-num1) ) ' 印出:True 2017/3/9
8-3 數值函數 System.Math命名空間中的Math類別,提供了很多和數學有關的函數。在我們利用程式來處理數值性的資料時,如果能夠善加利用VB2010內建的數值函數時,則可以節省許多時間。例如欲求某一個數值的絕對值時,如果利用If/Then結構來撰寫也可以達到此目標,但必須要撰寫較多的程式,但是,如果利用Abs( )函數就可以輕易取得絕對值。 2017/3/9
8-3.3 Math.ASin ( ) Math.ACos ( ) Math.ATan ( ) 反三角函數 函數名稱 功能說明 8-3.1 Math.Abs ( ) 取絕對值 8-3.2 Math.Sin ( ) Math.Cos( ) Math.Tan ( ) 正三角函數 8-3.3 Math.ASin ( ) Math.ACos ( ) Math.ATan ( ) 反三角函數 8-3.4 Math.Exp ( ) 指數函數 8-3.5 Math.Log ( ) 自然對數函數 8-3.6 Math.Sgn ( ) 符號函數 8-3.7 Math.Round(X) 可依照指定所求出X的小數點位數並四捨五入 8-3.8 Math.Sqrt(X) 求X的平方根 8-3.9 Rnd(x) 亂數函數 8-3.10 Int(X) 取≦X的最大整數值 8-3.10 Fix(X) 取X的整數部,直接刪除小數點部份 8-3.11 Hex(X) 傳回X的16進位數值 8-3.11 Oct(X) 傳回X的8進位數值 2017/3/9
8-3.1 Math.Abs ( ) 取絕對值 【語法】Abs_int= Math.Abs(X) ' 傳回X數值的絕對值 【說明】不論X數值是正或負數,Abs_int一定是≧0 2017/3/9
2017/3/9
8-3.2 Math.Sin ( ) 、Math.Cos ( ) 、 Math.Tan ( ) 正三角函數 【語法1】Sin_value= Math.Sin(X) ' 傳回X數值的正弦值 【語法2】Cos_value= Math.Cos(X) ' 傳回X數值的餘弦值 【語法3】Tan_value= Math.Tan(X) ' 傳回X數值的正切值 【說明】將角度轉成徑度的計算公式如下所示: 徑度=角度*PI / 180 , 其中PI是指圓週率3.14159265358979 2017/3/9
2017/3/9
8-3.3 Math.ASin ( ) 、Math.ACos ( ) 、 Math.ATan ( ) 反三角函數 【語法1】Sin_value= Math.ASin(X) ' 傳回X數值的反正弦值 【語法2】Cos_value= Math.ACos(X) ' 傳回X數值的反餘弦值 【語法3】Tan_value= Math.ATan(X) ' 傳回X數值的反正切值 【說明】將角度轉成徑度的計算公式如下所示: 徑度=角度*PI / 180 , 其中PI是指圓週率3.14159265358979 2017/3/9
2017/3/9
8-3.4 Math.Exp ( ) 指數函數 【語法】Exp_value=Math.Exp(X) ' 傳回e的X次方,也就是eX 當X>709.782712893時,將會產生溢位。因為超出Double(雙精 準度)的表示範圍。 2017/3/9
8-3.5 Math.Log ( ) 自然對數函數 2017/3/9
8-3.6 Math.Sign ( ) 符號函數 【語法】Sgn_value= Math.Sign(X) ' 傳回X的正負符號 【說明】 當X>0時,則Sgn_value= 1 當X=0時,則Sgn_value= 0 當X<0時,則Sgn_value= -1 2017/3/9
8-3.7 Math.Round(X) 可依照指定所求出X的小數點位數並四捨五入 【語法】Round_value= Math.Round(X,n) ‘求X數值到小數點右邊保留n個位元數,並取四捨五入 【說明】 1. 當n省略時,如果X數值小數點右邊第一位是大於5時,則X數值的整數 部份會加1 2. 在程式語言中,X數值的四捨五入是指X>5,如果X=5, 則會被捨去。如下面的例子所示: 2017/3/9
2017/3/9
8-3.8 Math.Sqrt(X) 求X的平方根 2017/3/9
8-3.9 Rnd ( ) 亂數函數 【語法】Rnd_value=Rnd(X) ' 傳回一個小於1,大於等於0 的亂數值。 【說明】 1. Rnd(x)亂數的值是:0<=X<1 2.在使用Rnd亂數函數之前,表單中先呼叫Randomize(初始化的亂數產生 器)使作業系統的時,來產生不同的亂數。 2017/3/9
在呼叫 Rnd 函式之前,最好先使用Randomize 函式,這樣才可以取得 3. 必須要使用以下兩個步驟: (1)使用Randomize 函式: 在呼叫 Rnd 函式之前,最好先使用Randomize 函式,這樣才可以取得 真正的隨機亂數。Randomize 函式所接受的參數是產生亂數的種子值。 如果Randomize 函式後沒有參數的話,VB2010會以系統的時間作為參 數,這樣就可以產生真正的參數。 2017/3/9
(2)使用 Rnd 函式: Rnd 函式會產生一個大於或等於 0 但小於 1 的數值,即:0 <= Rnd < 1。如果我們要取得某一特定範圍的亂數時,我們可以套用以下的公式: 2017/3/9
2017/3/9
8-3.10 Int(X) 與 Fix (X) 求X的整數值 【語法1】Int_value=Int(X) ‘傳回X的整數部份 【語法2】Fix_value=Fix(X) ‘傳回X的整數部份 【說明】 1.Int(X)是取≦X的最大整數值 2. Fix(X)是取X的整數部份,直接刪除小數點部份 3. 當X是正數時,則Int(X)與Fix(X)的值是相同。 2017/3/9
2017/3/9
2017/3/9
8-3.11 Hex(X) 與 Oct(X) 求X的16進位及8進位數值 【語法1】Hex_value=Hex(X) ‘傳回X的16進位數值 【語法2】Oct_value=Oct(X) ‘傳回X的8進位數值 2017/3/9
2017/3/9
2017/3/9
2017/3/9
2017/3/9
2017/3/9
2017/3/9
8-4 日期函數 在我們利用程式來處理日期與時間性的資料時,如果能夠善加利用VB2010內建的日期函數時,則可以節省許多時間。例如欲設計一個網路預約上課系統時,而其開放時間只有星期一到五,其餘時間不開放。我們只要利用WeekDay( )函數就可以輕易取得某一天的日期。 2017/3/9
傳回使用者輸入的日期自動轉換成正確年月日 8-4.12 DateValue( ) 傳回西元/月/日的阿拉伯數字 函數名稱 功能說明 8-4.1 Year() , Month() ,Day() 傳回目前西元年,月份及日期的函數 8-4.2 Month() 傳回目前月份的函數 8-4.3 Day() 傳回目前日期的函數 8-4.4 MonthName() 傳回月份的名稱 8-4.5 WeekDay() 傳回星期幾 8-4.6 WeekDayName () 傳回星期幾的名稱 8-4.7 Now( )或Now 傳回目前日期與時間的函數 8-4.8 Hour( ) 傳回24小時制中的數值 8-4.9 Minute( ) 傳回時間中的分數值 8-4.10 Second( ) 傳回時間中的秒數值 8-4.11 DateSerial( ) 傳回使用者輸入的日期自動轉換成正確年月日 8-4.12 DateValue( ) 傳回西元/月/日的阿拉伯數字 8-4.13 TimeSerial( ) 傳回使用者輸入的時間轉換成正確的時間格式 8-4.14 TimeValue( ) 傳回時/分/秒的數字 8-4.15 DateAdd( ) 增加日期函數 2017/3/9
8-4.1 Year() , Month() ,Day() 傳回目前西元年,月份及日期的函數 2017/3/9
8-4.2 Month() 傳回目前月份的函數 2017/3/9
8-4.3 Day() 傳回目前日期的函數 2017/3/9
8-4.4 MonthName() 傳回月份的名稱 2017/3/9
8-4.5 WeekDay() 傳回星期幾 2017/3/9
8-4.6 WeekDayName () 傳回星期幾的名稱 2017/3/9
8-4.7 Now( )或Now 傳回目前日期與時間的函數 2017/3/9
8-4.8 Hour( ) 傳回24小時制中的數值 2017/3/9
8-4.9 Minute( ) 傳回時間中的分數值 2017/3/9
8-4.10 Second( ) 傳回時間中的秒數值 2017/3/9
8-4.11 DateSerial( ) 傳回使用者輸入 的日期自動轉換成正確年月日 2017/3/9
8-4.12 DateValue( ) 傳回西元/月/日的阿拉伯數字 2017/3/9
8-4.13 TimeSerial( ) 傳回使用者輸入 的時間轉換成正確的時間格式 2017/3/9
8-4.14 TimeValue( ) 傳回時/分/秒的數字 2017/3/9
8-4.15 DateDiff( ) 傳回相異兩個日期差函數 2017/3/9
2017/3/9
8-5 IS相關函數 1. IsNumber(變數):用來判定該變數是否為數值。 2. IsArray(變數):用來判定該變數是否為陣列。 3. IsDate(表示式):用來判定該表示式是否可以轉換成日期資料。 4. IsEmpty(變數):當一個Variant變數尚未被指定任何資料時,其值為 5. Empty,可以利用此函數來判斷該變數的值是否為Empty。 2017/3/9
2017/3/9