Excel宏编程
Excel编编宏程
在Excel 97中,"宏"难难难难难难难难难难难难难难难难是一个以理解的概念,但于一个具体的"宏"而言,却是容易理解的,如果难"难难难难难难难难难难难难难难难难难难难难难难难难难将一文字注:黑体注:,字号注:三号注:"就可以看作一个"宏"难难难难的,那"宏"难难难难难难难就不理解了,其Excel 97难难难难难中的多操作都可以是一个"宏" 。
"难难宏"难难难难难难难难难难难难难难难难难难难难难难难难难难难难其就是将工作的一系列操作果制下来,并命名存,相当于VB中一个子程序,。在Excel 97中,"难难宏"难难难难难难难难难难难难操作果,而不操作难难难难难难难难难难难难程。例如,改文字字体,需要打"字体"难难难难难难难中的下拉列表,再一字体,难难难难难难难难难难难难难难难难难难难难难难难难难文字即所的字体,是一个程,果是将所
的文字改所的字体。而难难难难难难难难难难"难难宏"难难难只"难难难难难难难难难难难将所的文字改所的字体"难难难难 一果。
Excel 97难难难难难难难难难难难难难难难难难难难难难中工作表是由行和列成的二表格,我可以通系提供的句activesheet.cells(I,j),将当前工作表中的第I行第j难难难难难难列所在的元格中的数据取出,也可将它数据填入到指定的元格中,,然后反把它放难难难难难难难难难难难难入所定的数中,就可以其行各操作,如求难难难难难难难难难难难难难难难难难难难难难难
平均分、分、分数段人数等等。难难难难难难难难难难难
本人就利用Excel 97难难难难难难难中所提供的宏功能来做学生成的分析理程序。本程序是Excel难难难难中的一个文件,其中包含以下几个宏:分班、分、平均分、分数段、除等。难难难难
明:难难难?本程序是以本校高三理科班学生成行分析。难难难难难难 ?有程序中用到的几具宏的功能明:难难难难难难难难难难难难难难难难
分班:于以确定班的情况下,以班位行难难难难难难难难难难难难难难难难难难难难难分班,本宏可以作高一新生入学行分班的功能。难难难难难难难难难难难难难难难难
分:原始的成自求分。难难难难难难难难难难难难难难难
平均分:原始的成以班位行各学科平均成难难难难难难难难难难难难难难难难难难难难的算及全校各学科成的算。难难难难难难难难难难难难难难
分数段:定一个最高分数及最低分数,然后难难难难难难难难难难难难难难难难难难出各班各个分数段的人数,各分数段人数行累。难难难难难
除:用于除不用的工作表。难难难难难难难难难难难难难难
将各个宏的代列如下:难难难难难难难难难难难难难
?分班
Sub 分班()
Const studentno = 191 难难难难难难 注:学生人数
Const zdno = 12 难难难难难 注:字段数
Dim zd$(zdno) 难难难难难注:定12难 个字段的数
Dim a(studentno, zdno), stu(60, zdno) Dim nam$(studentno), bjname$(60) 难难难难难难难难难难难注:定一个存放全校学生名字及各班学生名字的数难
Dim bj(studentno) 难难难难难难难难难难难难难 注:定存放班的一个数
注:理科班工作表 难难难难难难难难
Sheets("高三理").Select
For i = 2 To studentno bj(i) = ActiveSheet.Cells(i, 1)
nam$(i) = ActiveSheet.Cells(i, 2)
For j = 3 To zdno
a(i, j) = ActiveSheet.Cells(i, j)
Next j
Next i
注:存放字段到数中。 难难难难难难难难难难难
For i = 1 To zdno
zd$(i) = ActiveSheet.Cells(1, i)
Next i
注:先建立各个班的工作表 难难难难难难难难难难难难难
Sheets("高三理").Select
Sheets("高三理").Copy After:=Sheets("分数段") Sheets(" 高三理(2)").Select
Sheets(" 高三理(2)").Name = "33" For i = 2 To studentno For j = 1 To zdno
ActiveSheet.Cells(i, j) = Space$(1)
Next j
Next i
Range("a1").Select
For i = 1 To zdno
ActiveSheet.Cells(1, i) = zd$(i)
Next i
注: 难难34到36 班工作表的建立
For i = 34 To 36
x$ = Mid$(Str(33), 2) Sheets(x$).Select
Sheets(x$).Copy After:=Sheets("分数段") Sheets(x$ " (2)").Select Sheets(x$ " (2)").Name = Mid$(Str(i), 2)
Next i
注:具体分班。 难难难难难难难
For k = 33 To 36
bjrs = 0
x$ = Mid$(Str(k), 2) no = k Mod 10
Sheets(x$).Select
For i = 2 To studentno If bj(i) = no Then
bjrs = bjrs 1
bjname$(bjrs) = nam$(i) For j = 3 To zdno
stu(bjrs, j) = a(i, j) Next j
End If
Next i
For i = 2 To bjrs
ActiveSheet.Cells(i, 1) = no ActiveSheet.Cells(i, 2) = bjname$(i)
For j = 3 To zdno
ActiveSheet.Cells(i, j) = stu(i, j)
Next j
Next i
Next k
End Sub
?难 分
Const studentno = 190
Const xknum = 6
Const zdnum = 12
Sheets("高三理").Select
For i = 2 To studentno 1 Sum = 0
For j = 1 To xknum
Sum = Sum ActiveSheet.Cells(i, j 3)
Next j
ActiveSheet.Cells(i, zdnum-1) = Sum
Next i
End Sub
?平均分
Sub 平均分()
Const studentno = 190
Const xknum = 6
Dim fs(studentno, xknum), pjf3(4, 6), bjrs(4), qxpjf(6)
Dim bj(studentno)
Sheets("高三理").Select
注:以下程序段用于求全校平均分 难难难难难难难难难难难难难难难
For i = 1 To studentno bj(i) = ActiveSheet.Cells(i 1, 1)
For j = 1 To xknum
fs(i, j) = ActiveSheet.Cells(i 1, j 3)
Next j
Next i
For i = 1 To xknum
Sum = 0
For j = 1 To studentno Sum = Sum fs(j, i)
Next j
qxpjf(i) = Sum / (j - 1) Next i
注:以下程序段用于求各班平均分 难难难难难难难难难难难难难难难
For j = 1 To 4
For i = 1 To studentno If bj(i) = j 2 Then
bjrs(j) = bjrs(j) 1 For k = 1 To xknum
pjf3(j, k) = pjf3(j, k) fs(i, k)
Next k
End If
Next i
Next j
For j = 1 To 4
For i = 1 To 6
pjf3(j, i) = pjf3(j, i) / bjrs(j)
Next i
Next j
注:写入各班各科平均分 难难难难难难难难难难难
Sheets("平均分").Select
For i = 1 To 4
For j = 1 To 6
ActiveSheet.Cells(i 2, j 1) = pjf3(i, j)
Next j
Next i
注:写入全校各科平均分 难难难难难难难难难难难
i = 7
For j = 1 To 6
ActiveSheet.Cells(i, j 1) = qxpjf(j)
Next j
End Sub
?分数段
Sub 分数段()
Const max = 600
Const min = 390
Const studentno = 190
Const bjnum = 4
Const fsdnum = 22
Dim bjfsd(bjnum, fsdnum), zf(studentno, 2)
Sheets("高三理").Select
For i = 1 To studentno zf(i, 1) = ActiveSheet.Cells(i 1, 1) 难难难难难难 注:存放班
zf(i, 2) = ActiveSheet.Cells(i 1, 11) 难难难难难难 注:存放分
Next i
For i = 1 To studentno For j = 1 To 4 难难注:3---6班共4难 个班
If zf(i, 1) = j 2 Then For k = max To min Step -10 low = Int((max 10 - k) / 10) If zf(i, 2) > k Then bjfsd(j, low) = bjfsd(j, low) 1
Next k
End If
Next j
Next i
Sheets("sheet3").Select For i = 3 To 6
For k = 1 To fsdnum
ActiveSheet.Cells(i, k 1) = bjfsd(i - 2, k)
Next k
Next i
Range("M3:W6").Select
Selection.Cut
ActiveWindow.LargeScroll ToRight:=-1 Range("B8").Select
ActiveSheet.Paste
End Sub
? 难 除
Sub 难除()
Sheets("33").Select
ActiveWindow.SelectedSheets.Delete Sheets("34").Select
ActiveWindow.SelectedSheets.Delete Sheets("35").Select
ActiveWindow.SelectedSheets.Delete Sheets("36").Select
ActiveWindow.SelectedSheets.Delete End Sub