加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VBA中的条件判断

(2015-11-26 06:51:20)
标签:

excel

vba

分类: ExcelVBA

VBA中的条件判断

1IF条件语句

和工作表设置公式一样,在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

 

2Select 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、多条件求和

  和多条件筛选不太一样,多条件求和如果用直接循环就不好处理了,因为需要求和的项目有很多,怎么能对各个项目进行求和呢?

   多条件求和,用字典可能是一种非常好的方法

先看一个简单的汇总。

商品名称     销量

         2

         3

         4

         2

         4

         1

         3

         4

         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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有