VBA中的条件判断
1、IF条件语句
和工作表设置公式一样,在VBA中同样可以用IF表示判断。只是写法不太一样。
if
条件1 then
条件1成立时运行的语句
elseif
条件2 then
条件2成立运行的语句
....
else
所有条件都不成立时运行的语句
end if
Sub
判断1() '单条件判断
If Range("a1").Value > 0
Then
Range("b1") = "正数"
Else
Range("b1") = "负数或0"
End If
End Sub
Sub
判断2() '多条件判断
If Range("a1").Value > 0
Then
Range("b1") = "正数"
ElseIf Range("a1") = 0 Then
Range("b1") = "等于0"
ElseIf Range("B1") <= 0
Then
Range("b1") = "负数"
End If
End Sub
Sub
多条件判断2()
If Range("a1") <> "" And
Range("a2") <> "" Then
Range("a3") =
Range("a1") * Range("a2")
End If
End Sub
2、Select
case判断
除了用if,还可以用select
case语句表示VBA中的判断
Select Case
表达式
Case Is
条件1
条件1成立时运行的语句
Case
条件2
条件2成立时运行的语句
Case Else
所有条件都不成立时运行的语句
End Select
Sub
判断1() '单条件判断
Select Case
Range("a1").Value
Case Is >
0
‘IS是需要和数字对比时的关键词,无数字对象不需要IS
Range("b1") = "正数"
Case Else
Range("b1") = "负数或0"
End Select
End Sub
Sub
判断2() '多条件判断
Select Case
Range("a1").Value
Case Is > 0
Range("b1") = "正数"
Case Is = 0
Range("b1") = "0"
Case Else
Range("b1") = "负数"
End Select
End Sub
Sub
判断3()
If Range("a3") < "G" Then
MsgBox
"A-G"
End If
End Sub
3、多条件筛选与查询
多条件筛选在VBA感觉是一件很难的事,其实挺简单的,也没有什么好的办法。就是通过循环进行对比而已,把符合条件的行保存到结果区域。
for x=1 to 1000
if
cells(x,1)="a" and cells(x,2)="b" and cells(x,3)>10
then
把符合条件的输入到结果区域中
end
if
next x
如果想速度快,就先把数据装入数组,在数组中进行循环,最后把结果数组放进单元格中,具体的可以参考兰色幻想VBA80集的第22集-28集。
4、多条件求和
和多条件筛选不太一样,多条件求和如果用直接循环就不好处理了,因为需要求和的项目有很多,怎么能对各个项目进行求和呢?
多条件求和,用字典可能是一种非常好的方法
先看一个简单的汇总。
商品名称
销量
A
2
A
3
C
4
D
2
B
4
C
1
F
3
E
4
D
2
Sub
汇总()
Dim d As New Dictionary
Dim arr, x
arr = Range("a2:b10")
For x = 1 To UBound(arr)
d(arr(x, 1)) =
d(arr(x, 1)) + arr(x, 2) 'key对应的item的值在原来的基础上加新的
Next x
Range("d2").Resize(d.Count) =
Application.Transpose(d.Keys)
Range("e2").Resize(d.Count) =
Application.Transpose(d.Items)
End Sub
如果多条件该怎么办呢?可以用兰色幻想原创的下棋法进行汇总。
下面的代码摘自VBA80集第29集。
Sub
下棋法之多条件多列汇总()
Dim
棋盘(1 To 10000, 1 To 4)
Dim
行数
Dim arr, x As Integer, sr As String, k
As Integer
Dim d As New Dictionary
arr = Range("a2:d" &
Range("a65536").End(xlUp).Row)
For x = 1 To UBound(arr)
sr
= arr(x, 1) & "-" & arr(x, 2)
If
d.Exists(sr) Then
行数 = d(sr)
棋盘(行数,
3) =
棋盘(行数,
3) + arr(x, 3)
棋盘(行数,
4) =
棋盘(行数,
4) + arr(x, 4)
Else
k = k + 1
d(sr) = k
棋盘(k, 1) = arr(x, 1)
棋盘(k, 2) = arr(x, 2)
棋盘(k, 3) = arr(x, 3)
棋盘(k, 4) = arr(x, 4)
End
If
Next x
Range("g2").Resize(k,
4) =
棋盘
End Sub
加载中,请稍候......