EXCEL是數(shù)據(jù)處理上必備的技能。但如果問每個人「你的EXCEL程度如何?」這樣的問題,得到的答案幾乎是模糊的。因此在這里提出兩道大家常面對的問題,讓各位測測看自己的EXCEL程度到底屬于初級、中級、高級的哪一級。
第一題:利用EXCEL印制報表很是方便,讓每一頁都可印出標(biāo)題是初級者可辦到的,但是EXCEL打印的列數(shù)常是由系統(tǒng)依篇幅自動計算,所以常會有一頁報表31或33筆紀(jì)錄的情況,并不利于統(tǒng)計紀(jì)錄筆數(shù)。如果你可達(dá)成每頁只打印30筆就要一定要跳頁的規(guī)定,就算是屬于EXCEL的中級程度。又如果可以寫一個小小的宏程序,做到每頁只打印30筆,而且換不同單位部門時也要跳頁,讓不同的單位部門分開印在不同頁上,這樣你就可以算是具有EXCEL高級的程度了。
第二題:利用EXCEL來排名次也很簡單,以國中基測為例,總分相同的同學(xué)還要比作文分?jǐn)?shù)定高下,如果先以總分為主鍵從高到低排序,再以作文分?jǐn)?shù)為第二鍵從高到低排序,然后以填滿數(shù)列的方式拉出1、2、3…名次就好了,這是EXCEL初學(xué)者常會做的事,但是會發(fā)生同樣總分的人,名次不相同的情況。學(xué)過進(jìn)階EXCEL函數(shù)的同學(xué)可能會知道要使用RANK函數(shù),讓同樣總分的人名次也相同,以下的名次則累計。但是以國中基測為例,總分相同的同學(xué)還要比作文分?jǐn)?shù)定出高下,這時RANK函數(shù)就沒辦法做到了,我們必須學(xué)習(xí)寫一個小小的宏程序,來做到這種排名的規(guī)定。只要以此種規(guī)定排名,再按照各校招生人數(shù)來篩選學(xué)生,使位在邊緣的同學(xué)只要是名次相同的就一律進(jìn)榜??偡窒嗤魑姆?jǐn)?shù)較低的同學(xué)就要被刷掉。
第一題:利用EXCEL印制報表
利用EXCEL印制報表很方便,讓每一頁都可印出標(biāo)題是初級者可辦到的,我們以EXCEL 2010為例,只要如下圖從「版面配置-->打印標(biāo)題-->版面設(shè)定」的工作表頁簽去設(shè)標(biāo)題欄為第一和第二列($1:$2)即可。
但是EXCEL打印的列數(shù)常是由系統(tǒng)依篇幅自動計算,所以常會有一頁報表31或33筆紀(jì)錄的情況,并不利于統(tǒng)計紀(jì)錄筆數(shù)。如我們所舉的例子,每頁印出26筆數(shù)據(jù),但我們想印出規(guī)定每頁為25筆數(shù)據(jù)的報表。
其實這也很簡單,可利用錄制宏的方式達(dá)到,先將光標(biāo)定位在第25筆數(shù)據(jù)之后,即第26筆數(shù)據(jù)處,從「檢視-->宏-->錄制宏」,先選「以相對位置錄制」,再執(zhí)行「錄制宏」。
填入所要取的宏名稱和快捷鍵后,就可以開始錄制宏。
錄制的動作只有兩個,在「版面配置-->分頁符號-->插入分頁」后,再將光標(biāo)定位在第50筆數(shù)據(jù)之后,即可「停止錄制」。
接著從「檢視宏」去找到這個宏,按下「編輯」,即可轉(zhuǎn)到VBA編輯窗口。
EXCEL會自動產(chǎn)生這兩個動作的指令,接著我們要作的只是依需要在指令外圍加上一個循環(huán),看循環(huán)需作多少次。再從宏窗口去「執(zhí)行」此宏即可。
茲將程序代碼說明如下,「'」符號表示之后的文字是批注,可不必打在程序里:
Sub 宏P(guān)AGE25()
' 我們錄置宏時所取的宏名稱
' 快捷鍵: Ctrl+p
For i = 1 To 10 '讓這兩個動作重復(fù)執(zhí)行10次
'在目前活動單元格所在的位置上面插入分頁線
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
'再將活動單元格以相對引用移到25列之后 并選取整列
ActiveCell.Offset(25, 0).Rows("1:1").EntireRow.Select
Next
End Sub
以下可看到執(zhí)行此宏后,報表打印的結(jié)果每頁固定是25筆。
做到這里表示你已經(jīng)有中級程度了。但是從上面報表我們發(fā)現(xiàn)金華國中的后段和龍門國中的前段資料竟然在同一頁。所以我們希望寫一個小小的宏程序,做到每頁只打印30筆,而且換不同學(xué)?;騿挝粫r也要跳頁從第一列開始印,讓不同的學(xué)?;騿挝环珠_印在不同頁上。如下列兩頁所示。
我們只要根據(jù)學(xué)?;騿挝幌刃信判?,在剛才的VB編輯窗口撰寫以下的宏程序,并以同樣的方式執(zhí)行宏,就可以做到了。程序說明如下:
Sub PAGESchool()
Dim i, count As Integer ' i是活動單元格所在的列數(shù) count是指每頁要印幾筆
Dim school, oldshool As String '分別存放目前這筆和上一筆學(xué)校的字符串變量
count = 1 '每頁25筆 從1起算
i = 3 '第一次出現(xiàn)校名是B3單元格
school = Range("B" & i).Value '將第一筆資料的學(xué)校名稱放到school
oldschool = school '將目前的學(xué)校保留到另一變量oldschool以便和下一筆比較
Do While school <> "" '還有記錄數(shù)據(jù) 學(xué)校名稱不等于空字符串
If count > 25 Or oldschool <> school Then '假使?jié)M25筆或?qū)W校變了就換頁
Range("B" & i).Select '定位活動單元格后再換頁
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
'以上的換頁指令可以自動錄制宏取得
count = 1 '換頁后 再從1算起
End If
count = count + 1 '打印的筆數(shù)加1
oldschool = school '將目前的學(xué)校保留到變量oldschool以便和下一筆的比較
i = i + 1 '指向下一筆資料的學(xué)校名稱
school = Range("B" & i).Value '將下一筆資料的學(xué)校名稱放到school
Loop
End Sub
第二題:利用EXCEL排名次
以國中基測為例,我們從「檔案-->排序」先以總分為主鍵從高到低排序,再以作文分?jǐn)?shù)為第二鍵從高到低排序。
然后以填滿數(shù)列的方式拉出1、2、3…名次,這是EXCEL初學(xué)者的做法。
以上我們看到同樣總分的人,名次不相同的情況。學(xué)過較進(jìn)階EXCEL函數(shù)的同學(xué)可能會知道要用RANK函數(shù) =Rank(I3,$I$3:$I$162),讓同樣總分的人名次也相同,以下的名次則累計。
但是以國中基測為例,總分相同的同學(xué)還要比作文分?jǐn)?shù)定出高下,這時RANK函數(shù)就沒辦法做到了,我們必須學(xué)習(xí)寫一個小小的宏程序,來做到這種排名的規(guī)定。
Sub Ranking()
Dim i, total, composition, rank, samerank As Integer ' samerank是同名次的人數(shù)
total = composition = rank = samerank = 0
i = 3 '第一次出現(xiàn)總分是在I3單元格
Do While Range("I" & i).Value <> "" '還有記錄數(shù)據(jù) 總分不等于空字符串
'以下是總分和作文都和前一個人相同情況的判斷
If Range("I" & i).Value = total And Range("H" & i).Value = composition Then
Range("J" & i).Value = rank '將名次放在名次字段J
samerank = samerank + 1 '將總分和作文都相同分?jǐn)?shù)的人數(shù)加1
Else '總分和作文不同分?jǐn)?shù)可分出高下的情況
rank = rank + 1 + samerank '名次加1 再加上總分和作文都同分的人數(shù)
Range("J" & i).Value = rank '將名次放在名次字段J
samerank = 0 '同分的人數(shù)歸零
End If
total = Range("I" & i).Value '將目前的總分保留以便和下一筆比較
composition = Range("H" & i).Value '也將目前作文保留以便和下一筆比較
i = i + 1 '指向下一筆數(shù)據(jù)的總分和作文
Loop
End Sub
執(zhí)行此宏后,就可依我們想要的規(guī)定方式排名。國中基測的總分和作文分?jǐn)?shù)相同的同學(xué),依規(guī)定還要依國文、 數(shù)學(xué)、英文、社會、自然的優(yōu)先級繼續(xù)比下去,也可以很容易地稍加修改這個宏程序,使其完全符合實際的執(zhí)行。
聯(lián)系客服