常用excel VBA 语句

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。
执行后的效果如下图:


image

示例2:一次执行多个列字段的筛选
仍以本文开头的工作表为例,要求得到语文成绩大于等于80的男生的数据记录。代码如下:

Sub testAutoFilter2()
Range("A1").AutoFilter Field:=2,Criteria1:="=男"
Range("A1").AutoFilter Field:=3,Criteria1:=">=80"
End Sub
image

例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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343