所謂文本函數,就是可以在公式中處理文字串的函數。例如,可以改變大小寫或確定文字串的長度;可以替換某些字元或者去除某些字元等。而日期和時間函數則可以在公式中分析和處理日期值和時間值。關於這兩類函數的列表參看附表,這裡僅對一些常用的函數做簡要介紹。
一、文本函數
(一)大小寫轉換
LOWER--將一個文字串中的所有大寫字母轉換為小寫字母。
UPPER--將文本轉換成大寫形式。
PROPER--將文字串的首字母及任何非字母字元之後的首字母轉換成大寫。將其餘的字母轉換成小寫。
這三種函數的基本文法形式均為 函數名(text)。樣本說明:
已有字串為:pLease ComE Here! 可以看到由於輸入的不規範,這句話大小寫亂用了。
通過以上三個函數可以將文本轉換顯示樣式,使得文本變得規範。參見圖1
Lower(pLease ComE Here!)= please come here!
upper(pLease ComE Here!)= PLEASE COME HERE!
proper(pLease ComE Here!)= Please Come Here!
圖1
(二)取出字串中的部分字元
| Excel函數應用回顧 |
● Excel函數應用之邏輯函數
● Excel函數應用之數學和三角函數
● Excel函數應用之函數簡介
|
您可以使用Mid、Left、Right等函數從長字串內擷取一部分字元。具體文法格式為
LEFT函數:LEFT(text,num_chars)其中Text是包含要提取字元的文本串。Num_chars指定要由 LEFT 所提取的字元數。
MID函數:MID(text,start_num,num_chars)其中Text是包含要提取字元的文本串。Start_num是文本中要提取的第一個字元的位置。
RIGHT函數:RIGHT(text,num_chars)其中Text是包含要提取字元的文本串。Num_chars指定希望 RIGHT 提取的字元數。
比如,從字串"This is an apple."分別取出字元"This"、"apple"、"is"的具體函數寫法為。
LEFT("This is an apple",4)=This
RIGHT("This is an apple",5)=apple
MID("This is an apple",6,2)=is
圖2
(三)去除字串的空白
在字串形態中,空白也是一個有效字元,但是如果字串中出現空白字元時,容易在判斷或對比資料是發生錯誤,在Excel中您可以使用Trim函數清除字串中的空白。
文法形式為:TRIM(text)其中Text為需要清除其中空格的文本。
需要注意的是,Trim函數不會清除單詞之間的單個空格,如果連這部分空格都需清除的話,建議使用替換功能。比如,從字串"My name is Mary"中清除空格的函數寫法為:TRIM("My name is Mary")=My name is Mary 參見圖3
圖3
(四)字串的比較
在資料表中經常會比對不同的字串,此時您可以使用EXACT函數來比較兩個字串是否相同。該函數測試兩個字串是否完全相同。如果它們完全相同,則返回 TRUE;否則,返回 FALSE。函數 EXACT 能區分大小寫,但忽略格式上的差異。利用函數 EXACT 可以測試輸入文檔內的文字。文法形式為:EXACT(text1,text2)Text1為待比較的第一個字串。Text2為待比較的第二個字串。舉例說明:參見圖4
EXACT("China","china")=False
圖4
二、日期與時間函數
在資料表的處理過程中,日期與時間的函數是相當重要的處理依據。而Excel在這方面也提供了相當豐富的函數供大家使用。
(一)取出當前系統時間/日期資訊
用於取出當前系統時間/日期資訊的函數主要有NOW、TODAY。
文法形式均為 函數名()。
(二)取得日期/時間的部分欄位值
如果需要單獨的年份、月份、日數或小時的資料時,可以使用HOUR、DAY、MONTH、YEAR函數直接從日期/時間中取出需要的資料。具體樣本參看圖5。
比如,需要返回2001-5-30 12:30 PM的年份、月份、日數及小時數,可以分別採用相應函數實現。
YEAR(E5)=2001
MONTH(E5)=5
DAY(E5)=30
HOUR(E5)=12
圖5
此外還有更多有用的日期/時間函數,可以查閱附表。下面我們將以一個具體的樣本來說明Excel的文本函數與日期函數的用途。
三、樣本:做一個美觀簡潔的人事資料分析表
1、 樣本說明
在6所示的某公司人事資料表中,除了編號、員工姓名、社會安全號碼碼以及參加工作時間為手工添入外,其餘各項均為用Function Compute所得。
圖6
在此例中我們將詳細說明如何通過函數求出:
(1)自動從社會安全號碼碼中提取出生年月、性別資訊。
(2)自動從參加工作時間中提取工齡資訊。
2、社會安全號碼碼相關知識
在瞭解如何?自動從社會安全號碼碼中提取出生年月、性別資訊之前,首先需要瞭解社會安全號碼碼所代表的含義。我們知道,當今的社會安全號碼碼有15/18位之分。早期簽發的社會安全號碼碼是15位的,現在簽發的身份證由於年份的擴充(由兩位變為四位)和末尾加了效驗碼,就成了18位。這兩種社會安全號碼碼將在相當長的一段時期內共存。兩種社會安全號碼碼的含義如下:
(1)15位的社會安全號碼碼:1~6位為地區代碼,7~8位為出生年份(2位),9~10位為出生月份,11~12位為出生日期,第13~15位為順序號,並能夠判斷性別,奇數為男,偶數為女。
(2)18位的社會安全號碼碼:1~6位為地區代碼,7~10位為出生年份(4位),11~12位為出生月份,13~14位為出生日期,第15~17位為順序號,並能夠判斷性別,奇數為男,偶數為女。18位為效驗位。
3、 應用函數
在此例中為了實現資料的自動提取,應用了如下幾個Excel函數。
(1)IF函數:根據邏輯運算式測試的結果,返回相應的值。IF函數允許嵌套。
文法形式為:IF(logical_test, value_if_true,value_if_false)
(2)CONCATENATE:將若干個文字項合并至一個文字項中。
文法形式為:CONCATENATE(text1,text2……)
(3)MID:從文本字串中指定的起始位置起,返回指定長度的字元。
文法形式為:MID(text,start_num,num_chars)
(4)TODAY:返回電腦系統內部的當前日期。
文法形式為:TODAY()
(5)DATEDIF:計算兩個日期之間的天數、月數或年數。
文法形式為:DATEDIF(start_date,end_date,unit)
(6)VALUE:將代表數位文字串轉換成數字。
文法形式為:VALUE(text)
(7)RIGHT:根據所指定的字元數返迴文本串中最後一個或多個字元。
文法形式為:RIGHT(text,num_chars)
(8)INT:返回實數舍入後的整數值。文法形式為:INT(number)
4、 公式寫法及解釋(以員工Andy為例說明)
說明:為避免公式中過多的嵌套,這裡的社會安全號碼碼限定為15位的。如果您看懂了公式的話,可以進行簡單的修改即可適用於18位的社會安全號碼碼,甚至可適用於15、18兩者並存的情況。
(1)根據社會安全號碼碼求性別
=IF(VALUE(RIGHT(E4,3))/2=INT(VALUE(RIGHT(E4,3))/2),"女","男")
公式解釋:a. RIGHT(E4,3)用於求出社會安全號碼碼中代表性別的數字,實際求得的為代表數位字串
b. VALUE(RIGHT(E4,3)用於將上一步所得的代表數位字串轉換為數字
c. VALUE(RIGHT(E4,3))/2=INT(VALUE(RIGHT(E4,3))/2用於判斷這個社會安全號碼碼是奇數還是偶數,當然你也可以用Mod函數來做出判斷。
d. =IF(VALUE(RIGHT(E4,3))/2=INT(VALUE(RIGHT(E4,3))/2),"女","男")及如果上述公式判斷出這個號碼是偶數時,顯示"女",否則,這個號碼是奇數的話,則返回"男"。
(2)根據社會安全號碼碼求出生日期
=CONCATENATE("19",MID(E4,7,2),"/",MID(E4,9,2),"/",MID(E4,11,2))
公式解釋:a. MID(E4,7,2)為在社會安全號碼碼中擷取表示年份的數位字串
b. MID(E4,9,2) 為在社會安全號碼碼中擷取表示月份的數位字串
c. MID(E4,11,2) 為在社會安全號碼碼中擷取表示日期的數位字串
d. CONCATENATE("19",MID(E4,7,2),"/",MID(E4,9,2),"/",MID(E4,11,2))目的就是將多個字串合并在一起顯示。
(3)根據參加工作時間求年資(即工齡)
=CONCATENATE(DATEDIF(F4,TODAY(),"y"),"年",DATEDIF(F4,TODAY(),"ym"),"個月")
公式解釋:
a. TODAY()用於求出系統當前的時間
b. DATEDIF(F4,TODAY(),"y")用於計算當前系統時間與參加工作時間相差的年份
c. DATEDIF(F4,TODAY(),"ym")用於計算當前系統時間與參加工作時間相差的月份,忽略日期中的日和年。
d. =CONCATENATE(DATEDIF(F4,TODAY(),"y"),"年",DATEDIF(F4,TODAY(),"ym"),"個月")目的就是將多個字串合并在一起顯示。
5. 其他說明
在這張人事資料表中我們還發現,建立日期:31-05-2001時顯示在同一個儲存格中的。這是如何?的呢?難道是手工添加的嗎?不是,實際上這個日期還是變化的,它顯示的是系統目前時間。這裡是利用函數 TODAY 和函數 TEXT 一起來建立一條資訊,該資訊包含著當前日期並將日期以"dd-mm-yyyy"的格式表示。
具體公式寫法為:="建立日期:"&TEXT(TODAY(),"dd-mm-yyyy")
至此,我們對於文本函數、日期與時間函數已經有了大致的瞭解,同時也設想了一些應用領域。相信隨著大家在這方面的不斷研究,會有更廣泛的應用。
附一:文本函數
| 函數名 |
函數說明 |
文法 |
| ASC |
將字串中的全形(雙位元組)英文字母更改為半形(單位元組)字元。 |
ASC(text) |
| CHAR |
返回對應於數字代碼的字元,函數 CHAR 可將其他類型電腦檔案中的代碼轉換為字元。 |
CHAR(number) |
| CLEAN |
刪除文本中不能列印的字元。對從其他應用程式中輸入的字串使用 CLEAN 函數,將刪除其中含有的當前作業系統無法列印的字元。例如,可以刪除通常出現在資料檔案頭部或尾部、無法列印的低級電腦代碼。 |
CLEAN(text) |
| CODE |
返迴文字串中第一個字元的數字代碼。返回的代碼對應於電腦當前使用的字元集。 |
CODE(text) |
| CONCATENATE |
將若干文字串合并到一個文字串中。 |
CONCATENATE (text1,text2,...) |
| DOLLAR |
依照貨幣格式將小數四捨五入到指定的位元並轉換成文字。 |
DOLLAR 或 RMB(number,decimals) |
| EXACT |
該函數測試兩個字串是否完全相同。如果它們完全相同,則返回 TRUE;否則,返回 FALSE。函數 EXACT 能區分大小寫,但忽略格式上的差異。利用函數 EXACT 可以測試輸入文檔內的文字。 |
EXACT(text1,text2) |
| FIND |
FIND 用於尋找其他文本串 (within_text) 內的文本串 (find_text),並從 within_text 的首字元開始返回 find_text 的起始位置編號。 |
FIND(find_text,within_text,start_num) |
| FIXED |
按指定的小數位元進行四捨五入,利用句點和逗號,以小數格式對該數設定格式,並以文字串形式返回結果。 |
FIXED(number,decimals,no_commas) |
| JIS |
將字串中的半形(單位元組)英文字母或片假名更改為全形(雙位元組)字元。 |
JIS(text) |
| LEFT |
LEFT 基於所指定的字元數返迴文本串中的第一個或前幾個字元。
LEFTB 基於所指定的位元組數返迴文本串中的第一個或前幾個字元。此函數用於雙位元組字元。 |
LEFT(text,num_chars)
LEFTB(text,num_bytes) |
| LEN |
LEN 返迴文本串中的字元數。
LENB 返迴文本串中用於代表字元的位元組數。此函數用於雙位元組字元。 |
LEN(text)
LENB(text) |
| LOWER |
將一個文字串中的所有大寫字母轉換為小寫字母。 |
LOWER(text) |
| MID |
MID 返迴文本串中從指定位置開始的特定數目的字元,該數目由使用者指定。
MIDB 返迴文本串中從指定位置開始的特定數目的字元,該數目由使用者指定。此函數用於雙位元組字元。 |
MID(text,start_num,num_chars)
MIDB(text,start_num,num_bytes) |
| PHONETIC |
提取文本串中的拼音 (furigana) 字元。 |
PHONETIC(reference) |
| PROPER |
將文字串的首字母及任何非字母字元之後的首字母轉換成大寫。將其餘的字母轉換成小寫。 |
PROPER(text) |
| REPLACE |
REPLACE 使用其他文本串並根據所指定的字元數替換某文本串中的部分文本。
REPLACEB 使用其他文本串並根據所指定的字元數替換某文本串中的部分文本。此函數專為雙位元組字元使用。 |
REPLACE(old_text,start_num,num_chars,new_text)
REPLACEB(old_text,start_num,num_bytes,new_text) |
| REPT |
按照給定的次數重複顯示文本。可以通過函數 REPT 來不斷地重複顯示某一文字串,對儲存格進行填充。 |
REPT(text,number_times) |
| RIGHT |
RIGHT 根據所指定的字元數返迴文本串中最後一個或多個字元。
RIGHTB 根據所指定的字元數返迴文本串中最後一個或多個字元。此函數用於雙位元組字元。 |
RIGHT(text,num_chars)
RIGHTB(text,num_bytes) |
| SEARCH |
SEARCH 返回從 start_num 開始首次找到特定字元或文本串的位置上特定字元的編號。使用 SEARCH 可確定字元或文本串在其他文本串中的位置,這樣就可使用 MID 或 REPLACE 函數更改文本。
SEARCHB 也可在其他文本串 (within_text) 中尋找文本串 (find_text),並返回 find_text 的起始位置編號。此結果是基於每個字元所使用的位元組數,並從 start_num 開始的。此函數用於雙位元組字元。此外,也可使用 FINDB 在其他文本串中尋找文本串。 |
SEARCH(find_text,within_text,start_num)
SEARCHB(find_text,within_text,start_num) |
| SUBSTITUTE |
在文字串中用 new_text 替代 old_text。如果需要在某一文字串中替換指定的文本,請使用函數 SUBSTITUTE;如果需要在某一文字串中替換指定位置處的任意文本,請使用函數 REPLACE。 |
SUBSTITUTE(text,old_text,new_text,instance_num) |
| T |
將數值轉換成文本。 |
T(value) |
| TEXT |
將一數值轉換為按指定數字格式表示的文本。 |
TEXT(value,format_text) |
| TRIM |
除了單詞之間的單個空格外,清除文本中所有的空格。在從其他應用程式中擷取帶有不規則空格的文本時,可以使用函數 TRIM。 |
TRIM(text) |
| UPPER |
將文本轉換成大寫形式。 |
UPPER(text) |
| VALUE |
將代表數位文字串轉換成數字。 |
VALUE(text) |
| WIDECHAR |
將單位元組字元轉換為雙位元組字元。 |
WIDECHAR(text) |
| YEN |
使用 ¥(日圓)貨幣格式將數字轉換成文本,並對指定位置後的數字四捨五入。 |
YEN(number,decimals) |
附二、日期與時間函數
| 函數名 |
函數說明 |
文法 |
| DATE |
返回代表特定日期的系列數。 |
DATE(year,month,day) |
| DATEDIF |
計算兩個日期之間的天數、月數或年數。 |
DATEDIF(start_date,end_date,unit) |
| DATEVALUE |
函數 DATEVALUE 的主要功能是將以文字表示的日期轉換成一個系列數。 |
DATEVALUE(date_text) |
| DAY |
返回以系列數表示的某日期的天數,用整數 1 到 31 表示。 |
DAY(serial_number) |
| DAYS360 |
按照一年 360 天的演算法(每個月以 30 天計,一年共計 12 個月),返回兩日期間相差的天數。 |
DAYS360(start_date,end_date,method) |
| EDATE |
返回指定日期 (start_date) 之前或之後指定月份數的日期系列數。使用函數 EDATE 可以計算與發行日處於一月中同一天的到期日的日期。 |
EDATE(start_date,months) |
| EOMONTH |
返回 start-date 之前或之後指定月份中最後一天的系列數。用函數 EOMONTH 可計算特定月份中最後一天的時間系列數,用於證券的到期日等計算。 |
EOMONTH(start_date,months) |
| HOUR |
返回時間值的小時數。即一個介於 0 (12:00 A.M.) 到 23 (11:00 P.M.) 之間的整數。 |
HOUR(serial_number) |
| MINUTE |
返回時間值中的分鐘。即一個介於 0 到 59 之間的整數。 |
MINUTE(serial_number) |
| MONTH |
返回以系列數表示的日期中的月份。月份是介於 1(一月)和 12(十二月)之間的整數。 |
MONTH(serial_number) |
| NETWORKDAYS |
返回參數 start-data 和 end-data 之間完整的工作日數值。工作日不包括周末和專門指定的假期 |
NETWORKDAYS(start_date,end_date,holidays) |
| NOW |
返回當前日期和時間所對應的系列數。 |
NOW( ) |
| SECOND |
返回時間值的秒數。返回的秒數為 0 至 59 之間的整數。 |
SECOND(serial_number) |
| TIME |
返回某一特定時間的小數值,函數 TIME 返回的小數值為從 0 到 0.99999999 之間的數值,代表從 0:00:00 (12:00:00 A.M) 到 23:59:59 (11:59:59 P.M) 之間的時間。 |
TIME(hour,minute,second) |
| TIMEVALUE |
返回由文本串所代表的時間的小數值。該小數值為從 0 到 0.999999999 的數值,代表從 0:00:00 (12:00:00 AM) 到 23:59:59 (11:59:59 PM) 之間的時間。 |
TIMEVALUE(time_text) |
| TODAY |
返回當前日期的系列數,系列數是 Microsoft Excel 用於日期和時間計算的日期-時間代碼。 |
TODAY( ) |
| WEEKDAY |
返回某日期為星期幾。預設情況下,其值為 1(星期天)到 7(星期六)之間的整數。 |
WEEKDAY(serial_number,return_type) |
| WEEKNUM |
返回一個數字,該數字代表一年中的第幾周。 |
WEEKNUM(serial_num,return_type) |
| WORKDAY |
返回某日期(起始日期)之前或之後相隔指定工作日的某一日期的日期值。工作日不包括周末和專門指定的假日。 |
WORKDAY(start_date,days,holidays) |
| YEAR |
返回某日期的年份。傳回值為 1900 到 9999 之間的整數。 |
YEAR(serial_number) |
| YEARFRAC |
返回 start_date 和 end_date 之間的天數佔全年天數的百分比。 |
YEARFRAC(start_date,end_date,basis) |