excel 2007 vba与宏完全剖析_Excel宏VBA小技巧系列 | 分段加合
“分析”這種能力,堪稱人類智慧之光。專利分析領(lǐng)域有很多大神,還有許多高明的工具和技巧。不過君對(duì)分析是七竅通了六竅——一竅不通,所以分析絕對(duì)不是這篇文章的重點(diǎn)。這系列的文章,只想聊幾個(gè)Excel宏VBA的小程序(其實(shí)并不限于處理專利數(shù)據(jù),只是圖個(gè)方便圖個(gè)開心罷了),篇幅短小,而且比較快更。
假如,某食品企業(yè),每個(gè)部門按期提交發(fā)明創(chuàng)造。企業(yè)統(tǒng)計(jì)人員把發(fā)明創(chuàng)造的提交日、年份、發(fā)明名稱、獎(jiǎng)勵(lì)系數(shù)匯總到一張表里。
如果現(xiàn)在需要分段統(tǒng)計(jì)各個(gè)部門的獎(jiǎng)勵(lì)系數(shù)的總數(shù),怎么辦呢?有的小伙伴可能手動(dòng)用SUM函數(shù)求和來搞定,或者可能用“合并計(jì)算”搞定咯。
不過,雖然手動(dòng)操作的技巧簡(jiǎn)單易學(xué),但當(dāng)多個(gè)數(shù)據(jù)文件需要一系列的復(fù)雜手動(dòng)操作時(shí),手動(dòng)操作就存在一些Bug:每換一套數(shù)據(jù),就要重新手動(dòng)操作一遍,并且,如果處理數(shù)據(jù)的人員更換,這一系列復(fù)雜手動(dòng)操作的可移植性和準(zhǔn)確性都比較堪憂。人力因素在處理數(shù)據(jù)的過程中難以抽離,大家很容易變成“表哥”和“表姐”。相比于人工手動(dòng)操作,宏VBA程序因?yàn)樵谶\(yùn)行過程中剔除了人工的因素,所以可移植性和準(zhǔn)確性都較高。而且,編寫一段程序,相當(dāng)于對(duì)不同的待處理數(shù)據(jù)固定了相同的“標(biāo)準(zhǔn)”。這個(gè)“統(tǒng)計(jì)各個(gè)部門發(fā)明獎(jiǎng)勵(lì)系數(shù)總數(shù)”的簡(jiǎn)單小例子,著重傳達(dá)一種程序思維。
? 第一步:打開宏程序編輯界面
根據(jù)Excel版本的不同,可以在 “視圖” 中錄制一個(gè)空的宏,停止錄制后進(jìn)行編輯。也可以在Excel選項(xiàng)的自定義功能區(qū)中勾選 “開發(fā)工具” 訪問宏功能。
? 第二步:定義Sub過程及變量我們把完成“按部門加合發(fā)明獎(jiǎng)勵(lì)系數(shù)”的這個(gè)過程定義為bigtitle,當(dāng)然,用其他的名字也可以。隨后,我們要定義四個(gè)整型變量:
i 代表數(shù)據(jù)區(qū)域的行的變量
j 代表上一段相同部門底端的行
k 代表下一段相同部門底端的行
t 代表在一段相同部門的數(shù)據(jù)范圍內(nèi)變化的行
隨后我們?cè)俣x兩個(gè)字符串變量:str1代表第i行的部門名稱,str2代表第i+1行的部門名稱。
寫為:
Sub bigtitle()
Dim i, j, k, t As Integer
Dim str1, str2 As String
*程序主體*
End Sub
① 第一層循環(huán),i從表的第2行循環(huán)賦值至第24行,在i的每次賦值過程中,表中第i列、第3列的部門信息被賦值給str1,同時(shí)第i+1行、第3列的部門信息被賦值給str2。
寫為:
For i=2 To 24? str1 = Sheet2.Cells(i,3)
? str2 = Sheet2.Cells(i+1,3)
? *條件語句*
Next
② 條件語句,當(dāng)str1不等于str2時(shí),說明i所在的行已經(jīng)到了該相同部門的最后一行,從i+1行起,就進(jìn)入了下一個(gè)部門。這時(shí),我們把這個(gè)i值賦給k,作為該段相同部門底端的行的標(biāo)記,同時(shí),把原k值賦給j,用于標(biāo)記上一段相同部門底端的行。在判斷str1和str2是否相同時(shí),我們使用字符串對(duì)比函數(shù)StrComp。
寫為:
If StrComp(str1, str2, 1) <> 0 Then? j = k
? k = i
? *第二層循環(huán)*
End If
③ 第二層循環(huán),當(dāng)j和k確定后,從第j+1行到第k行,部門名稱相同,即同一部門。此時(shí)設(shè)置t變量,其循環(huán)范圍從第j+1行到第k行,將在此范圍內(nèi)的所有第5列的獎(jiǎng)勵(lì)系數(shù)都加總到第k行的第6列。這里需要注意的是,應(yīng)當(dāng)設(shè)置k的初始值為1。
寫為:
For t = j+1 To kSheet2.Cells(k, 6) = Sheet2.Cells(k, 6) + Sheet2.Cells(t, 5)Next這樣,運(yùn)行宏之后,就可以得到各個(gè)部門的總獎(jiǎng)勵(lì)系數(shù):
全體Sub過程如下,由兩層循環(huán)和一層條件判斷構(gòu)成,給大家做個(gè)參考。
這樣,當(dāng)數(shù)據(jù)量變大時(shí),只需要修改第一層循環(huán)中“For i=2 To 24”的24至最后一條數(shù)據(jù)所在行的行數(shù),然后重新運(yùn)行宏,即可完成大量數(shù)據(jù)分段加合的工作。
下期預(yù)告: Excel宏VBA小技巧系列之整合排序總結(jié)
以上是生活随笔為你收集整理的excel 2007 vba与宏完全剖析_Excel宏VBA小技巧系列 | 分段加合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tomcat8和tomcat7性能比较
- 下一篇: mysql 即学a又学b_MySQL学习