精华内容
下载资源
问答
  • VBA中冗长的多条件判断如何破

    千次阅读 2019-01-31 04:48:34
    判断语句VBA中经常用到的代码,语法格式也很简单,但是有些场景中判断条件有很,如下面代码所示。并且字段不断增多,程序中需要进行判断的地方有处,每次增加判断条件都要改处,既麻烦又容易出错。 If ...

    判断语句是VBA中经常用到的代码,语法格式也很简单,但是有些场景中判断条件有很多,如下面代码所示。并且字段不断增多,程序中需要进行判断的地方有多处,每次增加判断条件都要改多处,既麻烦又容易出错。

    If strCell = "姓名" Or strCell = "班级" Or strCell = "学号" Or _
    			strCell = "课程" Or strCell = "学分" Or strCell = "成绩" Then
    

    其实这种多判断条件可以简化(结构简化,代码行数需要增加,呵呵)。

    • 方法一:使用数组(或者字典),关键字保存在数组中,便于日后维护,利用循环进行判断,然后根据判断结果进行后续的处理。其中strCell是需要判断的字符串。对于每个字符串都需要循环判断多次,循环执行的次数取决于字符串在关键字数组中的位置,如果不在其中,那么就需要执行全部的循环,即6次,因此这个方法效率不高。
    Option Explicit
    Sub MultipleConditions1()
        Dim arrKey
        Dim strCell As String
        Dim i As Integer
        Dim blnFlag As Boolean
        blnFlag = False
        strCell = "学号"
        arrKey = Array("姓名", "班级", "学号", "课程", "学分", "成绩")
        For i = UBound(arrKey) To UBound(arrKey)
            If blnFlag = blnFlag Or (strCell = arrKey(i)) Then
                blnFlag = True
                Exit For
            End If
        Next i
        If blnFlag Then
            Debug.Print ("匹配关键字")
        Else
            Debug.Print ("无匹配关键字")
        End If
    End Sub
    
    • 方法二:与上面方法相同,关键字保存在数组中,不同之处在于使用Join函数先将关键字数组组合为一个字符串,然后再使用Instr判断一次就可以了,相应的代码效率得到了提升,特别是对于关键字数组元素多的应用场景中。
    Sub MultipleConditions2()
        Dim arrKey
        Dim strKey
        Dim strCell As String
        Dim i As Integer
        Dim blnFlag As Boolean
        blnFlag = False
        strCell = "学号"
        arrKey = Array("姓名", "班级", "学号", "课程", "学分", "成绩")
        strKey = VBA.Join(arrKey, "|")
        If VBA.InStr(strKey, strCell) > 0 Then
            Debug.Print ("匹配关键字")
        Else
            Debug.Print ("无匹配关键字")
        End If
    End Sub
    
    • 方法三:使用Like运算符进行判断,也可以实现同样的效果。
    Sub MultipleConditions3()
        Dim arrKey
        Dim strKey
        Dim strCell As String
        Dim i As Integer
        Dim blnFlag As Boolean
        blnFlag = False
        strCell = "学号"
        arrKey = Array("", "姓名", "班级", "学号", "课程", "学分", "成绩", "")
        strKey = VBA.Join(arrKey, "|")
        If strKey Like ("*|" & strCell & "|*") Then
            Debug.Print ("匹配关键字")
        Else
            Debug.Print ("无匹配关键字")
        End If
    End Sub
    

    以上三种方法,都只需要在代码中维护一处关键字数组就可以了,判断条件增多了,也无需对其他部分代码进行更新和调整。

    展开全文
  • vba判断语句

    千次阅读 2019-05-21 11:13:01
    1)If…Then…Else 语句 如1:If A>B And C<D Then A=B+2 Else A=C+2 如2:If x>250 Then x=x-100 或者 If Number < 10 Then Digits = 1 ElseIf Number < 100Then Digits = 2 Else Digits = 3 End If...

    1)If…Then…Else 语句
    如1:If A>B And C<D Then A=B+2 Else A=C+2
    如2:If x>250 Then x=x-100
    或者
    If Number < 10 Then
    Digits = 1
    ElseIf Number < 100Then
    Digits = 2
    Else
    Digits = 3
    End If
    2)Select Case…Case…End Case 语句
    Select Case Pid
    Case “A101”
    Price=200
    Case “A102”
    Price=300
    ……
    Case Else
    Price=900
    End Case
    3)Choose 函数
    choose(index, choce-1,choice-2,…,choice-n),可以用来选择自变量串列中的一个值,
    并将其返回,index 必要参数,数值表达式或字段,它的运算结果是一个数值,且界于1 和可
    选择的项目数之间。choice 必要参数,Variant 表达式,包含可选择项目的其中之一。
    如:
    GetChoice = Choose(Ind, “Speedy”, “United”, “Federal”)
    4)Switch 函数
    Switch(expr-1, value-1, expr-2, value-2 , expr-n,value-n)
    switch 函数和Choose 函数类似,但它是以两个一组的方式返回所要的值,在串列中,最先为
    TRUE 的值会被返回。expr 必要参数,要加以计算的Variant 表达式。value 必要参数。如
    果相关的表达式为True,则返回此部分的数值或表达式,没有一个表达式为True,Switch 会
    返回一个Null 值。
    如:
    Sheet1.Cells(1, 3) = Switch(“人民币” = “美元”, “$”, “人民币” = “人民币”, “¥”, “美元” = “欧元”, “€”)
    返回 “¥”

    展开全文
  • 分支判断语句(典型的就是指if)--- 按顺序判断,但不按顺序执行,只选择性执行,选择执行1个分支 循环语句 1.2 理解分支条件语句block内部,也是从上往下执行 分支语句是有序的 是从上往下执行的 所以很...

    一 理解分支条件语句

    1.1 VBA里的3种语句

    • 顺序执行的block
    • 分支判断语句(典型的就是指if)--- 按顺序判断,但不按顺序执行,只选择性执行,选择执行1个分支
    • 循环语句

     

    1.2 理解分支条件语句block内部,也是从上往下执行

    • 分支语句是有序的
    • 是从上往下执行的
    • 所以很多判断逻辑,都得基于这个设计基础考虑

     

    1.3 多层条件分支语句的嵌套(先小后大)

    • 第1层(最外层):最特殊,最严格,最小范围
    • 第2层:次特殊,次严格,范围较小
    • 。。。。
    • 第N-1层(最内层):最普通,最宽泛不严格,范围很大
    • 第N层:补集,一定是补计划,和前面的组成一个完整的集合!

     

    • If elseif 嵌套
    • 先判断外层的小范围,再判断更大的范围
    • 先特殊后一般

     

    • 多个独立if
    • If
    • if
    • 是独立判断

    if 嵌套例子1

    • x>1000 最具体,范围最小,放在最外层先判断
    Sub test3001()
    
    x = Application.RandBetween(1, 2000)
    Debug.Print "x=" & x & "  ";
    
    If x >= 1000 Then
       Debug.Print "x > 1000"
       Debug.Print "到分支1了"
    ElseIf x >= 100 Then
       Debug.Print "x => 100"
       Debug.Print "到分支2了"
    ElseIf x >= 10 Then
       Debug.Print "x => 10"
       Debug.Print "到分支3了"
    Else
       Debug.Print "其他"
    End If
    
    End Sub

    if 嵌套例子2

    • x<10 最具体,范围最小,放在最外层先判断
    
    x = Application.RandBetween(1, 1000)
    Debug.Print "x=" & x & "  ";
    
    If x <= 10 Then
       Debug.Print "x <= 10"
       Debug.Print "到分支1了"
    ElseIf x <= 100 Then
       Debug.Print "x <= 100"
       Debug.Print "到分支2了"
    ElseIf x <= 1000 Then
       Debug.Print "x <= 1000"
       Debug.Print "到分支3了"
    Else
       Debug.Print "其他"
    End If
    
    End Sub

     

    1.4  一个完整的if分支判断只会执行1个分支,

    • 一个完整的if endif 判断,每次只会执行1个分支,
    • 也就是说完整的if endif 判断,是按顺序判断,但不是顺序执行,而是选择性执行,只执行1个分支

     

    • 而多个if,则是独立的,每次都会运行。效率也会低一些。
    • 如果强行把一个逻辑判断,写成多个if,会很费。
    Sub test3003() '如果多个if,独立判断多次,没过滤每个if都执行,效率低
    
    x = Application.RandBetween(1, 2000)
    Debug.Print "x=" & x
    
    If x >= 1000 Then
       Debug.Print "x => 1000"
       Debug.Print "到if1了"
    End If
    
    If x >= 100 Then
       Debug.Print "x => 100"
       Debug.Print "到if2了"
    End If
       
    If x >= 10 Then
       Debug.Print "x => 10"
       Debug.Print "到if3了"
    End If

    这个结果如下(作为反例比较)

    • 既没做到分支判断的目的
    • 每个if 都执行了一遍

     

    2  if 条件分支语句

    2.1 基础语法

    • 语法
    • if  condition then
    • elseif  condition then 
    • else
    • end if 
    Sub t6(i)
    
    If i > 90 Then
       Debug.Print ("优秀")
    ElseIf i >= 60 Then
       Debug.Print ("通过")
    Else
       Debug.Print ("不及格")
    End If
    
    
    End Sub
    
    
    Sub t7()
      a = InputBox("请输入您的成绩")
      t6 (a)
    End Sub
    

     

    2.2 语法特例:如果if then 只有1个语句,不需要end if

    Sub testif1()
    
    If a = 0 Then Debug.Print "a=0"
    a = a + 1
    If a = 1 Then
      Debug.Print "a=1"
    End If
    
    End Sub

     

    3 select case条件分支语句

    3.1 基本语法

    • select case 变量/对象
    • case condition
    • case condition
    • case else
    • 记住else 前必须带 case else  不能是单独的else
    • end select

     

    3.2 第2语法(用得少)

    • select case   判断语句
    • case true
    • case false
    • case else
    • end select

     

    Sub test9901(a, b)
    
    Select Case a > b
    Case True
         Debug.Print "a>b"
    Case False
         Debug.Print "a<b"
    End Select
    
    End Sub
    
    Sub test9902()
    Call test9901(10, 2)
    Call test9901(2, 10)
    
    End Sub

     

     

    3.2 表达式的写法

    • 表达式必须前面带 is  (类似like   case like)
    • 如果是两个表达式,需要写成   case is   >  , is <   中间逗号风格
    • 等于某个值  case 90
    • 大于  case is > 90
    • 在某个范围内,下限 to 上限  case 4 to 8
    • 多个条件,逗号分隔(表示任意一个条件满足即可,是或的关系)
    • Case 1 to 4,7 to 9,11,13
    Sub t6(i)
    
    Select Case i
       Case Is >= 90
          Debug.Print "优秀"
       Case Is < 89, Is >= 60
          Debug.Print "合格"
       Case Else
          Debug.Print "不及格"
    End Select
    
    
    End Sub
    
    
    Sub t7()
      a = InputBox("请输入您的成绩")
      t6 (a)
    End Sub
    
    
    Sub test801()
    
    Select Case Cells(179, 1).Value
    Case 0
      Debug.Print "value is 0"
    Case Is > 0
      Debug.Print "value is positive"
    Case Is < 0
      Debug.Print "value is negetive"
    End Select
    
    End Sub

     

     

    4 if 和 select 的区别

    • select…Case语句,只能执行分支中的一个语句,但是,对各个语句的判断内容是没有限制的,也即判断的内容可以overlap,这一点和IF有绝对区别的。?
    • select和IF分支结构基本上可以互相转换的,他们的主要区别是Select分支结构只能对同一个表达式的值进行分支判断,而IF却不受该限制。

     

    参考

    http://www.cnblogs.com/wuzhiblog/p/vba_three.html

    https://blog.csdn.net/bangemantou/article/details/70194123

    展开全文
  • VBA语句 - 判断语句

    2018-08-21 19:46:00
    (1)IF判断语句条件判断 Sub 单条件判断() If Range("a1") > 0 Then Range("b1") = "正数" Else Range("b1") = "负数或0" End If End Sub 多条件判断1 Sub 多条件判断1() If Range("a1...

    (1)IF判断语句

    单条件判断

    Sub 单条件判断()
        If Range("a1") > 0 Then
            Range("b1") = "正数"
        Else
            Range("b1") = "负数或0"
        End If
    End Sub

    多条件判断1

    Sub 多条件判断1()
        If Range("a1") >0 Then
            Range("b1") = "正数"
        ElseIf Range("a1") = 0 Then
            Range("b1") = "等于0"
        Else
            Range("b1") = "负数"
        End If
    End Sub

    多条件判断2

    Sub 多条件判断2()
        If Range("a1") <>"" And Range("a2") <>"" Then
            Range("a3") = Range("a1") * Range("a2")
        End If
    End Sub

    区间判断

    Sub IF区间判断()
        If Range("a1") >3000 Then
            Range("b1") = 0.01
        ElseIf Range("a1") > 1000 Then
            Range("b1") = 0.03
        Else
            Range("b1") = 0.05
        End If
    End Sub

    注意:以上均为数值比较,还可用字母比较,如下.

    字母判断

    Sub 字母判断()
        If Range("a1") < "G" Then
            MsgBox "A-G"
        End If
    End Sub

     

    (2)Select判断

    单条件判断

    Sub 单条件判断()
        Select Case Range("a1").Value
        Case Is > 0
            Range("b1") = "正数"
        Case Else
            Range("b1") = "负数或0"
        End Select
    End Sub

    多条件判断

    Sub 多条件判断()
        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 Select区间判断()
        Select Case Range("a1").Value
        Case 0 To 1000
            Range("b1") = 0.05
        Case 1001 To 3000
            Range("b1") = 0.03
        Case Is > 3000
            Range("b1") = 0.01
        End Select
    End Sub

     

    IF判断语句和Select判断语句的区别:

    1.IF判断语句可同时判断多个条件,而Select判断语句需先选定一个对象再进行判断

    2.IF判断语句使用较多,但Select判断语句看起来较为简洁

     

    (3) IIF函数判断

    Sub 函数判断()
        Range("b1") = IIF(Range("a1")<=0,"负数或零","正数")
    End Sub

     

    转载于:https://www.cnblogs.com/eternal-immortal/p/9513548.html

    展开全文
  • VBA-判断语句之IF

    万次阅读 2018-11-08 15:28:51
    '判断语句IF单条件与多条件判断 Sub IF条件判断之单条件1() Dim a%, b% '声明变量 a = 2 '给变量赋值 b = 2 '给变量赋值 If a = b Then MsgBox "相等" '如果a等于b,就输入到窗口显示“相等” End Sub ...
  • Excel VBA条件编译语句

    2020-06-15 10:37:19
    作者:iamlaosong ...为了工具的兼容性,可以采用条件编译#If…Then…#Else语句。 Sub ttt() #If VBA7 Then MsgBox "VBA7" #If Win64 Then MsgBox "win64" #Else MsgBox "win32" #End If #Else
  • 基本语法 ...单行写法,同时且执行语句 If a < 20 Then [b2] = "good": [b3] = "yes" 单行 if else If a < 20 Then [b2] = "aa" Else [b2] = "bb" 其他的细节看这个人总结的吧...
  • VBA-判断语句之Select

    千次阅读 2018-11-08 16:01:46
    声明:笔记来源于我要自学网-《Excel VBA基础教程》-授课...Sub select单条件判断() i = 1 Select Case i Case Is &gt; 0 MsgBox "正数" Case Else MsgBox "负数" End Select End Sub S...
  • vba判断语句

    2019-09-03 23:20:42
    不等于<...If 条件Then 语句1 语句2 语句N End If 移动工作表位置 If ActiveSheet.Name = "Sheet1" Then ActiveSheet.Move after:=Sheets _ (Worksheets.Count) End If if then esle语句...
  • 因为在Excel中VBA是默认隐藏且禁止运行宏的,所以首先介绍如何在Excel中启用VBA,然后介绍基础的变量、常量与循环、判断语句
  • 语法,创建模板语法判断条件区间判断循环语句函数普通计算借用工作表函数。end语句Exit语句Exit SubExit functionExit forExit doGoto语句,gosub..return'on error resume next ''on error goto ''on error goto 0...
  • 什么是VBA VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件。 怎么使用Excel的VBA来处理处理重复性问题 Excel本身就自带...
  • 判断条件是这样的: 1、当C列中 a. 匹配UCF,则将C列值,写到E列,尾部添加“/带方形座”; b. …………(请见下图表,和a条件一样写到E列) [img=...
  • 今天遇到一个问题,结果发现是因为vba中if的判断条件中等号("=")无法完成赋值操作造成的。  举个栗子:    故应该在if之前就完成必要的赋值操作: 所以,if判断条件里的等号("=")只能用于判断相等,不能...
  • VBA-跳转语句

    千次阅读 2018-11-08 17:56:00
    声明:笔记来源于我要自学...注意_太的GoTo 语句,会使程序代码不容易阅读及调试。 尽可能使用结构化控制语句(Do...Loop、For...Next、If...Then...Else...) Sub gotoline() Dim str$ Dim k! 123: k = k + 1 If ...
  • VBA中的10种循环语句

    万次阅读 多人点赞 2019-04-17 12:00:31
    VBA中的10种循环语句 1、For – Next '循环数组 ArraySum = 0 For i = 1 To 10 ArraySum = ArraySum + MyArray(i) Next i 2、For Each – Next '循环单元格集合 SelectionSum = 0 For Each cell In Selection ...
  • Sub 处理专业代号() Dim i As Integer For i = 1 To 5 If Range("a" & i) = "文科" Then ... else if 判断条件n-1 then 返回结果n-1 else 返回结果 end if 单元格的写法 range(“a”&i)
  • 图5 高级筛选还可以处理条件,对于同一行中的条件关系为“AND”,对于不同行中的条件关系为“OR”。 提示 1. 在使用VBA代码进行复制操作时,我们不需要先选择想要复制的数据,也不需要选择或激活数据所在的工作...
  • VBA的区间判断

    千次阅读 2019-07-16 13:32:45
    VBA的时候,需要判断变量是不是在一个区间内,写成了下面的语句: If 1 <= countToP <= 6 Then ActiveWorkbook.Sheets(1).Cells(19, countToP + 2).Value = "[*] " & checkboxContent ElseIf countToP ...
  • VBA嵌套if语句

    千次阅读 2019-09-28 00:14:36
    一个If或ElseIf语句可以嵌套在另一个If...这使得VBScript能够轻松处理复杂的条件。 语法 以下是VBScript中嵌套的If语句的语法。 If(boolean_expression) Then Statement 1 ..... ..... Statement n ...
  • 目录 IF分支结构 逻辑运算符 逻辑运算符And,其语法: 逻辑运算符Or,其语法如下: ... 在VBA的分支结构中,最常用的就是IF...Then.Else结构,其语法为 If condition Then [statements][Else elsesta..
  • ExcelVBA的Do,while语句

    2021-05-09 12:37:31
    Do While循环条件
  • Excel VBA 基础部分 一、定义语句 '定义变量和分配存储空间 Dim [ WithEvents ] varname [ ( [ subscripts ] ) ] [ As [ New ] type ] . . . 部分 说明 withEvents 可选。该关键字指定varname是对象变量,...
  • 方法一: 通过循环,判断目标表是否存在 Function searchTable(TableName As String) As Boolean searchTable = False '默认不存在 Dim tbl As DAO.TableDef For Each tbl In CurrentDb.TableDefs If tbl.Name =...
  • 今天和给你分享的内容是使用VBA中的字典来实现多条件数据查询的功能。 如下图所示,表名为“明细表”的数据是各位英雄课程成绩的明细数据。 再如下图所示,表名为“查询表”的数据是需要查询的数据。 Sub DicFind()...
  • Excel VBA 笔记 使用IF进行逻辑判断

    千次阅读 2019-04-19 15:56:27
    使用IF进行逻辑判断 Range单元格对象 IF函数过程控制 使用IF退出For循环 小提示: 新建模块:右键Sheet、插入模块 运行:上面的三角形 注释:' 单引号 使用Range 控制单元格 直接写单元格:Range("a1") = ...
  • , switch case 条件判断8.循环do while退出循环的语句 exit for退出循环的语句 exit do9.数组10.二维数组11.操作单元格自定义vba脚本生成sql 最近公司有个需求,提前让数据库表结构在excel模板中设计,然后再建...
  • VBA-循环语句之Do...Loop

    千次阅读 2018-11-08 16:35:22
    Loop 循环语句,直到满足某个条件 Sub DoLoop基本示例() Dim a% Do a = a + 1 If a &gt; 10 Then MsgBox a &amp; "终于大于10" Exit Do End If Loop End Sub 实例应用:将大于...
  • VBA基础打卡

    2017-11-13 23:19:30
    vba
  • 数据类型判断、转化,对话框(弹框输入、提示,返回文件路径、文件夹),空的一些情况,正则表达式语法,其他常用语句

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,304
精华内容 521
关键字:

vba多条件判断语句