摘 要:Excel通常被人們用來(lái)當(dāng)制作表格的工具使用,有時(shí)也被充當(dāng)各種數(shù)據(jù)轉(zhuǎn)換的中間媒介。本文通過(guò)實(shí)例向大家介紹了如何通過(guò)Excel內(nèi)置的Visual Basic及其功能強(qiáng)大的函數(shù)來(lái)完成其功能集中無(wú)法實(shí)現(xiàn)的功能,這對(duì)Excel來(lái)說(shuō)是個(gè)強(qiáng)有力的補(bǔ)充。
關(guān)鍵詞:Excel表;Visual Basic;ActiveX控件
中圖分類號(hào):TP391.13
眾所周知excel早已經(jīng)成為一款重要的辦公軟件,它可以進(jìn)行數(shù)據(jù)處理、統(tǒng)計(jì)分析已經(jīng)輔助決策的操作,該軟件已經(jīng)滲透到各個(gè)領(lǐng)域。在實(shí)際工作中,excel電子表格總是伴隨我們身邊的,各種報(bào)表、臺(tái)賬等。然而我們經(jīng)常用到的excel的功能也僅限于編輯、查找、篩選、圖表等常用的功能。雖說(shuō)excel提供了豐富的功能,但同時(shí)對(duì)多張電子表格的數(shù)據(jù)進(jìn)行比較,以及進(jìn)行特殊處理,卻仍無(wú)法實(shí)現(xiàn),又該如何去做呢?通常有的人會(huì)想到把excel中的數(shù)據(jù)轉(zhuǎn)換為其他格式的數(shù)據(jù),如.dbf格式,利用foxbase去處理,也有的會(huì)利用Aaccess來(lái)處理,采用諸如此類的方法。這種做法既費(fèi)時(shí)、費(fèi)力而且效率也不高。本人在實(shí)際工作中同樣遇到了這樣的問(wèn)題,通過(guò)利用Excel內(nèi)嵌的Microsoft Visual Basic來(lái)處理多張電子表格的數(shù)據(jù),無(wú)需對(duì)excel的數(shù)據(jù)進(jìn)行任何轉(zhuǎn)換,即可輕松完成各表格數(shù)據(jù)的分析、處理。
1 Excel內(nèi)嵌Visual Basic功能簡(jiǎn)介
通過(guò)Excel的快速訪問(wèn)工具欄添加設(shè)計(jì)模式、插入控件、VisualBasic代碼編輯器等相關(guān)功能到工具欄,便于快速進(jìn)入和退出設(shè)計(jì)模式和編輯代碼。
內(nèi)嵌的Visual Basic具有表單控件和ActiveX控件兩種。運(yùn)用表單控件可以根據(jù)需要設(shè)計(jì)出更美觀的用戶界面。本文結(jié)合實(shí)際的應(yīng)用著重介紹ActiveX控件,它能夠在Excel表單中插入所需的ActiveX控件,使用起來(lái)方便、快捷,可在Excel的sheet頁(yè)面中直接點(diǎn)擊執(zhí)行。
Visual Basic具有按鈕、組合框、復(fù)選框、列表框、標(biāo)簽等ActiveX控件,可滿足任何數(shù)據(jù)處理功能的需要。內(nèi)嵌的Visual Basic具有面向?qū)ο蟮奶攸c(diǎn),所有控件的各種屬性設(shè)置方便。
2 Excel數(shù)據(jù)處理技巧
Visual Basic提供了大量常用函數(shù),運(yùn)算函數(shù)、字符串函數(shù)、日期函數(shù)等。在此簡(jiǎn)單介紹幾個(gè)操作Excel單元格的相關(guān)命令:
獲取單元格的值、填寫單元格的值可以用Sheet1.Cells(m,i).value = \"地址重復(fù)\"來(lái)實(shí)現(xiàn);
改變某單元格字的顏色可用Sheet1.Cells(m,i).Font.ColorIndex = 7,改變此值就可改變字的顏色;
獲取Excel表的行數(shù)可用這個(gè)方法獲取Sheet1.UsedRange.Rows.Count;
通過(guò)字符串函數(shù)Mid()可以獲取Excel任意單元格內(nèi)的任何字符,Mid((Sheet1.Cells(i,j).Value),x,y);
特別需要注意的是在處理其他文件時(shí)往往一個(gè)漢字相當(dāng)于2個(gè)字節(jié),而在Excel表中一個(gè)漢字的字節(jié)數(shù)位1,這在計(jì)算字符串的長(zhǎng)度時(shí)尤為重要。而在對(duì)excel表中的數(shù)據(jù)進(jìn)行處理時(shí),往往會(huì)遇到如何判斷單元格的內(nèi)容是否為漢字或字符,可以運(yùn)用Asc()來(lái)對(duì)單元格中是否是漢字進(jìn)行判斷,如果Asc(Asc(Mid(Sheet2.Cells(2,5).Value,a,1)))的值小于0則表明為漢字,否則單元格的內(nèi)容不是漢字。
了解這些值的算法后就可以對(duì)excel的數(shù)據(jù)隨心所欲的處理了。
3 Excel數(shù)據(jù)處理實(shí)例
本實(shí)例是工作中需要對(duì)用戶數(shù)據(jù)表、標(biāo)準(zhǔn)地址表、Loid三個(gè)Excel表中的數(shù)據(jù)進(jìn)行處理,把用戶數(shù)據(jù)表中的地址進(jìn)行標(biāo)準(zhǔn)化,而后與標(biāo)準(zhǔn)地址表中的地址進(jìn)行比較,如果相同則把相應(yīng)用戶資料表中的聯(lián)系人、聯(lián)系方式等內(nèi)容拷貝到標(biāo)準(zhǔn)地址表中所對(duì)應(yīng)的列中,把用戶資料表中地址相同的用特殊的顏色表示出來(lái),最后比較標(biāo)準(zhǔn)地址表與Loid中的地址相比較,如果相同且標(biāo)準(zhǔn)地址表中聯(lián)系人列不為空,則在loid表中的某列標(biāo)記出“有”,至此數(shù)據(jù)的處理過(guò)程結(jié)束。
需要處理的數(shù)據(jù)表包括:用戶數(shù)據(jù)表、標(biāo)準(zhǔn)地址表、Loid表如下:
表1 用戶資料表(sheet1)
業(yè)務(wù)號(hào)碼聯(lián)系人聯(lián)系方式O側(cè)地址整理后標(biāo)準(zhǔn)地址修正后O側(cè)地址
225918597劉某138****7015北區(qū)西里11-1-10211-001-010211-1-102
225970303王娜159****5336北區(qū)西里11-1-20111-001-020111-1-201
225926408張春花136****8434北區(qū)西里11-1-202 11-001-020211-1-202
表2 標(biāo)準(zhǔn)地址表(sheet2)
業(yè)務(wù)號(hào)碼聯(lián)系人聯(lián)系方式標(biāo)準(zhǔn)地址
中心站區(qū)中心站北區(qū)西里11-001-0102
中心站區(qū)中心站北區(qū)西里11-001-0201
中心站區(qū)中心站北區(qū)西里11-001-0202
表3 Loid表(sheet3)
標(biāo)準(zhǔn)地址LOID
中心站區(qū)中心站北區(qū)西里11-001-0102000060830000000000041925
中心站區(qū)中心站北區(qū)西里11-001-0201000060830000000000041926
中心站區(qū)中心站北區(qū)西里11-001-0202000060830000000000041927
首先新建一個(gè)Excel文件,分別把用戶數(shù)據(jù)表、標(biāo)準(zhǔn)地址表、Loid表放入sheet1、sheet2、sheet3中,新建sheet4作為放置VisualBasic控件的表單,這樣使數(shù)據(jù)與控件分隔開(kāi)來(lái),便于對(duì)處理后的數(shù)據(jù)進(jìn)行核實(shí)、觀察與檢驗(yàn),點(diǎn)擊工具欄中的設(shè)計(jì)模式按鈕進(jìn)入設(shè)計(jì)模式,在sheet4中放置四個(gè)ActiveX命令按鈕控件,分別在屬性編輯器中將Caption的值修改為地址修正、地址匹配、匹配Loid、重復(fù)地址查找。同時(shí)在屬性編輯器中分別修改其位置參數(shù)。
分別點(diǎn)擊四個(gè)按鈕,在代碼編輯器中寫入各自的功能代碼。
第一步修正用戶資料表中的O測(cè)地址,把表單1(sheet1)O側(cè)地址列中的漢字去掉,只保留數(shù)字部分,可以通過(guò)ASC()來(lái)判斷漢字與數(shù)字的區(qū)別,并結(jié)合字符串Mid()函數(shù)達(dá)到去掉漢字的目的,然后寫入到修正后O側(cè)地址列中。
第二步對(duì)用戶地址進(jìn)行標(biāo)準(zhǔn)化,主要是完成對(duì)用戶資料表(sheet1)的修正后O側(cè)地址列的數(shù)據(jù)按標(biāo)準(zhǔn)地址表(sheet2)的標(biāo)準(zhǔn)地址列格式進(jìn)行標(biāo)準(zhǔn)化處理后,與表單2(sheet2)中的標(biāo)準(zhǔn)地址欄中的數(shù)據(jù)進(jìn)行比較,而后對(duì)結(jié)果相同的,則需把sheet1中的業(yè)務(wù)號(hào)碼、聯(lián)系人、聯(lián)系方式拷貝到sheet2對(duì)應(yīng)的列中,即完成數(shù)據(jù)的處理
第三步把Loid表(sheet3)與處理后的標(biāo)準(zhǔn)地址表(sheet2)中的地址列進(jìn)行比較,地址相同且sheet2中的聯(lián)系人列不為‘空’則表示這個(gè)地址是個(gè)有寬帶的用戶,則在Loid表中的某列填入‘有用戶’這個(gè)值。
第四步把用戶資料表(sheet1)中修正后O側(cè)地址中有重復(fù)的用特殊顏色標(biāo)記出來(lái)。
經(jīng)以上四步即可完成對(duì)這些數(shù)據(jù)的處理,達(dá)到生產(chǎn)中的最終要求。
4 結(jié)束語(yǔ)
通過(guò)在對(duì)實(shí)際工作中遇到的對(duì)Excel電子表中存放的生產(chǎn)數(shù)據(jù)的處理,意在拋磚引玉,即使無(wú)法通過(guò)Excel的便捷功能實(shí)現(xiàn)對(duì)數(shù)據(jù)的處理,仍可以輕松通過(guò)VisualBasic強(qiáng)大的功能實(shí)現(xiàn),勿需對(duì)Excel表中數(shù)據(jù)進(jìn)行轉(zhuǎn)換而尋求他法。
參考文獻(xiàn):
[1]何進(jìn)按.Excel中轉(zhuǎn)換大量文本數(shù)據(jù)和準(zhǔn)確計(jì)算年齡的方法[J].農(nóng)村電工,2009(07).
作者單位:天津大港油田信息中心,天津 300280