1、 Autofilter
例如:
Selection.AutoFilter ' 自动筛选
Selection.AutoFilter Field:=5, Criteria1:="<>"
autofiter就是excel中的筛选功能,其完整宏语法为:
Range对象.AutoFilter(Field,Criterial1,Operator,Criteria2,VisibleDropDown)
说明:
1.参数Field,指定想要基于筛选的字段的整数偏移量。若省略,从列表的左侧算起,最左侧的字段是字段一。就是设置过滤条件时给第几列设置条件。如例子中的是 第5列。
2.参数Criterial1,指定判断条件(为字符串)。使用“=”查找空字段,或者使用“<>”查找非空字段。如果忽略该参数,那么判断是全部。如果参数Operator是xlTop10Items,那么参数Criterial1指定项目的数量。 就是筛选条件,例子中Criteria1:="<>" ,是不为空
3.参数Operator,指定筛选的类型,为XlAutoFilterOperator常量之一:
lxlAnd:值为1。Criteria1和Criteria2的逻辑与。
lxlOr:值2。Criteria1或Criteria2的逻辑或。
lxlTop10Items:值3。显示最大值的项(在Criteria1中指定项目数)。
lxlBottom10Items:值4。显示最小值的项(在Criteria1中指定项目数)。
lxlTop10Percent:值5。显示最大值的项(在Criteria1中指定百分比)。
lxlBottom10Percent:值6。显示最小值的项(在Criteria1中指定百分比)。
lxlFilterValues:值7。筛选值。
lxlFilterCellColor:值8。单元格的颜色。
lxlFilterFontColor:值9。字体颜色。
lxlFilterIcon:值10。筛选图标。
lxlFilterDynamic:值11。动态筛选。
4.参数Criteria2,指定第二个判断条件(字符串),使用Criterial1和Operator构建复合判断条件。
5.参数VisibleDropDown,设置为True则显示所筛选字段的自动筛选下拉箭头;设置为False则隐藏所筛选字段的自动筛选下拉箭头。默认为True。
6.如果忽略所有参数,那么AutoFilter方法简单地切换指定区域的自动筛选下拉箭头的显示。
示例1:移除自动筛选提供的下拉箭头
在Excel中使用自动筛选时,会在每列顶部都添加一个下拉箭头以获取相应的筛选项。有时,我们只需要使用其中某些字段的下拉箭头,不需要其它字段带有下拉箭头,以免误操作这些字段。例如,上面的示例中,我们只需要代表科目的语文、数学、英语、历史字段有下拉箭头,而移除列A、列B中的下拉箭头。代码如下:
Sub testAutoFilter1()
Range("A1").AutoFilter Field:=1,VisibleDropDown:=False
Range("A1").AutoFilter Field:=2,VisibleDropDown:=False
End Sub
即,将相应列字段的参数VisibleDropDown设置为False。
执行后的效果如下图:
示例2:一次执行多个列字段的筛选
仍以本文开头的工作表为例,要求得到语文成绩大于等于80的男生的数据记录。代码如下:
Sub testAutoFilter2()
Range("A1").AutoFilter Field:=2,Criteria1:="=男"
Range("A1").AutoFilter Field:=3,Criteria1:=">=80"
End Sub
例3:复制筛选结果
将示例2中得到的结果复制到以单元格H21开头的区域中。代码如下:
Sub testAutoFilter3()
Dim lngLastRow As Long
'找到工作表中最后一行
lngLastRow = Range("A" &Rows.Count).End(xlUp).Row
'按条件执行自动筛选
Range("A1").AutoFilter Field:=2,Criteria1:="=男"
Range("A1").AutoFilter Field:=3,Criteria1:=">=80"
'将筛选后的结果复制到指定位置
Range("A1:F" &lngLastRow).Copy Range("H21")
End Sub
可以看出,Copy方法仅复制可见单元格中的内容。
2、Application.CutCopyMode = False
Application.CutCopyMode = False
Selection.Copy
平时复制一个区域的时候,那个区域边缘不是会闪动嘛,就是类似虚线的东西,你如果不想让它闪,就Application.CutCopyMode = False
3、Selection.End(xlDown).Select 选择非空单元格
Xldown和xlup是一对组合,用于寻找某个区间中的非空单元格。
首先我们在单元格的前7行填入如下数据:
A1单元格:
A2单元格:2
A3单元格:3
A4单元格:4
A5单元格:
A6单元格:6
A7单元格:7
A8单元格:
A9单元格:
A10单元格:
A1,A5,A8,A9,A10留空。
代码一:
Worksheets("Sheet1").Range("A1").Select
Selection.End(xlDown).Select
——最终被选中的单元格是A2
代码二:
Worksheets("Sheet1").Range("A2").Select
Selection.End(xlDown).Select
——最终被选中的单元格是A4
代码三:
Worksheets("Sheet1").Range("A10").Select
Selection.End(xlUp).Select
——最终被选中的单元格是A7
通过这三个例子,我们可以更好地理解xlDown和xlUp的用法。
xlDown:从被选中的单元格向下寻找,如果被选中单元格为空,则一直向下走到第一个非空单元格;如果被选中单元格为非空,则向下走到最后一个非空单元格。
xlUp:只需要将 xlDown的规则倒过来,就是xlUp的规则
4、Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False
'对选择的内容(Selection),执行PasteSpecial操作(选择性粘贴),粘贴的方式为数值,且不进行运算专,不跳过空单元格,不转置,可参考选择性粘贴窗口的各个选项
5、 ActiveCell.Offset(0, -10).Range("A1").Select
这是VBA语句格式,常出现于宏录制的代码中,意思是选中当前单来元格右边第十个单元格。
在VBA中可以用这个“ActiveCell.Offset(X, Y).Range("A1").Select“ 语句修改(x,y)坐标来源选择任何单元格
ActiveCell:当前活动单元格。
Offset(X, Y):VBA中的偏移函数,(x,y)为偏移量
Range("A1"):指第1行,第A列的单元格。(百语句中的活度动单元格经过偏移后的单元格就被定义为第1行,第A列)。
Select:选择,选中。
6、打印
Sheets("打印凭证").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True '打印选定的工作表组,打印份数为一份,逐份打印
7、Rows = Sheet1.Cells(Rows.Count, 2).End(xlUp).Row
取表sheet1 第2列最后一个有值得行的行号
NextRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
这句话的意思是 取活动单元表的第一列最后一个有值的行的下一行行号。
Rows.Count是指当前活动工作表的行数,为数字 1048576,很熟悉的一个数字,为Excel工作表的最大行数
Cells(Rows.Count, 1),则是定位到第一列的最后一行cell,即单元格“A1048576”
主要是End(xlUp)比较难理解。
Range.End属性是返回一个 Range 对象,该对象代表包含源 区域的区域尾端的单元格。
End(xlUp)等同于End mode下+UP键,或Ctrl+Up,
若活动单元格为空,其上一个单元格也为空,将会向上寻找该列第一次出现的非空单元格;
若活动单元格非空,其上一个单元格也非空,将会选中活动单元格所在列的最后一个非空单元格;
其上一个单元格为空,将继续向上寻找该列第一次出现的非空单元格,直到第一个单元格为止,如A1。
另外三个XlDirection常量为xlDown, xlToRight, xlToLeft 功能分别为 End+DOWN, END+RIGHT, END+LEFT.
这样Cells(Rows.Count, 1).End(xlUp)就是沿着单元格“A1048576”向上寻找第一列第一次出现的非空单元格。
连起来Cells(Rows.Count, 1).End(xlUp).Row,就是取第一列第一次出现的非空单元格的行号
ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1,自然就是取该非空单元格的下面的空单元格,以便进行输入等操作。
8、value formula formulaR1C1
value指代单元格的值
formula指代单元格zd中专的公式属
formulaR1C1指用R1C1引用方式的公式
比如假设A1=1,B1=2,C1=A1+B1
则对于单元格C1
value=3
formula=A1+B1
formulaR1C1=RC[-2]+RC[-1]
formulaR1C1,可实现拖拽单元格时,公式智能根据位置变换。
引用方式:Range("c1").formulaR1C1="=R[]C[]+R[]C[]"
R 指行,C代表列
中括号,代表的是相对于选定单元格的相对偏移量,+代表的是向右向下便宜,-指代表的是向左向上偏移
无中括号,代表的是绝对偏移量,无负值
如 Range("b2").formulaR11C1="=R[2]C1+RC[-1]" 相当于从B2进行偏移, =[2+2]B+2[B-1]=B4+A2
如 Range("b2").formulaR11C1="=R2C1+RC1" 相当于 从默认起始单元格A1,而不是B2偏移=A2+A1
9、EXCEL打开时,指定的表格隐藏
下面这个代码,显示的表格不是想要的,还需要调试
Private Sub Workbook_Open()
Sheet1.Activate ‘sheet 1是想显示的表格
ActiveWindow.DisplayWorkbookTabs = False
End Sub
下面是可用的代码
Private Sub Workbook_Open()
Dim sh As Worksheet
For Each sh In Worksheets
Sheet1.Visible = xlSheetVisible
If sh.Name <> "sheet1" Then
sh.Visible = False
End If
Next
End Sub