按你的意思编了一个简单的VBA程序,利用循环语句FOR……NEXT的嵌套就能轻松实现想要的结果,其代码如下:
Public Sub ppp()
Dim a As Integer
a = [a65536].End(xlUp).Row
For k = 2 To a
Cells(k, "I") = Cells(k, "A")
j = 0
u = 0
For b = 2 To 7
If Cells(k, b) = "" Then
j = j + 1
Cells(k, "I").Offset(, 6 + j) = Cells(1, b)
ElseIf Cells(k, b) < 60 Then
u = u + 1
Cells(k, "I").Offset(, u) = Cells(1, b)
End If
Next
Next
End Sub
编好了之后我添加了一个按钮控件,然后把这个程序指定给了按钮,这样再多的学生成绩数据只要轻轻一点结果就能很方便快捷的判断出来。
如下载的附件打开后按钮失效的话,请将你的EXCEL中的宏安全性调低。
“工具”--“选项”--“安全性”--“宏安全性”
将宏安全等级设置为“中”或者“低”那样才能启动程序。设置好之后关闭EXCEL然后再重新打开就能用了。
我用公式帮你弄好了,不知道你是不是一定要用vba
不及格科目公式
=IF(LARGE(($B2:$G2<60)*($B2:$G2<>"")*COLUMN($B2:$G2),COLUMN(A1))=0,"",OFFSET($A$1,0,LARGE(($B2:$G2<60)*($B2:$G2<>"")*COLUMN($B2:$G2),COLUMN(A1))-1,1,1))
按CTAL+SHIFT+回车,然后向右拉动二格
未修科目公式
=IF(LARGE(($B2:$G2="")*COLUMN($B2:$G2),COLUMN(A1))=0,"",OFFSET($A$1,0,LARGE(($B2:$G2="")*COLUMN($B2:$G2),COLUMN(A1))-1,1,1))
按CTAL+SHIFT+回车,然后向右拉动二格
追问谢谢,辛苦了。但这个只是个范本,数据量大的话,用公式很麻烦的,所以想用vba来写。不知道怎么写,谢谢了
追答那就循环读取记录然后再判断就行了。数据量大的话用VBA也是很慢的,特别是一条一条记录去判断。
追问说的好抽象啊,能否给个代码呢?谢谢了...我就是要代码来的...