VBA-Range.AutoFilter 方法浅析

6 篇文章 0 订阅

VBA-Range.AutoFilter 方法的一些“坑”

学到筛选的时候遇到一些小小的“坑”,记录下。

  • 录制出来的宏是这样的,
Sub1()
' 宏1 宏
    Rows("1:1").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$F$1048").AutoFilter field:=4, Criteria1:="财务部"
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Copy
    Sheets("财务部").Select
    Range("A1").Select
    ActiveSheet.Paste
End Sub
  • Criteria1
    自己手动写这段代码的时候,Criteria1写成Criterial,一运行就出错了。
    报错提示
    查了好久没发现问题,后来上网查才知道,Criteria1后面是阿拉伯数字1!Criteria1后面是阿拉伯数字1!Criteria1后面是阿拉伯数字1!
      

  • ??.SpecialCells
    .SpecialCells可以很明显看出,这是选特定单元格的,但是前面怎么写呢?
    录制的代码是这样,非常啰嗦,那么自己写怎么写呢?

 Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select

琢磨很久,摸索出几种写法
(1)粗暴的把所有数据都写上

Range("a1:f1048").AutoFilter field:=4, Criteria1:="销售2部"
Range("a1:f1048").SpecialCells(xlCellTypeVisible).Select
Selection.Copy Sheet10.Range("a1")
'可以简写成下面
Sheet1.Range("a1:f" & k).AutoFilter field:=4, Criteria1:=sht.Name
Range("a1:f" & k).SpecialCells(xlCellTypeVisible).Copy Sheets(sht.Name).Range("a1")

(2)选一个单元格,筛选后默认就是选中筛选后的数据

Sheet1.Range("a1").AutoFilter field:=4, Criterial1:="销售2部"
Selection.SpecialCells(xlCellTypeVisible).Copy Sheet10.Range("a1")

(3)用with貌似更方便些

   Range("a1").Select
   With Selection
        .AutoFilter field:=4, Criteria1:="一车间"
        .SpecialCells(xlCellTypeVisible).Copy Sheets("一车间").Range("A1")

- 官方文档解析

查看了该方法的描述,很详细,更糊涂了😂
一条一条慢慢来看额。

语法
expression.AutoFilter (Field, Criteria1, Operator, Criteria2, SubField, VisibleDropDown)
expression:一个返回 Range 对象的表达式。

在这里插入图片描述
Field、Criteria1、Criteria2,没什么好讲的,看一下就知道了;至于显示筛选箭头,默认true显示,一般没必要改成false。
在这里插入图片描述

  • Operator 操作符
    一个指定筛选器类型的 XlAutoFilterOperator 常量。??我也看不懂;
    那么看个例子,筛选介于50到100间的数字:
 Selection.AutoFilter
       ActiveSheet.Range("$A$1:$F$1048").AutoFilter Field:=6, Criteria1:=">=50", Operator:=xlAnd, Criteria2:="<=100"
       

看了例子一下就明白很多了吧;其实用大白话讲就是,条件1+操作符+条件2 = 复合筛选条件,可以做更复杂的筛选。

照搬官方的解释,11种,用到的时候再翻文档吧,记是肯定记不住的。
在这里插入图片描述

  
  

  • Subfield 子域

subfield,这个是针对新增的特殊数据类型(股票和地理)有效,一个单元格里的数据可包含多项数据,365和web版限定参数。如果使用过可以留言详细说下,谢谢,这里就pass了。
在这里插入图片描述
在这里插入图片描述
以上。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值