VBA经典应用69例:基于文本条件的一般筛选及条件OR筛选

VBA语言専攻 2024-01-23 18:39:16

《VBA经典应用69例》(版权10178981),是我推出的第九套教程,教程是专门针对初级、中级学员在学习VBA过程中可能遇到的案例展开,这套教程案例众多,紧贴“实战”,并做“战术总结”,以便大家能很好的应用。教程的目的是要求大家在实际工作中要利用好VBA。本套教程共三册六十九个专题,今日内容:VBA经典应用69例:基于文本条件的一般筛选及条件OR筛选

【分享成果,随喜正能量】感恩入怀,一种平和的情愫在血液中缓缓流淌,云卷云舒,去留无意,花开花落,不再黯然神伤。如此境界,仿似置身于云水禅心之境,一念清幽,何惧风雨,细细品味时光的静好,不言山高水远,只念风过留香。。

应用4 VBA中的自动筛选(Autofilter)

大家好,我们这个专题讲解VBA中的自动筛选(Autofilter),一般情况下,我们学习VBA之前都比较熟悉了Excel的利用,为了进一步提高效率,才学习VBA,把VBA宏派上用场。在Excel工作表中,我们可以轻松地根据标准功能,使用"数据"菜单内的"筛选"功能,完成多种多样的筛选以处理各式各样的信息。我们这讲的内容是利用VBA完成自动筛选。

对于应用而言,从小数据集合中过滤掉必要的信息可以使用"筛选"功能。但是,如果你希望根据多个标准和条件过滤大量数据,利用VBA自动过滤器功能可以更轻松。它可以为你节省大量的时间和精力。例如,假设你希望筛选下拉列表中的某些信息(基于多个标准),然后将结果复制/粘贴到其他工作表中。如果手动完成,这似乎是一项非常耗时的任务。在这种情况下,VBA可以帮助你自动化完成这个过程。

2 基于文本条件的一般筛选数据

我们看下面的工作表:

让我们来研究一下上图中给出的数据集。假设我们希望根据"性别"列筛选上述数据集。要实现此筛选,并得到“性别=男”的数据,我们将以以下方式编写代码:

Sub mynzA()

'清空数据

Sheets("SHEET1").Select

Cells.ClearContents

With Sheets("Sheet2").Range("A1")

'筛选需要的数据

.AutoFilter Field:=3, Criteria1:="男", VisibleDropDown:=False

'将筛选后的数据复制到指定位置

.SpecialCells(xlCellTypeVisible).Copy Sheets("SHEET1").Range("A1")

'去掉筛选

.AutoFilter

End With

End Sub

代码截图:

代码的解读:

① With Sheets("Sheet2").Range("A1")

.AutoFilter Field:=3, Criteria1:="男", VisibleDropDown:=False

以上代码是以相对于“A1”开始,从左侧字段开始的第三个字段设为筛选字段。查找的是此字段的值为“男”的数据

② '将筛选后的数据复制到指定位置

.SpecialCells(xlCellTypeVisible).Copy Sheets("SHEET1").Range("A1")

以上代码将筛选后的数据复制到Sheets("SHEET1").Range("A1")。其中

Range.SpecialCells方法返回一个Range对象, 该对象代表与指定类型和值匹配的所有单元格。

语法:expression.SpecialCells (Type, Value)

其中expression 一个表示 Range 对象的变量。

参数:

a Type 必需 XlCellType 要包含的单元格。

b Value 可选 Variant 如果Type为xlCellTypeConstants或xlCellTypeFormulas, 则此参数用于确定要在结果中包含哪些类型的单元格。将这些值相加可返回多种类型的单元格。默认情况下,将选择所有常量或公式,无论类型如何。

XlCellType 枚举值:

1) xlCellTypeAllFormatConditions -4172 任意格式的单元格。

2) xlCellTypeAllValidation -4174 含有验证条件的单元格。

3) xlCellTypeBlanks 4 空单元格。

4) xlCellTypeComments -4144 含有注释的单元格。

5) xlCellTypeConstants 2 含有常量的单元格。

6) xlCellTypeFormulas -4123 含有公式的单元格。

7) xlCellTypeLastCell 11 所用区域中的最后一个单元格。

8) xlCellTypeSameFormatConditions -4173 格式相同的单元格。

9) xlCellTypeSameValidation -4175 验证条件相同的单元格。

10)xlCellTypeVisible 12 所有可见单元格。

SpecialCells(xlCellTypeVisible).Copy 是指可以复制所有可见的单元格

③ '去掉筛选

.AutoFilter

在原数据中去除筛选格式。

最后我们看代码的运行结果:

3 同一列中条件OR的筛选

仍是上表中的数据:

我们要取得年龄为12和8的数据,利用VBA该如何得到呢?

看我给出的代码:

Sub mynzB()

'清空数据

Sheets("SHEET1").Select

Cells.ClearContents

With Sheets("Sheet2").Range("A1")

'筛选需要的数据

.AutoFilter Field:=2, Criteria1:=12, Operator:=xlOr, Criteria2:=8, VisibleDropDown:=False

'将筛选后的数据复制到指定位置

.SpecialCells(xlCellTypeVisible).Copy Sheets("SHEET1").Range("A1")

'去掉筛选

.AutoFilter

End With

End Sub

代码截图:

代码解读:

① '筛选需要的数据

.AutoFilter Field:=2, Criteria1:=12, Operator:=xlOr, Criteria2:=8, VisibleDropDown:=False

以上代码是取得Criteria1 Or Criteria2的值。

代码的运行效果:

本讲内容参考程序文件:应用003.xlsm

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

0 阅读:9