潘偉珍 張 譽(yù) 盧 彤
教育部全國(guó)學(xué)生體質(zhì)健康標(biāo)準(zhǔn)數(shù)據(jù)管理中心研發(fā)了一套體質(zhì)健康管理系統(tǒng),在全國(guó)已普遍采用。這套管理系統(tǒng)采用了使用較廣泛的Excel進(jìn)行數(shù)據(jù)導(dǎo)入與導(dǎo)出,這樣提高數(shù)據(jù)的重用率和與其他軟件的兼容性,為學(xué)生體質(zhì)健康、體育達(dá)標(biāo)評(píng)分工作提供了非常大的便利,避免了手工查詢數(shù)據(jù)進(jìn)行評(píng)分與登記的繁勞與人為出錯(cuò)的可能。同時(shí),全國(guó)各地?cái)?shù)據(jù)統(tǒng)一匯報(bào)到中國(guó)學(xué)生體質(zhì)健康網(wǎng)后,又為各部門了解掌握與分析全國(guó)或部分地區(qū)的學(xué)生體質(zhì)健康與
體育達(dá)標(biāo)情況提供了依據(jù)與便利。作為在教育第一線的體育教師,更是直接的受益者。
在使用該統(tǒng)計(jì)表過程中,筆者發(fā)現(xiàn)這套管理系統(tǒng)美中不足的是它評(píng)分、劃等級(jí)、生成Excel文檔后并沒有直接進(jìn)行數(shù)據(jù)統(tǒng)計(jì),需上傳到中國(guó)學(xué)生體質(zhì)健康網(wǎng)上后,過兩天才能到網(wǎng)上查各種統(tǒng)計(jì)成績(jī)。這樣教師就不能及時(shí)地了解學(xué)生成績(jī)情況。同時(shí),網(wǎng)上的統(tǒng)計(jì)是分項(xiàng)的,一次只能生成一項(xiàng)的數(shù)據(jù),使用起來不是很方便。能不能自己進(jìn)行統(tǒng)計(jì)呢?當(dāng)然,應(yīng)該說由Excel文檔再進(jìn)行統(tǒng)計(jì)也不是難事,可偏偏此Excel文檔每個(gè)單元格格式為“文本”,這樣的格式中,數(shù)字作為文本處理,是不能進(jìn)行運(yùn)算的,這樣平均分如何求得?改為“常規(guī)”后仍不能進(jìn)行計(jì)算。左調(diào)右試,原來是改格式后,需激活方才有效。如何激活?需雙擊此單元格。(原表及統(tǒng)計(jì)表如http://flybase.51.net/體質(zhì)健康統(tǒng)計(jì)示例.rar)這么多的數(shù)據(jù),一個(gè)一個(gè)點(diǎn)是不是太機(jī)械,同時(shí)也不可能?何況,上級(jí)部門所需要的統(tǒng)計(jì)表復(fù)雜到分年級(jí)、分性別計(jì)算,再小計(jì),全校再合計(jì),如表1所示。

如何進(jìn)行統(tǒng)計(jì),得出上表的數(shù)據(jù)呢?體育達(dá)標(biāo)工作轉(zhuǎn)眼在春夏之交又將進(jìn)行了,這項(xiàng)統(tǒng)計(jì)工作又將落在教師的身上,如何才能取得事半功倍甚至一勞永逸的效果呢?筆者經(jīng)過摸索,尋找到以下幾種解決方案與途徑,因其具有廣泛的適用性與參考意義,特拋出與大家共勉。
方案一 克服激活問題,進(jìn)行統(tǒng)計(jì)
方法1:重新拷貝與選擇性粘貼將需統(tǒng)計(jì)的表單全部拷貝,并新建一表,進(jìn)行選擇性粘貼。在選擇性粘貼的對(duì)話框中選擇運(yùn)算為“加”,這樣處理后的數(shù)據(jù)將可以進(jìn)行計(jì)算。但非常可惜的是,除數(shù)字外,其余文字均不見了,對(duì)需要的文字應(yīng)再選中其列,進(jìn)行復(fù)制。顯而易見,這絕非良策。
方法2:更改格式,再導(dǎo)入將表單另存為文本文件(在“另存為”對(duì)話框中選保存類型為“文本文件 *.txt”),再將數(shù)據(jù)導(dǎo)入(在菜單“數(shù)據(jù)/獲取外部數(shù)據(jù)/導(dǎo)入文本文件”中按向?qū)?duì)話框提示點(diǎn)擊“下一步”、“下一步”、“完成”即可)。
方法3:用VBA宏的方法激活進(jìn)入菜單“工具/宏/Visual Basic編輯器”編寫如下宏:
Sub 改格式并激活的宏()
Cells.Select
Selection.NumberFormatLocal = "G/通用格式"′改格式為常用
ActiveCell.SpecialCells(xlLastCell).Select′找到最后一格
MaxRow = ActiveCell.Row ′最大行
MaxCol = ActiveCell.Column′最大列
For i = 1 To MaxCol
CharOfCol = Chr(Asc("A") + (i - 1) Mod 26) ′列的字母
If i > 26 Then CharOfCol = Chr(Asc("A") + i 26 - 1) & CharOfCol
For j = 1 To MaxRow
Range(CharOfCol & j).Select
ActiveCell.FormulaR1C1 = ActiveCell.Text ′激活單元格
Next j,i
End Sub
以上這些方法均達(dá)到更改單元格格式,使之能進(jìn)行計(jì)算的效果,還要多次進(jìn)行排序、篩選、匯總、計(jì)數(shù)、用函數(shù)計(jì)算等操作。但由于本次統(tǒng)計(jì)數(shù)據(jù)復(fù)雜,運(yùn)用這些方法仍需要做大量的工作,因此不能算是理想的方案。
方案二 運(yùn)用VBA編寫宏,直接得出統(tǒng)計(jì)數(shù)據(jù)
Excel提供了宏,可以方便地進(jìn)行VBA程序編寫,用機(jī)器進(jìn)行計(jì)算和判斷的速度與準(zhǔn)確性是人腦所不能比擬的。根據(jù)原始表中“年級(jí)編號(hào)”在A列,分別在年級(jí)前加了個(gè)“1”,“性別”在G列,用“1”和“2”表示男女,“總分”在AG列,“等級(jí)”在AH列的特點(diǎn),結(jié)合統(tǒng)計(jì)表所需數(shù)據(jù),本人編寫了VBA宏。您可以將之拷貝下來,放入宏中運(yùn)行即可得出所需各項(xiàng)數(shù)據(jù)。為使之對(duì)大家有參考與借鑒意義,方便大家在另外工作中需要時(shí)進(jìn)行修改,加入了較多注釋。(由于篇幅原因,這里講一下關(guān)鍵代碼,完整示例在我的個(gè)人網(wǎng)站中,點(diǎn)擊http://flybase.51.net/體質(zhì)健康統(tǒng)計(jì)示例.rar可進(jìn)行下載)主要步驟如下。
定義標(biāo)題、各種計(jì)數(shù)數(shù)組、數(shù)組始化關(guān)鍵代碼如下:
Title() = Array("學(xué)生人數(shù)", "平均分?jǐn)?shù)", "達(dá)標(biāo)人數(shù)", "達(dá)標(biāo)率", "優(yōu)秀", "優(yōu)秀率", "良好", "良好率", "及格", "及格率", "不及格", "不及格率")/數(shù)組,存標(biāo)題欄字串/
Dim a(7, 3, 12) As Single′6個(gè)年級(jí)加合計(jì)、3行(1男 2女 3小計(jì))、12種數(shù)據(jù)同Title
……
由有數(shù)據(jù)的行得出全校人數(shù)及確定所需處理數(shù)據(jù)范圍運(yùn)用上面改格式并激活的宏的方法,找到最后一格、最后一個(gè)記錄再減掉最后的空行得到范圍及全校人數(shù)。
分年級(jí)、分男女生進(jìn)行統(tǒng)計(jì)各項(xiàng)數(shù)據(jù)從第二行到最大行進(jìn)行循環(huán),運(yùn)用Range("A" & i).Text, 1)得到年級(jí);用Sex = Range("G" & i).Value得到性別;再分年級(jí)、性別、成績(jī)級(jí)別進(jìn)行累加,存入相應(yīng)數(shù)組。
由各年級(jí)男女?dāng)?shù)相加得各年級(jí)小計(jì)數(shù),再將各年級(jí)相加得全校總計(jì)數(shù),再分別計(jì)算各項(xiàng)分率,存入相應(yīng)數(shù)組中,關(guān)鍵代碼如下:
For Grade = 1 To 7 :For Sex = 1 To 3/算各項(xiàng)分率/
a(Grade, Sex, 3) = a(Grade, Sex, 1) - a(Grade, Sex, 11) /合格數(shù)/
a(Grade, Sex, 2) = a(Grade, Sex, 2) / a(Grade, Sex, 1) /平均分/
For k = 4 To 12 Step 2 /算其余項(xiàng)分率/
a(Grade, Sex, k) = a(Grade, Sex, k - 1) / a(Grade, Sex, 1)
Next k, Sex, Grade
添加工作表,將統(tǒng)計(jì)數(shù)據(jù)寫入添加工作表的方法:Sheets.Add;取列的字母方法:CharOfCol= Chr(Asc("A") + i)。然后進(jìn)行循環(huán),將各數(shù)組數(shù)據(jù)寫到對(duì)應(yīng)的單元格。
運(yùn)行以上宏的方法,于是方便地得出了各項(xiàng)所需數(shù)據(jù),可說是達(dá)到了一勞永逸的效果。其實(shí),在Excel進(jìn)行數(shù)據(jù)統(tǒng)計(jì)中,一般會(huì)選擇排序、函數(shù)、自動(dòng)篩選、高級(jí)篩選、分類匯總等方法,但當(dāng)操作較復(fù)雜,這些方法也不太濟(jì)事時(shí),不妨考慮編寫VBA宏,使之更好地為教師服務(wù)。
(作者單位:湖南省長(zhǎng)沙縣黃興鎮(zhèn)中心學(xué)校)