談曉曉 上海鐵路局科研所
運用VBA對超偏載檢測裝置期間核查數(shù)據(jù)的處理
談曉曉 上海鐵路局科研所
介紹運用 Microsoft Excel 2007(以下簡稱:Excel)中的Visual Basic for Application(以下簡稱:VBA)功能,編寫一段自動處理數(shù)據(jù)的程序代碼。該程序可根據(jù)輸入的列車過衡數(shù)據(jù),自動計算誤差、判斷是否超差和統(tǒng)計合格數(shù)量等,能夠提高超偏載檢測裝置(以下簡稱:超偏載)期間核查數(shù)據(jù)處理效率,從而減輕工作負(fù)擔(dān)。
VBA;程序代碼;自動處理數(shù)據(jù)
根據(jù)JJF(鐵道)606-2011《鐵道貨車超偏載檢測裝置期間核查規(guī)范》(以下簡稱:期間核查規(guī)范)的要求,為確認(rèn)超偏載示值誤差是否滿足要求,在兩次周期檢定之間,須對超偏載進(jìn)行不少于1次的期間核查。
本部門利用現(xiàn)有檢定資源——檢衡車標(biāo)準(zhǔn)裝置(以下簡稱:檢衡車)在超偏載上通過時產(chǎn)生過衡數(shù)據(jù),每月遠(yuǎn)程對其進(jìn)行收集處理,來完成對超偏載設(shè)備稱量性能的期間核查(在現(xiàn)有檢定資源的限制下無法完成對偏載和偏重的期間核查)。超偏載期間核查數(shù)據(jù)最大允許誤差的要求見表1,以遠(yuǎn)程核查最大允許誤差為準(zhǔn)。
表1 超載測試總重最大允許誤差
使用鐵科院電子所制作的《鐵路貨運計量安全檢測監(jiān)控系統(tǒng)》(以下簡稱:監(jiān)控系統(tǒng)),可以通過追蹤檢衡車車號獲得其過衡數(shù)據(jù),然后利用Excel將數(shù)據(jù)與標(biāo)準(zhǔn)值進(jìn)行比較,來判斷超偏載設(shè)備是否處于良好的工作狀態(tài)。(需要特別指出的是,監(jiān)控系統(tǒng)自帶期間核查功能,但由于標(biāo)準(zhǔn)器的質(zhì)量發(fā)生變化后,監(jiān)控系統(tǒng)只保留最新的標(biāo)準(zhǔn)值,因此對標(biāo)準(zhǔn)值變化前的過衡數(shù)據(jù)進(jìn)行的誤差計算全都是錯誤和無效的,故不推薦使用。)
可以設(shè)想一下整個比較過程,首先將過衡數(shù)據(jù)復(fù)制到Excel中,然后找出相應(yīng)檢衡車車號處于有效期內(nèi)的標(biāo)準(zhǔn)值,將標(biāo)準(zhǔn)值與過衡數(shù)據(jù)中的總重進(jìn)行比較,計算出誤差,最后判斷是否超差,并注明。如果這些工作全部通過手動處理,不僅耗時耗力,還十分容易出錯。因此我們可以借助Excel中的VBA功能來完成自動計算誤差、判斷是否超差和統(tǒng)計合格數(shù)量等工作,從而提高超偏載期間核查數(shù)據(jù)處理效率,減輕工作負(fù)擔(dān)。
由于Excel在默認(rèn)使用狀態(tài)下,其自帶的VBA功能是關(guān)閉的,所以首先需要做的就是開放VBA功能。打開方式是:點擊Excel軟件界面的左上角 圖標(biāo),點擊“Excel選項”,在“常用”選項欄中勾選“在功能區(qū)顯示‘開發(fā)工具’選項卡”,點擊確認(rèn)。這樣,在功能區(qū)就會出現(xiàn)“開發(fā)工具”標(biāo)簽。利用其中的Visual Basic(for Application)編寫代碼,可以對Excel中的單元格數(shù)據(jù)進(jìn)行操作、計算和統(tǒng)計。
3.1 填寫相關(guān)數(shù)據(jù)
首先將需要進(jìn)行計算處理的數(shù)據(jù)從監(jiān)控系統(tǒng)復(fù)制到Excel中,在此不妨將工作表名稱改成“期間核查數(shù)據(jù)”。由于監(jiān)控系統(tǒng)中的原始過衡數(shù)據(jù)包含許多不必要的字段,因此本文只選取其中幾項必要的字段進(jìn)行敘述(見表2,其中最后四項字段是需要通過編寫VBA程序代碼自動處理填寫的)。
由于檢衡車的標(biāo)準(zhǔn)值會發(fā)生改變,故再新建一個“標(biāo)準(zhǔn)值”工作表,用來記錄不同檢衡車在不同有效期內(nèi)的標(biāo)準(zhǔn)值(見表3)。
表2 過衡數(shù)據(jù)
表3 標(biāo)準(zhǔn)值字段
3.2 制作代碼觸發(fā)按鈕
編寫的代碼可以設(shè)置成通過點擊某一文檔元件來觸發(fā)。在這里我們繪制一個“矩形”來觸發(fā)代碼,然后右鍵單擊繪制的矩形,點擊“指定宏”,點擊“新建”,這樣就進(jìn)入了代碼編寫界面,可以看到系統(tǒng)自動為我們寫好了如下兩句代碼。
Sub矩形1_Click()
End Sub
而我們編寫的所有代碼均須寫在上面給兩行代碼之間。這樣,通過點擊矩形,就能執(zhí)行編寫的代碼。
為了分別實現(xiàn)數(shù)據(jù)分析和數(shù)據(jù)統(tǒng)計功能,不妨將上述矩形單獨作為數(shù)據(jù)處理的觸發(fā)按鈕,而另外繪制一個矩形,單獨作為數(shù)據(jù)統(tǒng)計的觸發(fā)按鈕。
4.1 數(shù)據(jù)處理代碼編寫思路
利用循環(huán)語句,對每一條過衡數(shù)據(jù)進(jìn)行:
(1)尋找填寫標(biāo)準(zhǔn)值;
(2)計算誤差;
(3)判斷是否超差等工作。
4.1.1 標(biāo)準(zhǔn)值的填寫
根據(jù)表2中不同檢衡車的“通過時間”以及“車號”信息,在“標(biāo)準(zhǔn)值”工作表中尋找對應(yīng)的、在有效期內(nèi)的標(biāo)準(zhǔn)值,并賦值到相應(yīng)單元格內(nèi)。
4.1.2 誤差計算
根據(jù)總重和標(biāo)準(zhǔn)值,分別計算出絕對誤差和相對誤差。
4.1.3 數(shù)據(jù)判斷
根據(jù)過衡速度和誤差,以及表1的規(guī)定最大允許誤差,判斷是否超差或者過車速度不符合要求。
4.2 數(shù)據(jù)統(tǒng)計代碼編寫思路
利用循環(huán)語句,分別統(tǒng)計過車總條數(shù)和無效數(shù)(過車速度不符合要求以及超出標(biāo)準(zhǔn)器有效期),計算兩者之差即為有效數(shù);然后根據(jù)誤差大小,判斷統(tǒng)計超差數(shù);將有效數(shù)減去超差數(shù),即為合格數(shù);計算出合格率=(合格數(shù)/有效數(shù))*100%,最后用Msgbox將統(tǒng)計結(jié)果顯示出來。
5.1 數(shù)據(jù)處理源代碼
5.2 數(shù)據(jù)統(tǒng)計源代碼
圖1為數(shù)據(jù)處理結(jié)果,圖2為數(shù)據(jù)統(tǒng)計結(jié)果。
圖1 數(shù)據(jù)處理結(jié)果
圖2 數(shù)據(jù)統(tǒng)計結(jié)果
VBA功能可以在各種數(shù)據(jù)統(tǒng)計中得到廣泛地應(yīng)用。它不僅能夠提高工作效率,降低勞動強度,同時也可以減少人為因素造成的各種錯誤。因此,在實際工作中值得推廣使用。
責(zé)任編輯:許耀元
來稿日期:2016-09-01