精华内容
下载资源
问答
  • 对于判断条件有多种分支情况,使用Select Case替代If嵌套是个不错选择,语法格式可以参考微软在线文档:[Select Case 语句]... 似乎语法格式和用法都很简单,但是实际使用过程中可能就不是那回事了。...

    对于判断条件有多种分支的情况,使用Select Case替代If嵌套是个不错的选择,语法格式可以参考微软在线文档:Select Case 语句

    似乎语法格式和用法都很简单,但是实际使用过程中可能就不是那回事了。下面示例来自于网友提问:下面的代码无论数组值如何变化,输出结果最多就到“运行5”,之后的分支永远无法执行。

    Sub demo1()
        Dim mxx(1 To 2), nxx(1 To 2)
        nxx(1) = 0: nxx(2) = 10
        mxx(1) = 0: mxx(2) = 100
        Select Case mxx(1)
        Case Is = nxx(1) And mxx(2) = nxx(2)
            Debug.Print "运行1"
        Case Is = nxx(1) And mxx(2) > nxx(2)
            Debug.Print "运行2"
        Case Is = nxx(1) And mxx(2) < nxx(2)
            Debug.Print "运行3"
        Case Is > nxx(1) And mxx(2) = nxx(2)
            Debug.Print "运行4"
        Case Is < nxx(1) And mxx(2) = nxx(2)
            Debug.Print "运行5"
        Case Is > nxx(1) And mxx(2) < nxx(2)
            Debug.Print "运行6"
        Case Is < nxx(1) And mxx(2) < nxx(2)
            Debug.Print "运行7"
        Case Is > nxx(1) And mxx(2) > nxx(2)
            Debug.Print "运行8"
        Case Is < nxx(1) And mxx(2) > nxx(2)
            Debug.Print "运行9"
        End Select
    End Sub
    

    其实网友之注意到有些Case分支没有执行,但是并没有注意到,即使被执行的分支,结果也不一定是对的。例如上述代码中

        nxx(1) = 0: nxx(2) = 10
        mxx(1) = 0: mxx(2) = 100
    

    很明显 mxx(1) = nxx(1) And mxx(2) > nxx(2),应该是希望其使用如下的Case分支,但是运行结果却是运行1

    Case Is = nxx(1) And mxx(2) > nxx(2)
        Debug.Print "运行2"
    

    为什么会出现这个结果呢?这位网友没有理解Case语句的用法,第一个Case分支相当于If mxx(1) = (nxx(1) And mxx(2) = nxx(2)),此时将相关值代入其中,因此条件表达式变为mxx(1) = (0 And 10 > 100),进而简化为mxx(1) = 0,第一个分支条件满足,所以输出结果为运行1,然后执行End Select。由于类似的原因,后续几个分支不可能被执行。

    从代码过程分析,可以看出这位网友希望实现的是根据两个数组元素的大小关系,进而执行不同的操作,那么应该使用如下代码。

    Sub demo()
        Dim mxx(1 To 2), nxx(1 To 2)
        nxx(1) = 0: nxx(2) = 10
        mxx(1) = 0: mxx(2) = 100
        Select Case True
        Case mxx(1) = nxx(1) And mxx(2) = nxx(2)
            Debug.Print "运行1"
        Case mxx(1) = nxx(1) And mxx(2) > nxx(2)
            Debug.Print "运行2"
        Case mxx(1) = nxx(1) And mxx(2) < nxx(2)
            Debug.Print "运行3"
        Case mxx(1) > nxx(1) And mxx(2) = nxx(2)
            Debug.Print "运行4"
        Case mxx(1) < nxx(1) And mxx(2) = nxx(2)
            Debug.Print "运行5"
        Case mxx(1) > nxx(1) And mxx(2) < nxx(2)
            Debug.Print "运行6"
        Case mxx(1) < nxx(1) And mxx(2) < nxx(2)
            Debug.Print "运行7"
        Case mxx(1) > nxx(1) And mxx(2) > nxx(2)
            Debug.Print "运行8"
        Case mxx(1) < nxx(1) And mxx(2) > nxx(2)
            Debug.Print "运行9"
        End Select
    End Sub
    

    【代码解析】
    主要有两个变化

    1.Select Case True不在此使用变量
    2.每个Case分支使用一个And条件表达式

    运行代码可以得到正确的结果。

    展开全文
  • 学习资源:《Excel VBA从入门到进阶》第72集 by兰色幻想这节课来详细讲解Select语句。Select 字段 from 表 where 条件例:从sheet1中筛选全部数据。* 表示全部字符,无条件可以省略where。Select * from [sheet1$]...

    学习资源:《Excel VBA从入门到进阶》第72集 by兰色幻想

    这节课来详细讲解Select语句。

    Select 字段 from 表 where 条件

    例:从sheet1中筛选全部数据。

    * 表示全部字符,无条件可以省略where。

    Select * from [sheet1$]

    如果是对表中特定单元格区域进行查找,可以在[sheet1$]的$后面加单元格区域。

    在开讲之前,先在类模块写好打开数据库、复制筛选后的数据到单元格区域和关闭数据库的代码,以便后续可直接调用和增加代码可读性。

    类模块命名为数据库,三个属性的名称分别为Excel数据库、Access数据库、执行筛选。

    Property Get Excel数据库()

    Excel数据库 = "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.path & "/Database/CangKu.xls"

    End Property

    Property Get Access数据库()

    Access数据库 = "provider=Microsoft.jet.OLEDB.4.0;data source=" & ThisWorkbook.path & "/Database/CangKu.mdb"

    End Property

    Sub 执行筛选(Mydata As String, sq As String) '参数有数据库Mydata和地址sq

    Dim conn As New Connection

    Dim rst As New Recordset

    With ActiveSheet 'Sheets("sheet1")

    .Range("a2:i100") = "" '清空单元格区域

    conn.Open Mydata '打开数据库

    .Range("a2").CopyFromRecordset conn.Execute(sq) '把数据复制到单元格中

    End With

    conn.Close '关闭数据库

    Set conn = Nothing '释放对象

    End Sub

    本节课所用的数据库是

    一、按条件筛选按条件筛选——数字条件

    直接用对比符号,><=

    例1:在sheet1中筛选销售单价>100的数据。

    Sub 按条件筛选1()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select * from [sheet1$] Where 销售单价 > 100"

    data.执行筛选 data.Excel数据库, sql

    End Sub

    2. 按条件筛选——字符条件

    注意:字符条件是文本字符要用单引号括起来。

    例2:在sheet1中筛选物品名称为'挡泥板'的数据。

    Sub 按条件筛选2()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select * from [sheet1$] Where 物品名称 ='挡泥板'"

    data.执行筛选 data.Excel数据库, sql

    End Sub

    3. 按条件筛选——日期条件

    日期条件前后要加#号。

    例3:在sheet1中筛选出库日期是2005-1-4的数据。

    Sub 按条件筛选3()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select * from [sheet1$] Where 出库日期 =#2005-1-4#"

    data.执行筛选 data.Excel数据库, sql

    End Sub

    4. 按条件筛选——区间条件

    between 条件1 and 条件2

    例4:在sheet1中筛选出库日期在2005-1-4至2005-1-10之间的数据。

    Sub 按条件筛选4()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select * from [sheet1$] Where 出库日期 between #2005-1-4# and #2005-1-10#"

    data.执行筛选 data.Excel数据库, sql

    End Sub

    5. 按条件筛选——多个条件

    用and、OR连接

    例5:在sheet1中筛选出库日期在2005-1-4至2005-1-10之间且销售单价大于100的数据。

    Sub 按条件筛选5()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select * from [sheet1$] Where 出库日期 between #2005-1-4# and #2005-1-10# and 销售单价>100"

    data.执行筛选 data.Excel数据库, sql

    End Sub

    6. 按条件筛选——模糊条件

    %表示任意多个字符,_(下划线)表示单个占位符

    例6:在sheet1中筛选出物品名称含扶手的数据。

    Sub 按条件筛选6()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select * from [sheet1$] Where 物品名称 like '%扶手%'"

    data.执行筛选 data.Excel数据库, sql

    End Sub

    7. 按条件筛选——插入变量

    注意:变量也要用单引号括起来。

    例7:在sheet1中筛选出物品名称为挡泥板的数据。

    Sub 按条件筛选7()

    Dim sql As String

    Dim data As New 数据库

    Dim sr

    sr = "挡泥板"

    sql = "Select * from [sheet1$] Where 物品名称 ='" & sr & "'"

    data.执行筛选 data.Excel数据库, sql

    End Sub

    8. 按条件筛选——在字符串组里

    in('字符1','字符2',……)

    例8:在sheet1中筛选出物品名称为车衣和扶手箱的数据。

    Sub 按条件筛选8()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select * from [sheet1$] Where 物品名称 in('车衣','扶手箱')"

    data.执行筛选 data.Excel数据库, sql

    End Sub

    9. 按条件筛选——借用函数

    例9:在sheet1中筛选出物品代码前三位是028的数据。

    Sub 按条件筛选9()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select * from [sheet1$] Where left(物品代码,3)='028'"

    data.执行筛选 data.Excel数据库, sql

    End Sub

    二、筛选方式

    筛选方式是指结果的样式。

    1. 筛选全部字段

    *表示全部字段

    例10:在ChuKu中筛选全部数据。

    Sub 筛选全部字段()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select * from ChuKu"

    data.执行筛选 data.Access数据库, sql

    End Sub

    2. 筛选指定字段

    在from前面列出要显示的所有字段,如果要跳过的用"""" (两对双引号),中间那一对是系统要识别的,双引号里面没有东西表示是空值,外面那对双引号的因为里面的双引号不是字段名,所以要加上双引号。

    例11:在ChuKu中筛选指定字符:出库日期、物品名称、单位。

    Sub 显示指定字段()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select """",出库日期,"""",物品名称,"""",单位 from ChuKu"

    data.执行筛选 data.Access数据库, sql

    End Sub运行结果,只展示出库日期、物品名称和单位这三个字段,其他字段列为空。

    3. 筛选不重复的

    Distinct 字段名 '筛选不重复的记录

    例12:在ChuKu中对物品代码列进行筛选不重复的数据。

    Sub 不重复筛选()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select Distinct """",物品代码 from ChuKu"

    data.执行筛选 data.Access数据库, sql

    End Sub运行结果

    4. 筛选前N个

    ① 只显示前N个记录

    TOP N

    例13:筛选ChuKu前10个数据。

    Sub 筛选前10个() '按个数筛选

    Dim sql As String

    Dim data As New 数据库

    sql = "Select top 10 * from ChuKu"

    data.执行筛选 data.Access数据库, sql

    End Sub

    ② 显示前百分之N的记录

    Top N percent

    例14:筛选ChuKu前10%的数据。

    Sub 筛选百分之N() '按百分比筛选

    Dim sql As String

    Dim data As New 数据库

    sql = "Select top 30 Percent * from ChuKu"

    data.执行筛选 data.Access数据库, sql

    End Sub

    5. 格式化显示的结果

    对筛选的字段用函数进行进一步的处理和格式化。

    例15:在ChuKu中筛选指定字符:ID和出库日期,而且出库日期的格式设置为yyyy-mm-dd。

    Sub 格式化字段()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select ID,Format(出库日期,""yyyy-mm-dd"") from ChuKu"

    'yyyy-mm-dd是文本字符串,需要加两对双引号

    data.执行筛选 data.Access数据库, sql

    End Sub出库日期的格式从yyyy/mm/dd变成yyyy-mm-dd

    6. 对筛选后的结果排序Desc 降序

    Asc 升序

    如果写两个排序条件的话,按写的顺序觉得排序条件优先级。

    例16:在ChuKu中筛选全部字符,且按出库日期升序,按销售日期降序排列。

    Sub 排序() '

    Dim sql As String

    Dim data As New 数据库

    sql = "Select * from ChuKu Order by 出库日期 asc,销售单价 desc"

    data.执行筛选 data.Access数据库, sql

    End Sub

    例17:在ChuKu中先按出库日期升序,按销售单价降序排列,然后筛选出前十个数据。

    Sub 筛选销售数量前10() '

    Dim sql As String

    Dim data As New 数据库

    sql = "Select Top 10 * from ChuKu Order by 出库日期 asc,销售单价 desc"

    data.执行筛选 data.Access数据库, sql

    End Sub

    7. 分组显示Group by 可以配合函数进行分组求和,分组求最大值等.

    例18:在ChuKu中对相同的物品代码的出库数量进行求和。

    Sub 分组()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select """","""",物品代码,"""","""","""",sum(出库数量) from ChuKu group by 物品代码"

    data.执行筛选 data.Access数据库, sql

    End Sub运行结果

    例19:在ChuKu中对相同的物品代码的出库数量进行求和,并只显示出库数量合计大于3的数据。

    Sub 按条件显示分组记录()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select """","""",物品代码,"""","""","""",sum(出库数量) from ChuKu group by 物品代码 HAVING sum(出库数量)>=3"

    data.执行筛选 data.Access数据库, sql

    End Sub运行结果

    三、SQL函数应用

    1. Sum函数求和,Count计数

    例20:在ChuKu中筛选出物品代码是0270001的,并对其ID计数,出库数量求和。

    Sub 求和()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select count(ID),"""","""","""","""","""",sum(出库数量) from ChuKu where 物品代码='0270001'"

    data.执行筛选 data.Access数据库, sql

    End Sub

    2. left,right,mid,instr,format文本函数

    例21:在ChuKu中筛选出物品代码,并展示它的前三位数字,后四位数字,顺数第二位开始的两位数,物品代码中“1”所在的位置。

    Sub 文本()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select 物品代码, ""左三位:"" & left(物品代码,3),right(物品代码,4),mid(物品代码,2,2),instr(物品代码,""1"") from ChuKu"

    data.执行筛选 data.Access数据库, sql

    End Sub运行结果

    3. year,month,day,datediff,DateSerial日期函数datediff VBA函数,返回两个日期之间的时间。

    DateSerial 可以把指定的年、月、日合并为日期。

    例22:在ChuKu中筛选出出库日期,并展示它的年份,月份,日期,出库日期与当前日期的年份差。

    Sub 日期()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select 出库日期, year(出库日期),month(出库日期),day(出库日期),DateDiff(""yyyy"",出库日期,now) from ChuKu"

    data.执行筛选 data.Access数据库, sql

    End Sub

    4. max,min,first,last 最值函数first 筛选到的第一条记录

    last 筛选到的最后一条记录

    例23:在ChuKu中筛选物品名称,并展示它的最小销售金额。

    Sub 最小值()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select 物品名称,min(销售金额) from ChuKu group by 物品名称"

    data.执行筛选 data.Access数据库, sql

    End Sub

    例24:在ChuKu中筛选物品名称,并展示它的最后一条销售金额。

    Sub 最新值()

    Dim sql As String

    Dim data As New 数据库

    sql = "Select 物品名称,last(销售金额) from ChuKu group by 物品名称"

    data.执行筛选 data.Access数据库, sql

    End Sub

    展开全文
  • VBA 关于 select 和 active 区别

    千次阅读 2020-02-03 21:30:11
    select可以选择各种各样对象 select wb/ sh/ range /cell /chart等等 active 各种当前激活都算active select可以同时 select多个, active一般同时只有1个 对于sheet与range对象select可以同时选择多个,而...

     

     

    • select可以选择各种各样的对象
    • select wb/ sh/ range /cell /chart等等
    • active 各种当前激活的都算active
    •  
    • select可以同时 select多个,  active一般同时只有1个
    • 对于sheet与range对象select可以同时选择多个,而active同时只能激活一个。
    •  
    • select不能选择隐藏的对象
    • select不能选择隐藏的对象,而active可以激活隐藏的对象。
    •  
    • 对于range("a1:b5").select,使用select方法可以选择这个区域的10个单元格,并使A1格处于激活状态;而range("a1:b5").active只能激活A1单元格,而不能让剩余的9个单元格处于激活准状态。

     

    .active

    .activate

     

    Sub t1()
    
    Worksheets("sheet4").Select
    Worksheets("sheet3").Activate
    MsgBox "The selection object type is " & TypeName(Selection)
    
    End Sub
    

     

    展开全文
  • 继续往下Dim sql As Stringsql = 'select * from [source$] where [姓名]='张三''不知道各位通过我们赋予sql这个变量内容,是否可以猜出这个语句将要做事情?对,我们要从Excel文件中,表单名称叫做source页面...

    继续往下

    Dim sql As String

    sql = 'select * from [source$] where [姓名]='张三''

    不知道各位通过我们赋予sql这个变量的内容,是否可以猜出这个语句将要做的事情?对,我们要从Excel文件中,表单名称叫做source的页面里,挑选出所有姓名叫做张三的数据,source内容如下

    122536880_5_201801210747143

    如果我没猜做,经过系统的筛选,应该可以定位到第一行数据了,我们继续。

    rs.Open sql, conn

    Sheets('result').Range('a2').CopyFromRecordset rs

    rs就是我们之前声明过的一个recordset,他的用处就是帮助ADO来暂时保存返回的数据,我们在rs.open后给出了两个参数,第一个是我们的查询语句,第二个是设定好的连接。再之后的一句,我们将数据从rs中,复制到了result的界面中,看一下结果。

    122536880_6_2018012107471481

    由于这只是一个范例,我们做的相对有些许的粗糙,没有将列名同时生成出来,通过代码,一样可以随心所欲的设置,不信?我们来加深一些难度。

    接下来,希望大家可以一起动手,来搜索出所有语文大于80或者数学大于70的同学的姓名以及班级,对,我们就拿其中的两列,其他的内容不用动,我们只需要更新一下sql语句以及将列名生成出来。

    首先增加列名,太简单了,我相信之前学过的朋友们都可以写的出

    Sheets('result').Cells(1, 1) = '姓名'

    Sheets('result').Cells(1, 2) = '班级'

    那么sql语句如何改写呢?是不是感觉这句话就在嘴边,但是真的让你写的时候,又有些无从下手,对,这就是因为,写!得!少!

    展开全文
  • ExcelVBASelect Case

    2020-06-06 02:47:52
    关键字Select Case和End Select之间放置任意多个条件以测试。子句Case Else是可选,当你希望可能有条件表达式返回假时使用它。在Select Case语句里,VB将每个表达式和测试表达式相比较。 Sub TestButtons() ...
  • vba range select 方法无效

    千次阅读 2012-06-26 23:41:18
    vba 中在range使用select方法时,需要先激活range所在sheet,如果sheet没有被激活,使用range.select方法会痴线1004, 方法无效错误。 激活sheet,可以使用Activate方法。
  • strSql = ""strSql = strSql &... " select max(number) from dbo.#DATA" & vbCrLfrss.Open strSql, cnn numb = rss.Fields(0)rss.Close 转载于:https://www.cnblogs.com/zigewb/archive/2013/02/06/2900645.htm...
  • 题目如下: 用VBA代码实现选中A2:B10单元格 且往后 每隔4个单元格间距,选中E2:F10, I2:J10,M2:N10 ........以此类推循环执行选中后面所有单元格区域,循环500次。 因为UNION只能连接30个单元格区域,select...
  • VBA-Select Case语句教程

    千次阅读 2012-04-24 10:00:32
    为了避免难以弄清复杂嵌套If语句,你可以使用Select Case语句代替。它语法为: Select Case 测试表达式 Case 表达式1 如果表达式1匹配测试表达式语句 Case 表达式2 如果表达式2匹配测试表达...
  • 它花了我一天大部分时间,但我已经想到了这一点.这是代码:Sub Excel_QueryTable()Sheet2.Cells.ClearContentsDim oCn As ADODB.ConnectionDim oRS As ADODB.RecordsetDim ConnString As StringDim SQL As String...
  • 应用于Shape 和 ShapeRange对象 Select方法。 选定指定对象。 语法 expression.Select(Replace),expression 必需。该表达式返回以上一个对象。 表达式 一个代表 Range 对象变量。 Replace V...
  • VBA 控制流程select

    2012-04-18 02:22:05
    VBA编辑器中,F2激活对象管理器 F5直接运行到断点。F8单步运行下一语句。 IIf(what,v1,v2) =c语言 what?v1:v2 当一个if不能实现所有判断时,可以使用elseif Select Case x case value1 case ... ...
  • VBA中Activate方法和Select方法区别

    千次阅读 2017-07-06 16:12:15
    VBAActivate方法和Select方法看起来似乎相同,其实二者是有区别。Activate方法作用是激活,而Select方法作用是选择。其区别如下:  1.对于“Sheets”对象  Sheets.Select可以同时选择多个工作表,而...
  • 实际上,用户还可以通过编写简单的VBA程序来实现这种操作,下面介绍通过VBA程序来实现Excel表格翻页具体操作方法。1、启动Excel 2013并打开工作表,按“Alt+F11”键打开Visual Basic编辑器。创建1个模块,然后在该...
  • VBA-判断语句之Select

    千次阅读 2018-11-08 16:01:46
    Select Cate 语句 根据表达式值, 来决定执行几组语句中其中之一。 Sub select单条件判断() i = 1 Select Case i Case Is &gt; 0 MsgBox "正数" Case Else MsgBox "负数" End ...
  • On this site I am able to select the country and language from dropdown menu but when I click on "Complete new application form" button. It says fields are empty.Any help would be appreciated.Sub Test...
  • excel表格翻页 通过VBA程序来实现Excel表格翻页方法,看到标题你是不是很兴奋,这不就是你想学习知识吗?当你掌握excel表格翻页这个知识时候你一定很兴奋,一定不会后悔看了excel表格翻页 通过VBA程序来实现...
  • 当我的VBA脚本无法确定要使用哪个工作表时,它将打开一个Excel对话框:"选择表"。 这是太棒了! 如何以编程方式控制并使用" Sheet Select"对话框?我正在写一个使用Application.FileDialog(msoFileDialogFilePicker)...
  • 遇事不决,量子力学。各行各业,都有自己玄学。...之前对于PQ不甚了解,经过一个月深度体验,我也成功将几个实践中小项目从VBA改写为PQ,其中包括上期实战中项目。杨风飒:Excel VBA 实战(...
  • 学习资源:《Excel VBA从入门到进阶》第72集 by兰色幻想这节课来详细讲解Select语句。Select 字段 from 表 where 条件例:从sheet1中筛选全部数据。 * 表示全部字符,无条件可以省略where。Select * from [sheet1$]...
  • 实际上,还可以通过编写一行简单的VBA代码实现这种功能。下面我们来看看具体操作。1、启动Excel并打开工作表,按“Alt+F11”键打开Visual Basic编辑器。创建1个模块,然后在该模块代码窗口中创建两个过程并分别...
  • 大家好,今日继续和大家分享VBA编程中常用常用"积木"过程... 232:使用Intersect方法和Union方法指定专属区域范围才可以响应触发事件方法VBA过程代码231:判断连续区域触发过程Private Sub Worksheet_Select...
  • VBA第5课 select多条件判断

    万次阅读 2015-05-01 11:40:05
    Sub select多条件判断() Select Case Sheet1.[b1].Value Case Is > 0 MsgBox "大于0" Case Else MsgBox "小于或等于0" End Select End Sub Sub select多条件判断2() Select Case Sheet1.[b1].Value Case "12" Sheet...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 555
精华内容 222
关键字:

vba的select