Excel VBA 多条件筛选 AdvancedFilter 汇总统计 sumproduct Range与Array交换
在日常工作中,面对Excel表格数据,为了分类进行统计,通过对表格数据筛选获取分类条目,再按条目实行汇总统计。要完成上面的工作,有人工操作和开发程序两种方法,本文通过一个有10000行数据的管线调查表,对不同管径、管材进行分类统计数量和长度,详细介绍人工操作和VBA程序开发这两种方法。
1、人工操作方法
1.1高级筛选
Excel菜单:数据-高级 找开高级筛选对话框,如下图:
对话框中: 方式:将筛选 结果复制到其他位置
列表区域: 选择需要筛选 的区域
复制到:筛选结果粘贴位置(没有数据的空白区域)
选择不重复的记录:打钩
确定后得到的结果如下图
1.2分类统计
在P2单元格输入公式:=SUMPRODUCT((H:H=N2)*(I:I=O2),L:L)
在Q2单元格输入公式:=SUMPRODUCT((H:H=N2)*(I:I=O2))
以此类推就可以计算出所有统计数据
2、VBA编程的方法
虽然人工操作方法也很方便,但当我们利用程序处理一系列复杂工作的同时,要进行分类统计时,就无法使用人工操作方法了。所以还要讨论一下编程的方法。利用Excel的VBA二次开发编写程序,实现多条件筛选分类统计可以有多种方法,本文介绍宏表函数法的数组法二种方法。
2.1宏表函数法
宏表函数法就是人工操作法录制宏,再对宏进行修改的方法。先做统计条目的筛选,对筛选结果进行排序,最后进行统计计算。代码如下:
Sub 多条件筛选汇总统计() '利用宏表函数进行多条件筛选汇总统计用约:最大行设10000时0.1秒;用整列计算用时1.46秒
Dim 筛选数据区域 As Range
Dim 复制区域 As Range
Dim 总长 As Double
Sheets("Sheet1").Select
sngStart = Timer
Set 筛选数据区域 = Range(Cells(1, 8), Cells(10000, 9))
Range(Cells(1, 14), Cells(30, 17)).Clear
Set 目标区域 = Range(Cells(1, 14), Cells(1, 14))
筛选数据区域.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=目标区域, Unique:=True
With ActiveSheet.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("N2:N10000"), SortOn:=0, Order:=1, DataOption:=0
.SortFields.Add Key:=Range("O2:O10000"), SortOn:=0, Order:=1, DataOption:=0
.SetRange Range("N2:O10000")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin 'xlPinYin 表示按照首字母 排序 xlStroke 表示按每个字符的笔划数量排序。
.Apply
End With
i = 2
Do While Cells(i, 14) <> "" '利用宏表函数进行统计汇总
'预先能知道最大值时,条件式及统计项均使用最大值,可提高运算速度,用时 0.1 秒
Cells(i, 16) = "=SUMPRODUCT((R2C8:R20000C8=R" + Trim(str(i)) + "C14)*(R2C9:R20000C9=R" + Trim(str(i)) + "C15),R2C12:R20000C12)"
Cells(i, 17) = "=SUMPRODUCT((R2C8:R20000C8=R" + Trim(str(i)) + "C14)*(R2C9:R20000C9=R" + Trim(str(i)) + "C15))"
'预先不知道有多少行时,条件式及统计项均使用整列,会降低运算速度,用时 1.46 秒
'Cells(i, 16) = "=SUMPRODUCT((C8:C8=R" + Trim(str(i)) + "C14)*(C9:C9=R" + Trim(str(i)) + "C15),C12:C12)"
'Cells(i, 17) = "=SUMPRODUCT((C8:C8=R" + Trim(str(i)) + "C14)*(C9:C9=R" + Trim(str(i)) + "C15))"
i = i + 1
Cells(i, 16) = WorksheetFunction.Sum(Range(Cells(2, 16), Cells(i - 1, 16)))
Cells(i, 17) = WorksheetFunction.Sum(Range(Cells(2, 17), Cells(i - 1, 17)))
Debug.Print "耗费时间: " & Timer - sngStart
Cells(1, 14) = "管径"
Cells(1, 15) = "材质"
Cells(1, 16) = "长度 m"
Cells(1, 17) = "数量"
Cells(i, 15) = "合计:"
End Sub
***利用宏表函数进行条件筛选的结果只能复制到工作表的区域内,无法利用变量接收。
理解宏表函数的语法对于宏表函数中动态地址的处理很重要,现在解释一下统计宏表函数的含义:
"=SUMPRODUCT((R2C8:R20000C8=R" + Trim(str(i)) + "C14)*(R2C9:R20000C9=R" + Trim(str(i)) + "C15),R2C12:R20000C12)"
上面这句代码其实就是一段符合宏表函数语法的字符串,他等同于下面的字符串。
=SUMPRODUCT(
(R2C8:R20000C8=R2C14
)*(
R2C9:R20000C9=R2C15
),
R2C12:R20000C12
)
红色部份是一个查询条件,意思是:第8列的第二行到20000行=第14列第2行,也应是说(管径=“400”)
绿色部份也是一个查询条件,意思是:第9列的第二行到20000行=第15列第2行,也应是说(管材=“塑料”)
黄色部份是需要统计的区域,这时是统计符合条件的管线长度。
统计数量时,不需要统计区域。
***查询条件还可以更多,每个查询条件用小括号括起来,两个条件中间用
“*”
相连接。
***查询条件中,把数值转化为字符串,一定要去除两端的空串,如
Trim(str(i)),
否则会出错。
2.2数组法
数组法是纯编程的方法,创建动态数组,筛选出唯一的统计条目,同时进行数据的统计,最后对结果进行排序,使统计结果按排序的要求顺序输出,本例是升序。代码如下:
Sub 综合数组分类统计() '数组排序用时约 0.14 秒,内置函数排序用时约 0.031秒。
Dim i As Integer, j As Integer
Dim 总长 As Double, 数量 As Integer
Dim str(3)
Dim DataV(), js As Integer
On Error Resume Next
Sheets("Sheet1").Select
Dim sngStart As Single: sngStart = Timer
'筛选并排序:管径分类,材质分类
js = 0
i = 2
Do While Cells(i, 1) <> ""
For j = 1 To js
If Cells(i, 8) = DataV(0, j) And Cells(i, 9) = DataV(1, j) Then
DataV(2, j) = DataV(2, j) + Cells(i, 12)
DataV(3, j) = DataV(3, j) + 1
GoTo 20
End If
js = js + 1
ReDim Preserve DataV(3, js)
DataV(0, js) = Cells(i, 8)
DataV(1, js) = Cells(i, 9)
DataV(2, js) = Cells(i, 12)
DataV(3, js) = 1
20: i = i + 1
'数组排序
Dim m1 As String, m2 As String
For i = 1 To js
For j = 1 To js - 1
m1 = DataV(0, j) + "|" + DataV(1, j)
m2 = DataV(0, j + 1) + "|" + DataV(1, j + 1)
If m1 > m2 Then
str(0) = DataV(0, j): DataV(0, j) = DataV(0, j + 1): DataV(0, j + 1) = str(0)
str(1) = DataV(1, j): DataV(1, j) = DataV(1, j + 1): DataV(1, j + 1) = str(1)
str(2) = DataV(2, j): DataV(2, j) = DataV(2, j + 1): DataV(2, j + 1) = str(2)
str(3) = DataV(3, j): DataV(3, j) = DataV(3, j + 1): DataV(3, j + 1) = str(3)
End If
Range(Cells(1, 14), Cells(js + 1, 17)).Value = Application.Transpose(DataV)
Cells(js + 2, 16) = WorksheetFunction.Sum(Range(Cells(2, 16), Cells(i + 1, 16)))
Cells(i + 2, 17) = WorksheetFunction.Sum(Range(Cells(2, 17), Cells(i + 1, 17)))
Debug.Print "耗费时间: " & Format(Timer - sngStart, "0.0000000000")
Cells(1, 14) = "管径"
Cells(1, 15) = "材质"
Cells(1, 16) = "长度 m"
Cells(1, 17) = "数量"
Cells(i + 2, 15) = "合计:"
End Sub
在日常工作中,面对Excel表格数据,为了分类进行统计,通过对表格数据筛选获取分类条目,再按条目实行汇总统计。要完成上面的工作,有人工操作和开发程序两种方法,本文通过一个实例,详细介绍这两种方法。
01047利用GetOpenFilename方法获取文件名
01048利用GetOpenFilename方法获取某类型文件名
01049改变GetOpenFilename方法的默认路径
01050改变GetOpenFilename方法的标题文字
01051使用GetOpenFilename方法时出现错误的处理
01052利用GetSaveAsFilename方法获取文件名
01053利用CentimetersToPoints方法将计量单位从cm转换为磅
01054利用InchesToPoints方法将计量单位从in转换为磅
01055显示Excel内置对话框
01056显示常用的Excel内置对话框
01057获取Excel菜单栏信息
01058获取Excel图表工具栏信息
01059获取Excel常用工具栏信息
01060获取Excel格式工具栏信息
01061获取Excel数据透视表工具栏信息
01062获取Excel的Web工具栏信息
01063获取Excel审阅工具栏信息
01064获取Excel窗体工具栏信息
01065获取Excel外部数据工具栏信息
01066获取Excel公式审核工具栏信息
01067获取Excel控件工具箱工具栏信息
01068获取Excel绘图工具栏信息
01069获取Excel命令按钮的外观图像和FaceID号(添加到自定义工具栏)
01070获取Excel命令按钮的外观图像和FaceID号(输出到工作表)
01071改变Excel命令按钮的外观图像
01072删除、恢复Excel菜单栏和工具栏
01073隐藏Excel菜单栏和工具栏
01074显示Excel默认的菜单栏和工具栏
01075执行菜单栏和工具栏的命令按钮
01076改变工作表单元格的快捷菜单
01077在工作表的任意位置快速显示快捷菜单
01078在单元格中输入公式
01079在单元格中输入数字
01080在单元格中输入文本
01081单元格区域引用
01082在单元格中输入数字和文本
01083为输入对话框设置默认值
01084在指定时间运行程序(之一)
01085在指定时间运行程序(之二)
01086计划在未来运行一定时间的宏
01087计划每隔一段时间运行宏
01088取消以前计划运行的宏
01089结束应用程序
02001通过索引指定工作簿
02002通过名称指定工作簿
02003引用当前的活动工作簿
02004引用最后打开的工作簿
02005引用当前宏代码运行的工作簿
02006引用新建的工作簿
02007引用包含特定工作表的工作簿
02008判断工作簿是否已经打开(之一)
02009判断工作簿是否已经打开(之二)
02010判断工作簿是否已经保存(之一)
02011判断工作簿是否已经保存(之二)
02012判断工作簿是否为以只读方式打开的
02013判断工作簿是否为加载宏工作簿
02014获取所有打开的工作簿名称
02015获取当前活动工作簿的名称
02016获取当前宏代码运行的工作簿名称
02017获取所有打开的工作簿路径
02018获取当前活动工作簿的路径
02019获取当前宏代码运行的工作簿路径
02020获取包括完整路径的工作簿名称
02021获取工作簿的基本名称
02022获取工作簿的文档属性
02023获取工作簿的保护状态
02024判断工作簿是否创建了自定义工具栏
02025将工作簿设定为已保存
02026将工作簿设定为加载宏工作簿或解除加载宏
02027设定工作簿的文档属性信息
02028通过指定文件名打开工作簿
02029通过指定索引打开工作簿
02030通过对话框打开工作簿(之一)
02031通过对话框打开工作簿(之二)
02032在不更新链接的情况下打开工作簿
02033新建工作簿,并以新名称保存
02034保护工作簿
02035撤销工作簿保护
02036保存工作簿
02037另存工作簿
02038设定保护密码并另存工作簿
02039设定写保护密码并另存工作簿
02040保存工作簿副本
02041通过对话框指定文件名和保存位置并保存工作簿(之一)
02042通过对话框指定文件名和保存位置并保存工作簿(之二)
02043关闭工作簿,不保存
02044关闭工作簿前进行保存
02045关闭所有打开的工作簿,不保存
02046关闭所有打开的工作簿,保存所有更改
02047删除工作簿中所有定义的名称
02048引用当前工作簿窗口
02049引用新建的工作簿窗口
02050引用特定工作簿的窗口
02051获取工作簿窗口的拆分状态
02052获取工作簿窗口的窗格信息
02053获取工作簿窗口的冻结窗格状态
02054获取工作簿窗口的各种显示状态
02055获取工作簿窗口的大小状态
02056改变工作簿窗口的大小
02057改变工作簿窗口的显示位置
02058拆分窗口并冻结窗格
02059取消工作簿窗口的拆分和冻结
02060设定工作簿窗口的各种显示状态
02061设定工作簿窗口的显示比例
02062隐藏、显示工作簿窗口
02063将指定的单元格显示在窗口的左上角
02064设置工作簿窗口的网格线颜色
02065新建窗口
02066重排窗口
02067关闭窗口
03001通过索引引用工作表
03002通过名称引用工作表
03003通过Sheets集合引用工作表
03004引用当前活动工作表
03005引用第一个工作表
03006引用最后一个工作表
03007引用所有的工作表
03008引用指定的多个工作表
03009引用新建的工作表
03010引用包含特定单元格的工作表
03011引用工作表名称中包含特定字符串的工作表
03012获取工作表名称
03013获取全部工作表名称
03014判断某个表是否为工作表
03015获取工作表的显示状态
03016获取工作表的保护状态
03017判断工作表是否处于筛选模式
03018判断工作表是否存在(之一)
03019判断工作表是否存在(之二)
03020判断工作表是否自动重新计算
03021判断工作表被保护时是否可以进行自动筛选的操作
03022判断工作表被保护时是否启用分级显示符号
03023判断工作表被保护时是否启用数据透视表控件和操作
03024判断工作表被保护时是否可以选定单元格
03025重命名工作表
03026重命名新建的工作表
03027改变工作表标签颜色
03028设置工作表的显示状态
03029设置工作表是否自动重新计算
03030设定工作表被保护时是否可以进行自动筛选的操作
03031设定工作表被保护时是否启用分级显示符号
03032设定工作表被保护时是否启用数据透视表控件和操作
03033设定工作表被保护时是否可以选定单元格
03034新建工作表并重命名
03035复制工作表
03036移动工作表
03037删除工作表
03038保护工作表
03039撤销保护工作表
03040按工作表名称重新排列工作表
03041选定工作表
03042激活工作表
03043显示选定工作表的快捷菜单
03044删除工作表级的定义名称
03045删除图表工作表
03046显示、隐藏行列标题
04001通过Range属性引用某个单元格
04002通过Range属性引用连续的单元格区域
04003通过Range属性引用不连续的单元格区域
04004通过字符串的方式引用某个单元格
04005通过字符串的方式引用连续的单元格区域
04006通过Range属性引用单列
04007通过Columns属性引用单列
04008通过Range属性引用连续的多列
04009通过Range属性引用不连续的多列
04010通过Range属性引用单行
04011通过Range属性引用连续的多行
04012通过Range属性引用不连续的多行
04013通过定义名称引用单元格区域
04014引用单元格的快捷方式
04015通过Cells属性引用某个单元格
04016通过Cells属性引用工作表的全部单元格
04017通过Cells属性引用连续的单元格区域(之一)
04018通过Cells属性引用连续的单元格区域(之二)
04019通过输入框(InputBox)引用所选择的单元格
04020引用活动单元格
04021引用已选定的单元格
04022引用已使用的单元格区域
04023引用被空白行和列包围的单元格区域
04024利用Offset属性动态引用某个单元格
04025利用Offset属性动态引用单元格区域
04026利用Resize属性引用变更为指定大小的单元格区域
04027引用不包括标题行的单元格区域
04028引用不包括标题列的单元格区域
04029引用任意单元格区域的右下角单元格(之一)
04030引用任意单元格区域的右下角单元格(之二)
04031引用输入了计算公式的所有单元格
04032引用输入了常量的全部单元格
04033引用输入了数字的全部单元格
04034引用输入了文本的全部单元格
04035引用输入了逻辑值的全部单元格
04036引用输入了批注的全部单元格
04037引用没有输入任何数据和公式的空单元格
04038引用所有可见单元格
04039引用输入了日期的单元格
04040引用含有相同计算公式的所有单元格
04041引用合并单元格区域
04042引用定义名称所指定的单元格区域(之一)
04043引用定义名称所指定的单元格区域(之二)
04044引用输入了任何内容的最后一行单元格(单列情况之一)
04045引用输入了公式或值的最后一行单元格(单列情况之二)
04046引用输入了任何内容的最后一行单元格(多列情况之一)
04047引用输入了公式或值的最后一行单元格(多列情况之二)
04048引用输入了任何内容的最后一列单元格(单行情况之一)
04049引用输入了公式或值的最后一列单元格(单行情况之二)
04050引用输入了任何内容的最后一列单元格(多行情况之一)
04051引用输入了公式或值的最后一列单元格(多行情况之二)
04052引用多个非连续单元格区域的集合(Union方法)
04053引用多个非连续单元格区域的集合(循环处理)
04054引用多个单元格区域的交叉区域
04055获取计算公式的所有引用单元格
04056获取计算公式中引用的其他工作表单元格
04057获取某个单元格的从属单元格
04058引用某个单元格所在的整个行
04059引用某个单元格所在的整个列
04060引用单元格区域所在的行范围
04061引用单元格区域所在的列范围
04062引用隐藏的行或列
04063引用单元格区域中未隐藏的单元格
04064引用锁定的单元格
04065引用不连续单元格区域集合内的各个连续的单元格区域
04066引用工作簿窗口范围内所有的单元格
04067引用设定了允许滚动区域的单元格区域
04068引用指定了左上角和右下角的单元格区域(之一)
04069引用指定了左上角和右下角的单元格区域(之二)
04070引用指定了左上角和右下角的单元格区域(之三)
04071引用以单一编号指定的单元格
04072引用工作表中任意对象左上角、右下角的单元格
04073引用输入了数组公式的所有单元格区域
04074引用输入了某数组公式的单元格区域
04075引用输入了某个函数的全部单元格
04076引用含有特定文本字符串的所有单元格
04077引用设置了数据有效性的所有单元格
04078获取单元格地址
04079获取单元格区域内的单元格数
04080获取单元格区域的行数
04081获取单元格区域的列数
04082获取单元格的行号
04083获取单元格的列号
04084获取单元格的列标字母
04085获取指定列号单元格的列标字母(之一)
04086获取指定列号单元格的列标字母(之二)
04087获取单元格区域的行号范围
04088获取单元格区域的列号范围
04089获取单元格区域的列标字母范围
04090获取数据区域的最后一行行号
04091获取数据区域的最前一行行号
04092获取数据区域的最后一列列号
04093获取数据区域的最前一列列号
04094获取单元格的任何显示值
04095获取单元格的显示字符串
04096获取单元格文本字符串的一部分(之一)
04097获取单元格文本字符串的一部分(之二)
04098获取单元格内输入的公式
04099判断单元格内是否输入了公式(之一)
04100判断单元格内是否输入了公式(之二)
04101判断工作表内是否有公式
04102判断某单元格区域是否为数组公式区域
04103判断工作表内是否有数组公式
04104判断单元格的计算公式是否引用了其他工作表数据
04105判断单元格的计算公式是否引用了其他工作簿数据
04106判断某单元格是否为合并单元格区域的一部分
04107获取单元格区域内的值,并使其矩阵化
04108获取单元格内的前缀字符
04109判断单元格内的数字是否为文本字符
04110获取单元格的格式
04111获取单元格的字体(Font)对象
04112获取单元格的内部(Interior)对象
04113获取单元格的边框(Borders)对象
04114获取单元格边框线的状态
04115获取单元格的样式(Style)对象
04116获取单元格的条件格式
04117获取单元格的输入规则(有效性设置)
04118获取单元格的超链接
04119获取单元格的批注
04120获取单元格的大小(行高和列宽)
04121获取单元格的坐标
04122向单元格输入数值
04123向单元格输入字符串
04124向单元格输入数字字符串
04125向单元格输入日期
04126向单元格输入时间
04127向单元格输入分数
04128向单元格输入邮政编码
04129向连续的单元格行区域一次性输入不同的数据
04130向连续的单元格列区域一次性输入不同的数据
04131向单元格区域一次性输入相同的数据
04132通过数组向单元格区域一次性输入数据
04133向单元格区域输入连续值
04134向单元格区域输入连续的日期
04135向单元格区域输入连续的字符
04136向单元格输入公式(A1格式)
04137向单元格输入公式(R1C1格式)
04138向单元格或单元格区域输入数组公式
04139替换单元格内的字符(Replace方法)
04140替换单元格内的字符(工作表函数)
04141设置单元格字符串中一部分字符的格式(上标、下标)
04142设置单元格字符串中一部分字符的格式(其他字体属性)
04143设置单元格的下画线
04144设置单元格的字体属性(字体、字号、加粗、斜体、颜色等)
04145设置单元格区域的外部边框
04146设置单元格区域的全部边框
04147设置单元格区域的除对角框线以外的全部边框
04148删除单元格区域的全部边框
04149设置单元格的颜色和背景
04150设置单元格的格式
04151设置单元格的对齐方式
04152缩小单元格内容以全部显示
04153设定、删除单元格的输入规则和信息提示(有效性设置)
04154为单元格设置条件格式、删除条件格式
04155为单元格插入指向工作簿内部的超链接、删除超链接
04156为单元格插入指向工作簿外部的超链接、删除超链接
04157为单元格添加批注、删除批注
04158修改单元格的批注
04159为单元格区域定义名称、删除名称(Name属性)
04160为单元格区域定义名称、删除名称(Add方法)
04161自动调整单元格大小
04162自动调整工作表全部单元格的大小
04163设置单元格的大小(以磅为单位)
04164设置单元格的大小(以cm为单位)
04165设置单元格的大小(以in为单位)
04166锁定单元格、解除单元格锁定
04167隐藏单元格的公式
04168隐藏、显示某单元格所在的行或列
04169隐藏、显示单元格区域
04170单元格区域自动套用格式
04171选定单元格
04172选定单元格,并显示在窗口的左上角处
04173激活单元格
04174合并单元格
04175取消单元格的合并
04176清除单元格的全部信息
04177清除单元格的公式和值
04178清除单元格的批注
04179清除单元格的格式
04180清除单元格的批注和语音批注
04181清除单元格的超链接
04182插入单元格
04183插入整行或整列
04184删除单元格
04185删除某单元格所在的整行或整列
04186删除多行或多列
04187删除工作表的全部单元格
04188移动单元格
04189复制单元格(复制全部内容)
04190复制单元格的值(PasteSpecial方法)
04191复制单元格的值(Value属性)
04192复制单元格的数据和公式(去掉前缀字符)
04193复制单元格的数据和公式(保留前缀字符)
04194复制单元格的格式
04195复制单元格的批注
04196复制单元格的有效性设置
04197复制单元格的列宽
04198复制单元格的公式和数字格式
04199复制单元格的值和数字格式
04200转置复制单元格区域
04201复制单元格的边框
04202对单元格进行加减乘除运算
04203将单元格区域作为图像对象进行复制(无链接)
04204将单元格区域作为图像对象进行复制(有链接)
04205复制大小可变的单元格区域
05001获取嵌入图表的名称
05002获取图表工作表的名称
05003获取图表的某个系列的数据源
05004获取图表的全部系列的数据源
05005获取图表的标题信息
05006获取图表的图例信息
05007获取图表的位置
05008获取图表的大小
05009获取图表的坐标轴信息
05010获取图表的趋势线信息
05011获取工作表中的全部嵌入图表名称和类型
05012制作图表
05013制作多个图表
05014对多个图表进行合理布置
05015制作能够选择任意图表类型的图表
05016制作能够随数据数量变化而变化的图表
05017改变图表的源数据区域
05018更改图表的名称
05019更改图表的类型
05020更改图表的标题格式
05021更改图表的图例格式
05022改变图表的大小
05023设置绘图区的格式
05024设置图表区的格式
05025设置坐标轴的格式
05026为图表添加趋势线
05027将嵌入图表显示在图表视窗中
05028将图表保存为图像文件
05029将图表放置在批注中
05030将图表图像加载到工作表中
05031删除图表
06001获取Shape对象的类型
06002获取Shape对象的名称
06003获取Shape对象的文字
06004获取Shape对象的大小
06005获取Shape对象的位置
06006获取Shape对象的左上角、右下角单元格地址
06007获取工作表内全部Shape对象的基本信息
06008判断Shape对象是否指定了宏
06009插入Shape对象(一般方法)
06010插入Shape对象并指定名称
06011插入Shape对象并添加文字
06012插入Shape对象并指定宏
06013插入自选图形对象
06014更改Shape对象的文字
06015更改Shape对象的大小
06016更改Shape对象的位置
06017选择任意的Shape对象
06018对Shape对象进行群组化处理
06019移动、旋转Shape对象(制作动画)
06020将Shape对象固定在工作表的某一位置
06021删除Shape对象
06022设置Shape对象大小和位置是否随单元格而改变
06023使Shape对象充满整个单元格区域
06024为Shape对象插入超链接
06025利用透明的Shape对象保护单元格
07001获取工作表中所有的Excel窗体控件清单
07002插入Excel窗体控件(之一)
07003插入Excel窗体控件(之二)
07004插入Excel窗体控件并指定名称
07005在Excel窗体控件上设置文字(标签、按钮、单选按钮和复选框)
07006设置Excel窗体控件的颜色和线条
07007更改Excel窗体控件大小
07008更改Excel窗体控件的位置
07009选定或取消选定单选按钮和复选框
07010为列表框和组合框设置项目(指定单元格区域)
07011为列表框和组合框设置项目(使用AddItem方法)
07012为列表框和组合框设置项目(使用List属性)
07013为列表框和组合框设置单元格链接
07014获取列表框和组合框的项目值
07015当选定列表框和组合框某个项目时立即得到项目值
07016一次性插入多个Excel窗体控件并指定不同的宏
07017每单击一次Excel窗体控件,就改变背景颜色或字体颜色
07018获取工作表中所有的ActiveX控件清单
07019在工作表中插入ActiveX控件对象
07020在工作表中插入ActiveX控件对象并重命名
07021引用ActiveX控件(利用Shape对象)
07022引用ActiveX控件(利用OLEObject对象)
07023设置ActiveX控件上的文字
07024设置ActiveX控件的前景和背景
07025设置ActiveX控件对象的位置
07026更改ActiveX控件对象的大小
07027设置、获取文本框的值
07028为列表框和组合框添加项目值(指定单元格区域)
07029为列表框和组合框设置项目(使用AddItem方法)
07030为列表框和组合框设置项目(使用List属性)
07031获取列表框和组合框的项目值
07032在列表框和组合框中选定项目后立即得到所选项目值
07033设置单选按钮和复选框的值(是否选定)
07034取得单选按钮和复选框的值(选定状态)
07035设置切换按钮的值
07036取得切换按钮的值
07037设置微调按钮的值
07038获取微调按钮的值
07039设置滚动条的值
07040获取滚动条的值
07041设置、获取标签的标题文字
07042设置、获取框架的标题文字
07043在图像控件中显示、清除图片
07044以无模式状态显示用户窗体
07045将用户窗体显示在窗口的指定位置(之一)
07046将用户窗体显示在窗口的指定位置(之二)
07047改变用户窗体的大小
07048改变用户窗体的标题文字
07049将用户窗体显示在上次关闭时的位置上
07050在工作表中同时显示多个窗体
07051禁止以窗体右上角的按钮【×】关闭窗体
07052引用窗体中的控件
07053引用窗体中的某一类控件
07054引用窗体中所有的控件
07055引用其他窗体中的控件
07056初始化用户窗体中的所有控件
07057获取被选定的控件的有关信息
07058将控件设置为不可操作(显示为灰色)
07059将控件设置为不可操作(锁定)
07060使控件隐藏、显示(利用Visible属性)
07061使控件隐藏、显示(利用Top属性和Left属性)
07062当鼠标指针停留在控件上方时显示提示信息
07063当鼠标指针停留在控件上方时改变鼠标指针类型
07064当鼠标指针停留在控件上方时改变鼠标指针的图像
07065设置控件的焦点
07066设置控件的背景色和前景色
07067设置控件的字体格式
07068为控件添加图片
07069设置默认按钮
07070设置取消按钮
07071在按钮中显示程序运行状态
07072将文本框设置为必须输入状态
07073设置文本框内字符的对齐方式
07074设置文本框内字符的格式
07075限制文本框内的输入值
07076限制文本框内的字符长度
07077限制只能在文本框内输入阿拉伯数字和小数点
07078限制只能在文本框内输入阿拉伯数字、小数点和负号
07079限制只能在文本框内输入英文字母
07080转换文本框内数据类型
07081将文本框内的字符在任意字符后换行
07082将文本框设定为自动换行状态
07083为组合框设置项目(利用RowSource属性)
07084为组合框设置项目(利用AddItem方法)
07085为组合框设置项目(利用List属性)
07086为组合框设置项目(利用Column属性)
07087获取组合框的项目值(利用Value属性)
07088获取组合框的项目值(利用List属性)
07089获取组合框的项目值(利用Column属性)
07090获取组合框的项目值(利用数组)
07091删除组合框内所有的项目(利用Clear方法)
07092删除组合框内所有的项目(利用RowSource属性)
07093删除组合框内的某个项目(利用RemoveItem方法)
07094取消组合框项目的选定
07095将组合框设置为必须选定状态
07096将组合框设置为只能从项目列表中选定
07097选定组合框后自动弹出项目列表
07098设置组合框项目的选择外观
07099为列表框设置项目(利用RowSource属性)
07100为列表框设置项目(利用AddItem方法)
07101为列表框设置项目(利用List属性)
07102为列表框设置项目(利用Column属性)
07103获取列表框的项目值(利用Value属性)
07104获取列表框的项目值(利用List属性)
07105获取列表框的项目值(利用Column属性)
07106获取列表框的项目值(利用数组)
07107删除列表框内所有的项目(利用Clear方法)
07108删除列表框内所有的项目(利用RowSource属性)
07109删除列表框内的某个项目(利用RemoveItem方法)
07110取消列表框项目的选定
07111将列表框设置为必须选定状态
07112设置列表框的单选、多选状态
07113在列表框和文本框之间进行拖曳操作
07114利用标签显示程序运行进程
07115获取框架内所有的控件名称
07116利用框架实现单选按钮的多选
07117获取选定的单选按钮
07118获取选定的复选框
07119实现旋转按钮与文本框的联动
07120实现旋转按钮的反向自动变化
07121实现滚动条与工作表滚动条的同步联动
07122动态更改切换按钮的标题文字
07123实现多页控件各个页面的自动反向切换
07124利用图像控件浏览图像文件
07125向Spreadsheet控件输入数据
07126将Excel工作表中的数据输入到Spreadsheet控件中
07127将Spreadsheet控件中的数据输入到Excel工作表中
07128利用ChartSpace控件在窗体上绘制动态图表
07129利用DTPicker控件获取日期和时间
07130利用ProgressBar控件设置进度条
07131利用ListView控件在窗体中制作报表
07132利用TreeView控件在窗体中以树形结构显示数据
07133快速调整用户窗体大小
07134在运行时添加控件
07135删除运行时添加的控件
07136利用标签条(TabStrip控件)动态显示数据
07137隐藏、显示用户窗体的【×】按钮
07138将用户窗体的【×】按钮设置为有效、无效
07139在用户窗体上增加【最大化】和【最小化】按钮
07140在启动工作簿时仅显示用户窗体,而不显示Excel界面
08001当新建工作簿时执行程序(NewWorkbook事件)
08002当激活工作表时执行程序(SheetActivate事件)
08003当双击工作表时执行程序(SheetBeforeDoubleClick事件)
08004当右击工作表时执行程序(SheetBeforeRightClick事件)
08005当对工作表进行计算时执行程序(SheetCalculate事件)
08006当任何单元格的值变更时执行程序(SheetChange事件)
08007当工作表不是活动状态时执行程序(SheetDeactivate事件)
08008当超链接被执行时执行程序(SheetFollowHyperlink事件)
08009当单元格的选择范围变更时执行程序(SheetSelectionChange事件)
08010当任意工作簿窗口被激活时执行程序(WindowActivate事件)
08011当工作簿窗口不是活动窗口时执行程序(WindowDeactivate事件)
08012当活动工作簿窗口被变更时执行程序(WindowResize事件)
08013当工作簿成为活动工作簿时执行程序(WorkbookActivate事件)
08014当工作簿成为非活动工作簿时执行程序(WorkbookDeactivate事件)
08015当工作簿被打开时执行程序(WorkbookOpen事件)
08016当工作簿被关闭时执行程序(WorkbookBeforeClose事件)
08017当工作簿被保存时执行程序(WorkbookBeforeSave事件)
08018当工作簿被打印时执行程序(WorkbookBeforePrint事件)
08019当打开工作簿时执行程序(Open事件)
08020当关闭工作簿时执行程序(BeforeClose事件)
08021当激活工作簿时执行程序(Activate事件)
08022当工作簿不是活动状态时执行程序(Deactivate事件)
08023当保存工作簿时执行程序(BeforeSave事件)
08024当打印工作簿时执行程序(BeforePrint事件)
08025当新建工作表时执行程序(NewSheet事件)
08026当工作表被激活时执行程序(SheetActivate事件)
08027当工作表不是活动状态时执行程序(SheetDeactivate事件)
08028当工作表被计算时执行程序(SheetCalculate事件)
08029当双击工作表时执行程序(SheetBeforeDoubleClick事件)
08030当右击工作表时执行程序(SheetBeforeRightClick事件)
08031当工作表任何单元格数据发生变更时执行程序(SheetChange事件)
08032激活、非活动工作表时执行程序(Activate事件和Deactivate事件)
08033当对工作表进行计算时执行程序(Calculate事件)
08034当单元格数据发生变化时执行程序(Change事件)
08035当选定单元格区域发生变化时执行程序(SelectionChange事件)
08036超链接被执行时执行程序(FollowHyperlink事件)
08037当双击工作表时执行程序(BeforeDoubleClick事件)
08038当在工作表中右击时执行程序(BeforeRightClick事件)
08039当图表被激活和被更改时执行程序(Activate事件)
08040双击图表时执行程序(BeforeDoubleClick事件)
08041在图表上单击或右击时执行程序(MouseDown事件)
08042在选定了图表要素时执行程序(Select事件)
08043在选定了图表要素时执行程序(Select事件)
08044在图表上移动鼠标时执行程序(MouseMove事件)
08045使用图表工作表的事件来执行程序
08046装载显示用户窗体时执行程序(Initialize事件)
08047激活用户窗体时执行程序(Activate事件)
08048关闭用户窗体时执行程序(QueryClose事件)
08049单击用户窗体时执行程序(Click事件)
08050单击时执行程序(Click事件)
08051双击时执行程序(DblClick事件)
08052控件值被改变时执行程序(Change事件之一)
08053控件值被改变时执行程序(Change事件之二)
08054在鼠标指针移到控件上面时执行程序(MouseMove事件)
08055在获得焦点前执行程序(Enter事件)
08056在失去焦点且数据有变更时执行程序(BeforeUpdate事件)
08057在数据有变更时执行程序(AfterUpdate事件)
08058在按键时执行程序(KeyPress事件)
08059Excel工作表的ActiveX控件对象事件的使用示例
09001为现有的菜单控件添加、删除自定义菜单命令
09002在Excel菜单栏中创建、删除自定义菜单控件
09003创建、删除多级自定义菜单控件
09004创建、删除自定义主菜单栏
09005在Excel工具栏中添加、删除自定义命令按钮
09006在Excel工具栏中添加、删除自定义组合框按钮
09007在Excel工具栏中添加、删除自定义下拉命令按钮
09008创建、删除自定义工具栏,并指定显示位置
09009创建、删除由内置命令组成的自定义工具栏
09010为Excel系统默认的快捷菜单添加、删除新菜单命令
09011为快捷菜单添加、删除内置命令
09012创建一个全新的快捷菜单
09013获取Excel的全部快捷菜单信息
09014使Excel的快捷菜单无效
09015为用户窗体和控件添加自定义快捷菜单
10001查询数值及公式字符串(Find方法)
10002查询数值及公式结果(Find方法)
10003查询数值及公式结果(Match函数)
10004查询数值及公式结果(VLookup函数)
10005查询数值及公式结果(Find方法和Offset属性)
10006查询数值及公式结果(Collection对象)
10007查询数值及公式结果(DGet函数)
10008查询含有某字符的单元格数据(Like运算符)
10009查询含有某字符的单元格数(CountIf函数)
10010使用数据库函数DCountA实现复杂查询
10011从多个工作表或工作簿中查询数据
10012自动排序
10013使用自定义序列进行排序
10014使用多个关键字进行排序
10015先进行排序然后再恢复排序前的状态
10016按照单元格的颜色、字体颜色进行排序
10017按照字符的长度进行排序
10018字母与数字混合情况下的排序
10019对数组的元素值进行排序
10020执行自动筛选
10021撤销自动筛选
10022执行高级筛选(与条件)
10023执行高级筛选(或条件)
10024撤销高级筛选
10025复制筛选出的数据
10026删除没有出现在筛选结果中的所有行
10027筛选不重复的数据
10028获取两个工作表中相同数据的行数据
10029获取只存在于某个工作表中的行数据
10030删除数据区域内的所有空行
10031删除数据区域内的所有空列
11001从一个工作表中查询数据(ADO+SQL)
11002从多个工作表中查询数据(ADO+SQL)
11003查询其他工作簿数据(ADO+SQL)
11004利用DAOSQL查询工作簿数据
11005在不打开工作簿的情况下对多个工作簿进行汇总
12001利用DAO对象创建Access数据库和数据表
12002利用ADO对象创建Access数据库和数据表
12003检查数据表是否存在
12004获取数据库中所有的数据表名称
12005检查字段是否存在
12006获取数据库中某数据表的所有字段信息
12007字段类型常量与字段类型英文名称的转换函数
12008将Access数据库的数据全部导入到Excel工作表中
12009将Access数据库的某些字段导入到Excel工作表中
12010查询不重复的记录(Distinct)
12011查询最前面的若干条记录(Top)
12012利用Like运算符进行模糊查询
12013对查询结果进行排序(Order)
12014查询某一区间内的数据(Between)
12015进行复杂条件的查询(Where)
12016利用合计函数进行查询(查询最大值和最小值)
12017利用合计函数进行查询(查询合计数和平均值)
12018将第一个查询结果作为查询条件进行查询
12019对查询结果进行分组(Group)
12020将查询结果作为窗体控件的源数据
12021添加新记录
12022修改更新记录
12023删除特定的记录
12024删除全部记录
12025通过窗体编辑记录
12026将整个工作表数据都保存为Access数据库
12027将工作表的某些数据保存到Access数据库中
12028将工作表数据保存到已有的Access数据库中(循环方式)
12029为数据表增加字段
12030改变字段的类型
12031改变字段的长度
12032删除一个字段
12033删除一个数据表
13001将TXT格式文本文件打开为工作簿
13002将CSV格式文本文件打开为工作簿
13003利用QueryTables对象导入文本文件(之一)
13004利用QueryTables对象导入文本文件(之二)
13005利用ADO导入文本文件的全部内容
13006利用ADO导入文本文件的部分内容
13007获取文本文件的行数和列数
13008逐行获取文本文件的行数据,并拆分成列
13009将工作表中的全部数据保存为CSV格式文本文件
13010将工作表部分数据保存为CSV格式文本文件
13011创建新的文本文件并写入数据
13012向已有的文本文件写入数据
13013以行为单位读取文本文件数据
13014以字符为单位读取文本文件数据
13015读取文本文件的全部数据
13016读取文本文件的指定行数据
14001调用数学函数
14002调用财务函数
14003调用日期和时间函数
14004调用字符串函数
14005调用强制转换函数
14006调用检查函数
14007调用数组函数
14008使用判断函数(IIf函数)
14009使用格式函数(Format函数)
14010设计参数可选的自定义函数
14011设计参数个数不确定的自定义函数
14012设计返回数组的自定义函数
14013为自定义函数添加信息提示
14014对自定义函数进行归类
14015快速创建列标题和行标题
14016快速向单元格区域输入数据
14017快速获取单元格区域数据
14018使用数组提高计算效率
14019向单元格输入一般公式
14020向单元格区域输入数组公式
14021快速复制公式
14022列举工作簿内所有的公式
14023对指定的单元格区域进行计算
14024删除工作表中的所有数据,但保留所有公式
15001按指定次数进行循环(ForNext)
15002在循环过程中退出(ExitFor)
15003不确定次数进行循环(DoLoop)
15004在循环过程中退出(ExitDo)
15005对数组的所有元素进行循环
15006对没有规律性的元素进行循环
15007对集合中的所有对象进行循环
15008进行多重循环
15009判断是否为数值
15010判断是否为日期
15011判断是否为数组
15012判断是否为对象
15013判断变量中是否保存有对象
15014判断程序是否有错误
15015判断字母的大小写
15016判断字符的全角和半角
15017使用SelectCase进行多条件处理(数值区间)
15018使用SelectCase进行多条件处理(关键字Is)
15019使用SelectCase进行多条件处理(Like运算符)
16001设置、取消打印区域(固定区域)
16002设置、取消打印区域(不固定区域)
16003设置、取消打印区域(全部工作表)
16004设置打印列标题和行标题
16005设置页边距(以磅为单位)
16006设置页边距(以in为单位)
16007设置页边距(以cm为单位)
16008设置页眉
16009设置页脚
16010设置页面的水平、垂直居中位置
16011设置纵向或横向打印模式
16012设置打印纸张大小
16013将工作表的全部数据都缩印在一页内
16014设置打印行号、列标和网格线
16015显示打印预览
16016打印工作表
16017在任意位置设置换页
16018获取打印总页数
16019显示打印机设置对话框
16020显示打印内容对话框
16021显示页面设置对话框
16022显示分页预览
16023隔页打印工作表
16024设置是否打印工作表中的Shape对象
17001获取VBA工程信息资料
17002设置VBA工程信息资料
17003获取工程中所有的对象名称和类型
17004更改模块和用户窗体的名称
17005导出模块和用户窗体
17006导入模块和用户窗体
17007清除立即窗口内容
17008获取对象中所有定义的变量
17009获取对象中所有过程的名称
17010获取引用的项目信息
17011增加引用项目
17012取消引用项目
17013利用VBA插入用户窗体和控件,并为控件编写事件程序代码
17014利用VBA插入标准模块并写入程序代码
17015利用VBA插入类模块
18001获取文件夹内的所有文件(FileSearch)
18002获取文件夹内的某一类型的所有文件(FileSearch)
18003获取文件夹内的所有文件(Dir函数)
18004判断文件是否存在
18005复制文件
18006移动文件
18007删除文件
18008重命名文件
18009获得文件的修改日期和时间
18010获得文件大小
18011获取文件的属性
18012设置文件的属性
18013获取当前驱动器的名称
18014变更当前驱动器的名称
18015判断文件夹是否存在
18016创建文件夹
18017获取当前的文件夹
18018移动文件夹
18019删除文件夹
18020更改文件夹名
18021获取文件夹的属性
18022判断文件是否存在(FileExists)
18023复制文件(CopyFile)
18024删除文件(DeleteFile)
18025移动文件(MoveFile)
18026获取文件的属性(Attributes)
18027获取文件的信息资料(GetFile)
18028获取文件的基础名称(GetBaseName)
18029获取文件的扩展名(GetExtensionName)
18030获取文件的全名(GetFileName)
18031获取文件所在的文件夹名(GetParentFolderName)
18032获取文件所在的驱动器名(GetDriveName)
18033获取文件夹内的所有文件清单
18034判断文件夹是否存在(FolderExists)
18035复制文件夹(CopyFolder)
18036删除文件夹(DeleteFolder)
18037移动文件夹(MoveFolder)
18038创建文件夹(CreateFolder)
18039获取文件夹的属性(Attributes)
18040获取文件夹的信息资料(GetFolder)
18041获取文件夹中的所有子文件夹名(SubFolders)
18042获取特定文件夹的路径(GetSpecialFolder)
18043判断驱动器是否存在(DriveExists)
18044获取所有可以使用的驱动器清单(Drives)
18045获取驱动器的信息资料(GetDrive)
19001创建新的Word文档(前绑定)
19002创建新的Word文档(后绑定)
19003打开已有的Word文档(前绑定)
19004打开已有的Word文档(后绑定)
19005将Word文档内容复制到工作表
19006将工作表数据复制到Word文档中
19007创建新的PowerPoint文档
19008打开已有的PowerPoint文档(前绑定)
19009打开已有的PowerPoint文档(后绑定)
19010以Excel工作表数据为基础制作PowerPoint幻灯片
19011将Excel工作表的图表复制到PowerPoint幻灯片中
19012按工作表中的地址发送邮件(前绑定)
19013将工作簿作为附件发送邮件(前绑定)
20001打开记事本(Shell函数)
20002打开计算器
20003以指定的文件夹打开Windows资源管理器
20004打开控制面板的某个项目窗口
20005创建文件的快捷方式
20006从Excel启动指定的网页
20007建立Web查询
20008定时刷新Web查询
20009利用OutlookExpress发送邮件
20010获取显示器分辨率
20011利用VBA播放声音
为了查询符合条件的数据,你可以使用 VBA 中的 Filter 函数。 例如,下面的代码将在名为 "Data" 的工作表中查询所有在列 "A" 中包含 "apple" 的行:
Dim rngAs Range
Set rng = Worksheets("Data").Range("A1:C10000")
rng.AutoFilter Field:=1, Criteria1:="apple"
Columns("A:M").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"P1:X2"), CopyToRange:=Range("P11:AB41"), Unique:=False
End Sub
2、图片显示:
(1)源数据图片:
(2)单条件查询:
(3)多条件查询:
3、总结:
excel表...
Range("J7").Select
Sheets("Ã÷ϸ±í").Range("A1:G22").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("A1:C2"), CopyToRange:=Range("A4:G4"), Unique:=False
End Sub