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