使用VBA在Excel按条件查找,怎么让查找的两个结果显示在一个表格中?

要处理的表格如图1:

查找出其中的不及格人的科目以及没有修的科目,生成的表格如图2所示:

怎么写VBA实现这个?

按你的意思编了一个简单的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然后再重新打开就能用了。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-23

我用公式帮你弄好了,不知道你是不是一定要用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也是很慢的,特别是一条一条记录去判断。

追问

说的好抽象啊,能否给个代码呢?谢谢了...我就是要代码来的...

第2个回答  2013-10-24
你这是三个条件。 姓名 科目 分数<60分。
举例:SUMPRODUCT函数
在VBA中用 工作表函数WorksheetFunction.SUMPRODUCT
SUMPRODUCT是工作表中的函数,前面加个WorksheetFunction. 就可以在VBA中用了。试一下。
要注意 单元格的表达方法。
相似回答