VBA,判断几个单元格数字。

这样可以判断a1与b1单元格的数字。如果要同时判断a1到z1单元格中的所有数字,我可不想写26个条件,怎么样写才容易点?Subtest1()SelectCaseRange... 这样可以判断a1与b1单元格的数字。如果要同时判断a1到z1单元格中的所有数字,我可不想写26个条件,怎么样写才容易点?

Sub test1()
Select Case Range("a1").Value And Range("b1").Value
Case Is <= 1000: Range("c1") = "不合格"
Case Is <= 2000: Range("c1") = "基本合格"
Case Else: Range("c1") = "合格"
End Select
End Sub
另外,上面这个程序不太正常,输入有些数字是正常的,有些就不正常。
展开
 我来答
百度网友f2f20ee
2012-08-02 · 超过15用户采纳过TA的回答
知道答主
回答量:114
采纳率:0%
帮助的人:50.4万
展开全部
楼主,你是需要两个两个地同时进行判断呢?还是依次判断单个得到结果?

只要a1或b1中有一个数字小于等于1000,不管另一个数是多少,都不合格。
只要a1或b1中有一个数字小于等于2000但大于1000,不管另一个数是多少,都基本合格。如果两个数都大于1000但小于等于2000,相当也是基本合格。
如果a1或b1两个数字都大于2000,都合格”
你这段话,我没太懂!
根据我对这段话猜的意思,写了一段,请你测试,是否符合要求?
'判断1列到26列数字(按两个两个地依次判断结果)
Sub Judgenm()
Dim Sj(), Rzlt(), C%, R%, M&, W%, P1$, P2$, P3$
Dim R1%, R2%, R3%, Rz$
P1 = "合格"
P2 = "不合格"
P3 = "基本合格"
With ActiveSheet
Sj = Range(.Cells(1, 1), .Cells(1, 26)).Value
ReDim Rzlt(1 To UBound(Sj, 2) / 2)
W = 0
For C = LBound(Sj, 2) To UBound(Sj, 2)
If C Mod 2 = 0 Then
W = W + 1
R1 = 0
R2 = 0
R3 = 0
For R = C - 1 To C
M = CLng(Sj(1, C))
Select Case M
Case Is > 2000
R1 = R1 + 1
Case Is <= 1000
R2 = R2 + 1
Case Else
R3 = R3 + 1
End Select
Next R
Rz = ""
If R1 > 1 Then Rz = P1: GoTo E1
If R2 > 0 Then Rz = P2: GoTo E1
If R3 > 0 Then Rz = P3
E1:
Rzlt(W) = Rz
End If
Next C
.Cells(1, 27).Resize(UBound(Rzlt), 1) = Application.Transpose(Rzlt)
End With
End Sub
追问
比方说,一个专业考试,包括10门课程,只要有一门课程分数不及格,这个专业考试就不过关。
追答
如果是“一个专业考试,包括10门课程,只要有一门课程分数不及格,这个专业考试就不过关。”,那么就简单多了!
'判断1列到26列数字
Sub Judgenm()
Dim Sj(), C%, R%, M&, P1$, P2$, P3$
Dim R1%, R2%, R3%, Rz$
P1 = "合格"
P2 = "不合格"
P3 = "基本合格"
With ActiveSheet
Sj = Range(.Cells(1, 1), .Cells(1, 26)).Value
For C = LBound(Sj, 2) To UBound(Sj, 2)
M = CLng(Sj(1, C))
Select Case M
Case Is > 2000
R1 = R1 + 1
Case Is 0 Then Rz = P2: GoTo E1
If R3 > 0 Then Rz = P3: GoTo E1
If R1 > 1 Then Rz = P1
E1:
.Cells(1, 27) = Rz
End With
End Sub
景观世间情j
2012-08-02 · TA获得超过148个赞
知道答主
回答量:57
采纳率:100%
帮助的人:49.4万
展开全部
Sub test()
Range("a2") = ""
For i = 1 To 26
If Cells(1, i).Value < =1000 Then
Range("a2") = "不合格"
Exit For
End If
Next
If Range("a2") = "" Then
For i = 1 To 26
If Cells(1, i).Value < =2000 Then
Range("a2") = "基本合格"
Exit For
End If
Next
End If
If Range("a2") = "" Then
Range("a2") = "合格"
End If
End Sub
这个给你试试。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
aTang9512
2012-08-02 · 超过14用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:34.1万
展开全部
Sub test1()
For ki = 1 To 26
Select Case Cells(1, ki)
Case Is <= 1000: Cells(2, ki) = "不合格"
Case Is <= 2000: Cells(2, ki) = "基本合格"
Case Else: Cells(2, ki) = "合格"
End Select
Next
End Sub

A1:Z1是数据,A2:Z2是结果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hnzhoul
2012-08-02 · TA获得超过401个赞
知道小有建树答主
回答量:583
采纳率:0%
帮助的人:243万
展开全部
用循环处理

不用range("A1“)这种方式

用cells(1,1)到cells(1,26)来取单元格的值,这样就可以用循环了,
追问
另外,上面这个程序不太正常,输入有些数字是正常的,有些就不正常。
追答
可能是这个不对,Range("a1").Value And Range("b1").Value

改成用IF语句吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syx54
2012-08-02 · TA获得超过7378个赞
知道大有可为答主
回答量:6567
采纳率:83%
帮助的人:2742万
展开全部
你采用 And 显然与下面的大小比较不匹配的?
应该把AND 改成 数值加,这是我的猜测!
请说明,你的目的?

另外,提示一下,其实你到EXCEL里,采用录制宏的办法,做一下"A1--Z1"的求和,打开宏,就可以看到代码了,复制过来稍作修改,就可以达到自己的目的.
更多追问追答
追问
你好。我的目的是:
只要a1或b1中有一个数字小于等于1000,不管另一个数是多少,都不合格。
只要a1或b1中有一个数字小于等于2000但大于1000,不管另一个数是多少,都基本合格。如果两个数都大于1000但小于等于2000,相当也是基本合格。
如果a1或b1两个数字都大于2000,都合格。
追答
那是没有办法,只能一个单元格一个单元格的进行判断的!
这个很好理解,有A,B,C,当判断完A,是不能确定答案的,因为A即使很大,B或C都可能比较小,所以只有全部判断完,才能出结论.
这就是通常说的遍历,就是每一个都必须检查到!
两个单元格的话,可以这样用AND,同时注意到是数值,加个Val()函数
if Val(Range("A1").Value)<= 1000 Or Val(Range("B1").Value)<= 1000 Then
range("C1") = "不合格"
elseIf Val(Range("A1").Value)<= 2000 Or Val(Range("B1").Value)<= 2000 Then
range("C1") = "基本合格"

else
range("C1") = "合格"
end if
如果是A1--Z1,就采用楼下的循环方法
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式