朱潔蘭
摘 要 介紹使用ExcelVBA工具進行編程,實現(xiàn)企事業(yè)單位黨委組織部黨員信息數(shù)據(jù)分析自動化的過程。設計程序的功能結(jié)構(gòu),包括年齡、入黨時間、學歷、職稱、入黨積極分子年齡結(jié)構(gòu)分析功能;給出程序的實現(xiàn)過程詳細介紹,從導入數(shù)據(jù)、清理數(shù)據(jù)到編碼的思路和實現(xiàn)方法。
關(guān)鍵詞 黨員信息統(tǒng)計;ExcelVBA;統(tǒng)計圖表
中圖分類號:TP391.13 文獻標識碼:B
文章編號:1671-489X(2015)14-0052-03
1 前言
在企事業(yè)單位黨委組織部每年都要進行固定的黨員信息統(tǒng)計的任務,統(tǒng)計的數(shù)據(jù)包括所有黨員的工資(用于計算黨費收繳比例)、學歷、職稱等各類人事履歷數(shù)據(jù)信息。對于這些數(shù)據(jù)需要按照年齡段、時間段、不同職稱等進行百分比統(tǒng)計。對于黨務管理人員來說,這些常規(guī)事務性工作每年都要重復,除了數(shù)據(jù)源不同外,其他的統(tǒng)計口徑基本固定。為了簡化這一工作,筆者在常用的Office辦公軟件Excel上進行VBA編程,實現(xiàn)黨統(tǒng)數(shù)據(jù)分析自動化。
2 程序功能結(jié)構(gòu)圖
ExcelVBA就是在Excel軟件中進行編程,編好的自動化功能可以在相應的Excel模板中使用。Office軟件都帶有VBA編程的功能,不需要單獨安裝編譯環(huán)境。
整個軟件結(jié)構(gòu)有五項自動化功能,每一個功能都是針對黨員信息中的某一個屬性進行分類計數(shù)統(tǒng)計的。
1)黨員年齡結(jié)構(gòu)分析:30歲及以下;31~35歲;36~40歲;41~45歲;46~50歲;51~55歲;56~60歲;61~65歲;66~70歲;71歲及以上。
2)黨員入黨時間結(jié)構(gòu)分析:1949年10月—1966年4月;1966年5月—1976年10月;1976年11月—1978年12月;1979年1月—2002年10月;2002年11月—2012年10月;2012年11月及以后。
3)黨員學歷結(jié)構(gòu)分析:研究生;大學本科;大學???;中專;高中、中技;初中及以下。
4)黨員職稱結(jié)構(gòu)分析:教授;副教授;講師;其他。
5)入黨積極分子年齡結(jié)構(gòu)分析:30歲及以下;31~
35歲;36~40歲;41~45歲;46~50歲;51~55歲;56~60歲;61~65歲;66~70歲;71歲及以上。
3 程序?qū)崿F(xiàn)過程
下面說明一下該自動化程序的實現(xiàn)過程。筆者是在Excel 2007環(huán)境下完成程序的開發(fā)過程的,其中用到的關(guān)于Excel數(shù)據(jù)透視表、Excel圖表的對象代碼,同樣適用于Excel2003及以后的其他版本。
導入數(shù)據(jù) 首先要在Excel模版中導入企事業(yè)單位的黨員信息數(shù)據(jù),包含黨員的姓名、性別、民族、出生年月、文化程度、參加工作時間、入黨時間、職稱、職稱評定時間、現(xiàn)任職務等基本信息。這些數(shù)據(jù)導入到Excel模板的“源數(shù)據(jù)”工作表中。
整理數(shù)據(jù)格式 在Excel模板中有些特定的字段需要規(guī)范數(shù)據(jù)格式,如“sheet1”工作表是用來統(tǒng)計入黨時間的,要求在A列復制黨員的入黨時間,B列放入統(tǒng)計的入黨時間節(jié)點;根據(jù)黨員統(tǒng)計表的格式要求,這兩個字段都統(tǒng)一寫成yyyy.mm的格式。
設計功能結(jié)構(gòu) 在Excel模板的“源數(shù)據(jù)”工作表中導入黨員基本信息,其他工作表用于實現(xiàn)各項功能。在表1(程序功能結(jié)構(gòu))中有五個功能,分別用五個工作表來實現(xiàn)。在每一個相應功能的工作表中執(zhí)行相應的宏代碼即可。
編寫代碼 本Excel模板要編寫五段宏代碼,實現(xiàn)的功能都是根據(jù)黨員基本信息的數(shù)據(jù)自動產(chǎn)生數(shù)據(jù)統(tǒng)計結(jié)果和圖表,它們的程序流程大致相同。程序流程如下:根據(jù)用戶選擇的不同的分析類別觸發(fā)不同的事件過程;根據(jù)不同的分析類別的要求,在后臺進行計算,統(tǒng)計出每一個類別的總?cè)藬?shù);按照指定的格式顯示在工作表中;根據(jù)統(tǒng)計結(jié)果插入相應的統(tǒng)計圖。
4 程序部分代碼展示
以下代碼實現(xiàn)了黨員入黨時間統(tǒng)計的功能,根據(jù)所有黨員的入黨時間統(tǒng)計若干個指定的入黨時間節(jié)點之間的人數(shù)[1],并形成統(tǒng)計結(jié)構(gòu)餅圖。
Sub Macro1()
Range(“G2“).Select
ActiveCell.FormulaR1C1 = “=LEFT(R[0]C[-6],4)+TRUNC
(MID(R[0]C[-6],6,2)/12,3)”
//在G2單元格把A2單元格的入黨時間轉(zhuǎn)化為數(shù)字,年和月信息用小數(shù)來表示
Set myRange1 = Worksheets(“Sheet1”).Range(“A1:
A10000”)
answer1 = Application.WorksheetFunction.CountA
(myRange1)
//answer1是入黨人數(shù),A列是所有黨員的入黨時間列表
Selection.AutoFill Destination:=Range(“G2:G” & answer1),
Type:=xlFillDefault
//在G列把所有A列的入黨時間轉(zhuǎn)化為數(shù)字,用自動填充公式的功能實現(xiàn)
//在H列轉(zhuǎn)換時間斷點B列的日期為數(shù)字,年和月信息用小數(shù)來表示
Range(”h3”).Select
ActiveCell.FormulaR1C1 = ”=LEFT(R[0]C[-6],4)+TRUNC
(MID(R[0]C[-6],6,2)/12,3)”
Set myRange2 = Worksheets(”Sheet1”).Range(”B1:
B10000”)
answer2 = Application.WorksheetFunction.CountA
(myRange2)
//answer2是時間斷點的個數(shù)
answer2 = answer2 + 1
Selection.AutoFill Destination:=Range(”H3:H” & answer2),
Type:=xlFillDefault
//用自動填充公式的功能輸出時間分段標志
Range(“C3“).Select
ActiveCell.FormulaR1C1 = ”=R[1]C[-1]&””~””&RC[-1]”
Selection.AutoFill Destination:=Range(”C3:C” & answer2),
Type:=xlFillDefault
//在C列顯示文字,表示是哪兩個時間節(jié)點之間的數(shù)據(jù)
Range( “C2“ ).Select
ActiveCell.FormulaR1C1 = "=R[1]C[-1]&""以后"""
//在C2單元格顯示文字,最后一個時間節(jié)點以后
Range(”C” & answer2).Select
ActiveCell.FormulaR1C1 = "=R[0]C[-1]&""以前"""
//顯示文字,在第一個時間節(jié)點以前
//以下代碼統(tǒng)計各時間段的入黨人數(shù)
Range(”I2”).Select
ActiveCell.FormulaR1C1 = “=COUNTIF(R2C7:R” &
answer1 & “C7,””>””&R[1]C[-1])”
Selection.AutoFill Destination:=Range(“I2:I” & answer2), Type:=xlFillDefault
Range(“D2”).Select
ActiveCell.FormulaR1C1 = “=RC[5]”
Range(”D3”).Select
ActiveCell.FormulaR1C1 = ”=RC[5]-R[-1]C[5]”
Range(”D3”).Select
Selection.AutoFill Destination:=Range(”D3:D” & answer2),
Type:=xlFillDefault
For Counter = 2 To answer2
Set curCell = Worksheets(“Sheet1”).Cells(Counter, 4)
curCell.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=
xlNone, SkipBlanks _
:=False, Transpose:=False
If curCell.Value< 0.01 Then curCell.Value = 0
Next Counter
//以下代碼清空中間的計算過程
Columns(”E:I”).Select
Selection.Delete Shift:=xlToLeft
//以下代碼自動插入圖表,形成統(tǒng)計分段時間人數(shù)的餅圖
Range(”C1”).Select
Set curCell = Range(ActiveCell, ActiveCell.Offset
(answer2 - 1, 1))
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=curCell
ActiveChart.ChartType = xlPie
End Sub
5 程序效果
對于黨員入黨時間結(jié)構(gòu)分析功能的程序效果,圖1是程序運行結(jié)束后計算出來的最終結(jié)果;圖2是程序運行過程中的計算得出的中間數(shù)據(jù),在程序結(jié)束后自動刪除;圖3是根據(jù)最終結(jié)果自動形成的統(tǒng)計圖。
6 程序的可改進之處
該程序?qū)τ邳h員信息統(tǒng)計工作人員的好處是:以前要定期完成的黨員信息統(tǒng)計工作現(xiàn)在有一部分可以一鍵完成,只要把“源數(shù)據(jù)”工作表中的人員信息定期更新,就能得到相應結(jié)構(gòu)分析的結(jié)果。筆者認為程序的局限性在于相對于黨員信息統(tǒng)計的整體任務而言,功能還是較少,后續(xù)可以繼續(xù)擴展[2]。如在分層次的統(tǒng)計中,先分別計算出35歲以下和35歲以上黨員中女性、少數(shù)民族黨員的比例,然后合計所有黨員中女性、少數(shù)民族黨員的比例。
參考文獻
[1]吳智.基于Excel VBA高校畢業(yè)設計文檔快速生成系統(tǒng)的開發(fā)[J].電腦知識與技術(shù),2013(2):302-305.
[2]廖明梅,舒清錄.Excel VBA在對口中職招生考試中的應用[J].微型電腦應用,2014(7):58-61.