基础知识
Lotus 123
是excel前身的数据处理软件
文件 -> 选项 -> 高级(下方) -> Lotus兼容性设置
勾选 转换lotus 1-2-3 公式
,其作用就是让算式直接运算,会自动在表达式前面加**=
** (等号)
视图
视图 -> 新建窗口
新建窗口后可以在同级下选择全部重拍
,就可以用两个窗口对比
保存工作区
:可以把分开的视图的布样式保存
在2010后,excel支持分屏,就取消了这个功能
选择工作表
shift + 点击工作表
选择后进行插入,就可以插入对应数量的工作表
同时也可以一并运行其他操作(删除)
列的替换
先选择列/单元格 -> shift + 列/单元格 的边框线 -> 拖拽到相应位置
列宽调整
双击列与列之间的分割线(可以选择多列后多列自动调整)
定位表格边界区域
选定单元格 -> 双击任意一条他的四条边
冻结窗格
选择单元格 -> 视图 -> 冻结窗格
可以让字段名或关键行列保持不动,便于对应茶看
填充柄
选择单元格 -> 左键点住边框进行拖拽
-
复制填充 : 按住**
ctrl
** -
特殊格式填充 :
右键拖拽后选择格式
-
定义填充格式 :
文件 -> 选项 -> 高级(下方) -> 编辑自定义列表
格式刷
可以用整张表刷整张表
如果双击
格式刷,可以多次刷格式,ESC键退出
简单快捷键
ctrl + :
输入今天的日期 (YYYY/MM/DD)Alt + 回车
单元格内换行,通过这个来做斜线单元格ctrl + 回车
将选中的单元格用第一个输入的值填充
单元格格式
单元格格式并不会改变单元格本身的值,包括更改数据类型
日期
日期也是数字,表示的是离**1900/01/01
的天数**
复制粘贴到陌生单元格,可能就会变成数值,只要更改相应单元格格式即可
时间
时间也是数字,表示的是离**1900/01/01
的天数的数位数**
如:
0.5 <=> 12:00 0.25 <=> 6:00
自定义
可以在默认格式后面加上自己需要的文字,单元格隐藏
特殊自定义
:::
,三个冒号代表隐藏单元格- 日期格式自定义(ymd)
mmm
表示英文缩写mmmm
表示英文全称
- 星期表示
aaa
表示星期几aaaa
表示星期全称- 一般在这前面加
周
就可以表示为**周几
**
- 数字表示
0
表示一位数字
文本
文本格式不会改变
正来说Excel超过15位就自动用科学计数法表示,但文本不会被改变
并且文本格式的数据不能直接改变他的类型,并且靠左对齐
-
如果是纯数字的文本,可以在单元格左边的**
!
**中选择转换为数字
-
特殊用法
- 如果有很多单元格要转化为数字,有一些是纯数字文本,有一些不是,如如果只要把纯数字文本改为数字做法:
在空白单元格里输入1 -> 复制 -> 选中单元格 -> 选择性粘贴 -> 粘贴方式:承
分列
数据 -> 分列
- 特殊用法
- 如果一开始的日期就是文本格式,可以选中后直接分列,就可以把文本格式的日期改为日期型
查找替换定位
查找与替换
ctrl + F
开始 -> 编辑-> 查找与选择
基本替换
替换选项卡中 -> 选项 -> 单元格匹配
勾选后,如果内容是全等于查找值才会被替换
可以在格式中下拉选项选择从单元格选择格式
,就能在单元格选择对应想要替换的格式
匹配符号
*
(星号)任意多个字符?
(问号)任意一个字符- 很多时候都与单元格匹配搭配使用
~
(波浪线)让上方的匹配符号无效,就表示上方的匹配符号,加在匹配符号之前
定位
基本定位
左上角名称框 -> 输入你想定位的行列
行用数字表示,列用字母表示,**:
**分割
如:
定位999到10000行:999:10000
定位A列的50行到G列的1000行:A50:G1000
- 特殊用法
- 选择完单元格后,用其他方式重命名(比如中文),就可以以给予他的别名定位
选项卡定位
开始 -> 编辑-> 查找与选择 -> 转到
转到就是定位,在里面可以设置定位条件
批注
选中单元格 -> 插入批注
在 审阅 -> 批注
中可以批量管理批注
可以通过选项卡定位条件来定位批注
定位公式
定位公式也在选项卡定位条件中
*空值填充
在选项卡定位条件中选择空值
合并填充
如果多个单元格合并对应多个值,那么就无法用这个数据做数据透视表
解除合并:
选中合并后的单元格 -> 开始 -> 对齐方式 -> 合并后居中
填充解除合并后每行第一个的值:
选中解除合并后的单元格 -> 开始 -> 编辑 -> 查找与选择 -> 转到 -> 定位条件 -> 空值 -> 输入:= -> 按击方向键上输入 -> ctrl + 回车
图片
选项卡定位条件 -> 对象
开始 -> 编辑 -> 查找与选择 -> 选择对象
排序与筛选
排序
不推荐只选中一列后进行排序,会让其他值不对应
开始 -> 编辑 -> 排序与筛选 -> 自定义排序
汉字排序
因为汉字是依靠拼音排序的,使用有很多时候会无法正常排序(如一,二,三,四,五)
无法正常排序的汉字必须要借助自定义序列
开始 -> 编辑 -> 排序与筛选 -> 自定义排序 -> 次序 -> 自定义序列
插入排序
给需要排序的字段创建辅助列(从1开始填充) -> 给需要插入的行创建辅助列(从1.5开始填充) -> 根据辅助列进行排序
筛选
选中需要筛选的字段名 -> 开始 -> 编辑 -> 排序与筛选 -> 筛选
如果筛选完成后就只需要筛出来的数据,可以在选项卡定位条件
中选择可见单元格
筛选也可以筛选开头或结尾的字符,并且支持通配符
高级筛选
条件
在高级筛选中筛选条件由表格组成,表格必须加字段名
如:我想要筛选年龄为25且身高为185的男生
筛选条件为:
年龄 | 身高 |
---|---|
25 | 185 |
将这一区域放入高级筛选的条件区域中
-
逻辑关系
同行为且,不同行为或
- 且
年龄 身高 25 185 - 或
年龄 身高 25 185 -
数值条件
- 直接在单元格里面写表达式
年龄 身高 >20 >185 -
逻辑值筛选
- 在条件格式中写变量与变量,一定不能加正确的字段名
年零 =G5<M9 =A4>S8 - 字段名绝对不能是正确的,可以空但是必须选中字段名
高级筛选列去重
数据 -> 排序和筛选 -> 高级
- 列去重
x 数据 -> 排序和筛选 -> 高级 -> 列表区域选择需要去重的列 -> 复制到选择想要输出的列 -> 勾选选择不重复的记录
分类汇总与数据有效性
分类汇总
先分类再汇总,是数据透视表的简化版本
分类汇总前必须先对要分类的列排序,作用是把一样的值放在一起
数据 -> 分级显示 -> 分类汇总
经过分类汇总的数据可以通过分类汇总
选项卡进行删除
多列的分类汇总
先对多列排序,关键字分主次,由大范围到小范围
数据 -> 分级显示 -> 分类汇总 -> 先对主要关键字进行分类汇总 -> 过后再次点击分类汇总 -> 取消勾选替换当前分类汇总 -> 再对次级的关键字进行分类汇总 -> 以此类推
- 若想将汇总区域数据复制到其他地方,还是通过条件定位可见单元格复制
合并相同内容的单元格
因为单元格的值合并后只保留一个
可以通过空的单元格合并后,选择性粘贴-> 格式
或直接把空单元格格式刷刷到需要合并的有值的单元格上
数据有效性
数据 -> 数据验证
写允许的条件
数据有效性满足引用
输入不重复记录
搭配函数COUNTIF()
固定输入值
在数据验证的允许
中选择序列
,来源必须用英文逗号分隔
保护记录
因为数据有效性的原理是先输入值,然后再运算公式,如果公式为TRUE就允许写入,公式是可以自定义的,所以只需要给需要的记录设置为绝对是FALSE
的公式,那么就实现了保护记录
绝对是FALSE
的公式:
="中国" = "世界杯冠军"
=1>2
0
- 也可以设置出错警告,输入法模式
- 记录有效性的删除也在记录有效性的选项卡中
数据透视表
插入 -> 表格 -> 数据透视表
通过拖拽到行列进行数据透视
-
更改汇总方式
数据透视表字段 -> 点击值字段 -> 值字段设置
-
查看数据值
双击记录
数据透视表基本用法
-
更改行列标签频率
右键数据透视表行列标签 -> 组合
-
不需要自动的行标签求和
右键行标签 -> 取消勾选分类汇总
数据区间
前提是只能是数值
右键数据透视表行列标签 -> 组合 -> 输入起始终止步长
组合的前提:
1 . 不能有空格
2 . 必须都是相同的数据类型
数据公式
数据透视表工具 -> 数据透视表分析 -> 计算 -> 字段,项目和集 -> 计算字段
生成多张工作表
选中作表名列 -> 创建数据透视表 -> 把工作表名列放入筛选 -> 把工作表名列放入值 -> 数据透视表工具 -> 数据透视表分析 -> 数据透视表 -> 选项 -> 显示报表筛选页
如果不想要数据透视表,可以通过全选工作表后,直接delete或用其他行覆盖掉数据透视表的行
公式与函数
必须以等号**=
**开头
运算符
算术运算符
+ , - , * , / , % , &(连字符) , ^
在EXCEL中文本用双引号**"
**引起来
比较运算符
= ,> , < , >= , <= , <>
比较运算符的结果只会是**TRUE/FALSE
,分别表示1/0
**
-
特殊用法
- 不用if函数做到满足条件的加上加数
先在单元格中写比较运算(如:=A1="本地") -> 因为TRUE表示是1,所以可以乘以加数从而达到目的 =(A1="本地")*加数 + 原单元格值
-
文本格式用函数无法聚合,但是用算术运算符可以求和,如果想让文本转换成数值可以通过**
=文本格式数据+0
**来实现
引用
快捷键:F4
- 相对引用:
H4
- 绝对引用:
$H$4
函数
所有函数的比较条件都必须以字符串的形式传递
RANK
排名
=RANK(排列数,排列区域)
SUM
求和
开始 -> 编辑 -> 自动求和
可以用来搭配条件定位来实现跳跃性的求和
IF
=IF(条件,True值,False值)
函数可嵌套
也可以通过多个IF函数做算术运算
如:我要完成比较多的分级后返回每个级对应的值,就可以用if判断后如果不满足就等于**0/""
**,然后再把所有的加起来
=IF(A1="1级",1000,0) + IF(A1="2级",500,0) ....
异常值处理 ISERROR
-
函数ISERROR()
如果函数里的参数是错误的,返回TRUE,否则返回FALSE
常与IF搭配使用
逻辑函数
-
AND(),OR(),NOT()
他们都是函数,不是关键字
计数函数
-
COUNT(),只会给数字计数
-
COUNTIF(),将满足条件的记录计数
=COUNTIF(总区域 , 计数条件) 总区域:就相当于在那里数 计数条件:数什么,可以是单值
- 如果需要加入比较条件,就必须把条件以字符串格式传入
==COUNTIF(A3:G6 , ">=60")
- 函数只会识别前15位,所以如果需要更多识别就必须连上通配符
==COUNTIF(A3:G6 , B6&"*")
- 如果要将符合条件的记录做单元格样式,就要使用条件格式
开始 -> 样式 -> 条件格式 -> 新建规则
-
COUNTIFS(),将满足条件的记录计数,可以多条件
=COUNTIFS(总区域1 , 计数条件1,总区域2 , 计数条件2,....)
条件求和
SUMIF
将符合条件的记录求和
=SUMIF(条件区域 , 条件 , 求和项)
如果条件区域也是求和项,那么求和项可以不写
-
函数容错性
SUMIF()的
求和项
有很强的容错性(多方法)- 如果传入一个很少的单元格值,它就会默认这一整列为
求和项
=SUMIF(A3:G6 , ">=60" , F1)
- 如果传入一个单元格值,他会认为以这个值为字段的列为
求和项
=SUMIF(A3:G6 , ">=60" , F1)
- 如果传入一个很少的单元格值,它就会默认这一整列为
-
容错性要点
条件区域必须与求和区域的开头行相同,就是条件区域从哪一行开头,求和区域也要从哪一行开头,包括所有的容错性用法
-
多条件思路
如果有多个条件去求和,那么可以用**
&(连字符)
**将他们连起来成为辅助列,然后用辅助列进行判断求和 -
特殊用法
如果我发现我需要查找一个东西(是唯一的)对应一个值(前提是数值型),可以用SUMIF,虽然是求和,但是可以起查找作用
SUMIFS
多条件求和,参数格式有较大区别
=SUMIFS(求和项 , 条件区域1,条件1 , 条件区域2,条件2 , ...)
Vlookup
查找
=Vlookup(查找值,查找区间,区间中查找值的对应列,匹配模式)
注意要点
-
查找区间
的最左侧列必须是查找值
所在的列 -
区间中查找值的对应列
,顾名思义就是在查找区间中,从左侧往右侧数第几列 -
匹配模式
,FALSE/0代表精准匹配,TRUE/1代表模糊匹配。(一定要写) -
一定要注意找区间的引用是否绝对
-
查找值如果不唯一,就只会查找到第一个
-
查找值
与查找区间
的左侧列的数据类型必须一样-
如果不一样就需要转换(不是直接变更单元格的数据类型),用计算强转
-
数值 -> 文本: A1&"" 文本 -> 数值: A1*1 / --A1 文本数值穿插: 分别强转后查找,搭配IF和ISNA
-
如果Vlookup找不到,就会返回**#N/A**,表示空值,判断空值用ISNA()
-
模糊匹配
注:有些匹配可以用通配符解决,不一定是模糊匹配
模糊匹配只会匹配到小于等于自己的最大值
一般用于区间分割查找,因为一般区间只会写每间的起始值
Hlookup
相当于Vlookup的转置函数
=Hlookup(查找值,查找区间,区间中查找值的对应行,匹配模式)
-
查找区间
的最上侧行必须是查找值
所在的行 -
区间中查找值的对应行
,顾名思义就是在查找区间中,从左侧往右侧数第几行 -
其他与Vlookup相同
Lookup
比Vlookup自由度更高,只能模糊匹配
=Lookup(查找值,查找区间,返回值列)
-
可以直接指定返回值列,不用在查找区间返回
-
如何让Lookup精确匹配
-
先写条件:*0/(查找区间=查找值)1
- 将布尔值转换成**
1/0
表示后,如果做除数0**就会报错,就会剩下精确匹配的哪一个
- 将布尔值转换成**
-
再用lookup
-
=LOOKUP(1,0/(查找区间=查找值)*1,返回值列)
找1是因为模糊匹配会最先返回**
<=自己
**的值,就可以让他准确返回
-
-
-
Lookup多条件
- 与精准匹配差不多,就是将多个条件的**
TRUE/FALSE
相乘后做0的除数**
- 与精准匹配差不多,就是将多个条件的**
MATCH
单查询
=MATCH(查找值,查找区间,匹配模式)
返回查找列中的第几行
INDEX
取值
=INDEX(取值区间,取第几个)
MATCH
和INDEX
搭配使用可以满足Vlookup的短板
COLUMN
返回列号
ROW
返回行号
TEXT
=TEXT(单元格值,格式)
返回将单元格值转换为对应格式的值
因为在EXCEL里面,所有的值被设置格式之后本值都不会改变,用text就可以改变并可以复制
日期函数
时间运算
在Excel里面,单位**1
**表示了整天,小数表示了时间
但是,所有的时间都是小数并且**<= 1
**
时间运算时,就必须把给出的多少**分钟/小时
转化成以整天为单位的小数**
x是时间的值
x/60 转为小时为单位
x/24 将小时单位转化为天做单位
日期运算
加减即可
函数
YEAR(日期)
取年份MONTH(日期)
取月份DAY(日期)
取天数DATE(年,月,日)
组合日期
求每个月的最后一天
=DATE(YEAR(A1),MONTH(A1)+1,1) - 1
因为每个月的第一天都是**1
**,所以求当前日期的最后一天,就是将后一个月的第一天减一
求月份的天数
=DAY(DATE(YEAR(A1),MONTH(A1)+1,1) - 1)
就是把最后一天取天数即可
DATEDIF
属于隐藏函数,专求间隔日期
=DATEDIF(起始时间 , 终止时间 , 间隔单位)
起始时间必须小于终止时间
间隔单位用**"
**括起来
-
“Y” 年 "M" 月 “D” 日 “YM” 除去年份算剩下的月份 “MD” 除去月份算剩下的天数 “YD” 除去年份算剩下的天数
WEEKNUM
=WEEKNUM(日期,指定周的首天)
返回日期是所在年份的第几周
WEEKDAY
=WEEKDAY(日期,计算方法)
返回日期是所在周的第几天
条件格式与公式
条件格式
开始 -> 样式 -> 条件格式
条件格式中可以查找重复值
条件格式先用大范围,再用小范围
简单了解切片器
切片器必须在**.xlsx
**文件使用
隐藏错误值
开始 -> 样式 -> 条件格式 -> 新建规则 -> "只包含以下内容的单元格设置格式" -> 将字体颜色改为白颜色
用其他列判断条件格式
选中设置条件格式的列 -> 开始 -> 样式 -> 条件格式 -> 新建规则 -> "使用公式确定要设置格式的单元格" -> 公式列**只对选中时编辑单元格的对应行写公式**
- 跟公式用法相同
文本函数
汉字算1位字符
LEFT
将单元格值从左开始取几位
=LEFT(单元格,位数)
RIGHT
将单元格值从右开始取几位
=RIGHT(单元格,位数)
MID
(从左向右)将单元格值从中间位开始取几位
=MID(单元格,起始位数,取位数)
取位数包含起始位数
如果不确定取的位数可以指定一个很大的值来达到目的,但是不能缺少参数
-
提取身份证性别位
=RIGHT(LEFT(单元格,17),1)
FIND
寻找字符在字符串的第几位
=FIND(字符,单元格,从第几位开始)
如果没找到则返回**#VALUE!
**
LEN
求字符长度
=LEN(单元格)
LENB
求字节长度
=LENB(单元格)
取尾拖的中文字符
=RIGHT(单元格, LENB(单元格)-LEN(单元格))
数学函数
ROUND
四舍五入
=ROUND(单元格,四舍五入位数)
ROUNDUP
向上进位,指定位数后,直接进位
=ROUNDUP(单元格,进位位数)
如:1,234
--> 1.24
ROUNDDOWN
向下舍位,指定位数后,直接舍位
=ROUNDDOWN(单元格,进位位数)
如:1,234
--> 1.23
INT
直接取整,处理负值会有问题
=INT(单元格)
MOD
取余数
=MOD(被除数,除数)
只取0或0.5小数的数
=IF(MOD(单元格,1)>=0.5),INT(单元格)+0.5,INT(单元格))
=INT(单元格*2) / 2
跳跃取值
等差
首先列出需要取得的行号,求出相差多少(d)
=ROW()*d - 多余值
使公式为要取得的行号
每3列换行输出
=ROW*3+COLUMN() - 多出部分
数组
就是一段区域,这段区域可以做运算,运算后也会表示整段区域
数组公式
所有的数组公式必须用ctrl + shift +回车
来运算
INDIRECT
基本引用
将引用字符串以参数传递给函数,就可以把单元格值引用出来
=INDIRECT(引用字符串)
跨表引用
先用字符串连接符(&)生成引用字符,然后再用INDIRECT函数
常见问题
-
INDIRECT函数引用时,如果工作表名有特殊符号,就会引用出错,包括如果表名与引用字符串一样也会出错
-
解决方法
- 将前面的字符串两边链接一对引号
如: 1 月!g2 -> "'"&"1 月"&"'!g2"
二级下拉
-
前导知识
-
可以给工作区命名别名
公式 -> 定义的名称 -> 定义名称
-
-
制作
- 用别名就可以用数据验证来引用单元格值,但是要用INDIRECT函数来引用
绘图
基础知识
-
让图标或图片按照单元格改变
右键图表 -> 大小与属性 -> 属性 -> 选择"随单元格位置变换大小"
设置后可以将图表折叠
镜像图标
坐标轴选项 -> 勾选"逆序类别"
坐标轴设置
注:复合图必须设置那个数据在主或次坐标轴
选择数据轴:
图表工具 -> 格式 -> 当前所选内容
主次坐标轴设置:
选择图像上的数据轴 -> 右键 -> 设置绘图区格式
调整坐标轴大小可以调整图像的位置
特殊图像
可以把插入的形状直接粘贴到数据轴上
动态图表
系列:一列或一行数据在图表中叫做一个系列
原理
使用表单控件创建动态图
开发工具 -> 控件 -> 插入
EXCEL小知识点
单元格换行
Alt + Enter
查重
条件格式中选择重复值
去重
数据 -> 数据工具 -> 删除重复值
合并多个单元格值
选择多个单元格 -> 开始 -> 编辑 -> 填充 -> 内容重拍
列宽必须足够才能合并
小数取整数(不四舍五入)
ctrl + h
替换
选择单元格 -> 打开替换 -> 将 .* 替换成 无(不写)
快速换列
选择列 -> shift + 拖拽边框
批量求和
alt + =(等号键)
拆分数字和单位
先在旁边单元格写入数字/单位 -> 数据 -> 数据工具 -> 快速填充
智能拆分
ctrl + e
可以将一个单元格里面的值智能的提取出来。但首先要人工提取再ctrl+e,与拆分数字和单位同理
自动生成下拉列表
alt + 向下
生成已经输入过的去重后的下拉列表
清洗函数
REPLACE
=REPLACE(单元格,替换的起始位置,从起始位置替换多少个,新的字符串)
替换多少个包含起始位置
SUBSTITUTE
字符串匹配替换
=SUBSTITUTE(单元格,单元格中要被替换的字符串,新字符串,替换单元格中的第几个)
替换单元格中的第几个,省略的话就替换全部
FIND
查找一个字符串在另一个字符串的位置,区分大小写
=FIND(查找字符串,单元格.从第几个匹配)
SEARCH
查找一个字符串在另一个字符串的位置,不区分大小写
=SEARCH(查找字符串,单元格.从第几个匹配)
时间函数
TODAY
返回当前日期
EOMONTH
=EOMONTH(单元格,取值参数)
- 取值参数:
- -1 上个月
- 0 当月
- 1 下月
IFERROR
测试单元格是否报错
=IFERROR(单元格,报错后返回的内容)
OFFSET
单元格偏移
=OFFSET(单元格,偏移行数(上加下减),偏移列数(左加右减),[偏移单元格后返回区域的高度],[偏移单元格后返回区域的宽度])
如果单元格是区域,则偏移整个区域
统计函数
COUNTBLANK
统计空值的个数
=COUNTBLANK(单元格)
SUMPRODUCT
将给定数组中,每个数组对应元素相乘,返回乘积之和
=SUMPRODUCT(数组1,数组2,数组2)
RANK
返回一个数字在一列中的排位
=RANK(单元格,区域)
FLOOR
将数字向下舍入到给出基数的最接近倍数
=FLOOR(单元格,基数)
RANDBETWEEN
返回给出区间中的随机数,区间是左闭右开
=RANDBETWEEN(bottom,top)
VBA
基础知识
关键字区分大小写
启用所有的宏:
选项 -> 信任中心 -> 信任中心设置 -> 宏设置
-
进入VBA编辑界面
ALT+F11
开发工具 -> Visual Basic
右键工作表 -> 查看代码
-
保存代码
需要把代码与工作表一起保存,他的后缀名是**
.xlsm
**
录制宏
将在excel中的操作以代码的形式保存
开发工具 -> 代码 -> 录制宏
局限性:录制宏有很死的逻辑,所以说还是需要人为编写
-
相对引用
开发工具 -> 代码 -> 使用相对引用
使用方法:录制宏后打开使用相对引用
相对引用就是对于原单元格做相应的偏移
‘加注释内容
定义
Sub 宏名()
语句
End Sub
基础关键字
- 单元格变量:
[c1]
MsgBox 变量
,生成弹窗输出变量 = InputBox("说明字符串")
,输入并赋值给变量Timer
获取计算机内部时间
选择单元格
Range("单元格引用")
- 选中单元格:
Range("单元格引用").select
变量
变量类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NdZmmDCP-1669273206149)(变量的数据类型.png)]
定义
dim 变量名 as 数据类型
-
定义变量是可以简写的
dim n%
-
定义多个变量用逗号分隔
dim n%,S&,x$
如果不定义变量,默认使用Variant,内存占用空间较大
For
For 变量 = 数值1 To 数值2 Step 步长
语句
Exit For '退出循环
Next
IF
If 条件1 Then
语句1
Elseif 条件2 Then
语句2
Else
语句3
End If
``
OFFSET
单元格偏移
=OFFSET(单元格,偏移行数(上加下减),偏移列数(左加右减),[偏移单元格后返回区域的高度],[偏移单元格后返回区域的宽度])
如果单元格是区域,则偏移整个区域
统计函数
COUNTBLANK
统计空值的个数
=COUNTBLANK(单元格)
SUMPRODUCT
将给定数组中,每个数组对应元素相乘,返回乘积之和
=SUMPRODUCT(数组1,数组2,数组2)
RANK
返回一个数字在一列中的排位
=RANK(单元格,区域)
FLOOR
将数字向下舍入到给出基数的最接近倍数
=FLOOR(单元格,基数)
RANDBETWEEN
返回给出区间中的随机数,区间是左闭右开
=RANDBETWEEN(bottom,top)
VBA
基础知识
关键字区分大小写
启用所有的宏:
选项 -> 信任中心 -> 信任中心设置 -> 宏设置
-
进入VBA编辑界面
ALT+F11
开发工具 -> Visual Basic
右键工作表 -> 查看代码
-
保存代码
需要把代码与工作表一起保存,他的后缀名是**
.xlsm
**
录制宏
将在excel中的操作以代码的形式保存
开发工具 -> 代码 -> 录制宏
局限性:录制宏有很死的逻辑,所以说还是需要人为编写
-
相对引用
开发工具 -> 代码 -> 使用相对引用
使用方法:录制宏后打开使用相对引用
相对引用就是对于原单元格做相应的偏移
‘加注释内容
定义
Sub 宏名()
语句
End Sub
基础关键字
- 单元格变量:
[c1]
MsgBox 变量
,生成弹窗输出变量 = InputBox("说明字符串")
,输入并赋值给变量Timer
获取计算机内部时间
选择单元格
Range("单元格引用")
- 选中单元格:
Range("单元格引用").select
变量
变量类型
定义
dim 变量名 as 数据类型
-
定义变量是可以简写的
dim n%
-
定义多个变量用逗号分隔
dim n%,S&,x$
如果不定义变量,默认使用Variant,内存占用空间较大
For
For 变量 = 数值1 To 数值2 Step 步长
语句
Exit For '退出循环
Next
IF
If 条件1 Then
语句1
Elseif 条件2 Then
语句2
Else
语句3
End If
Msgbox
Msgbox 字符串
Inputbox
变量 = Inputbox("说明字符串")
With
隶属于
With 对象
.属性/方法
其他对象.属性/方法
end With
Call
Call 宏名
GOTO
...
goto 常量
...
常量
语句
错误回避
On Error Resume Next
如果出错继续执行下一行
一般使用的话需要加一个循环结束判断
对象
基本对象
-
单元格对象:
Range("单元格1:单元格2")
-
工作表对象:
Sheets
若要使用遍历需要把变量定义为工作表类型
Dim 变量 As Worksheet
Worksheets
工作表对象
注意:
Worksheets表示工作表对象,如果**Worksheets.count
只会返回工作表**的个数
sheets是全局的返回个数(如视图)
方法
-
Select
选中工作表
Sheets.select
- 工作表表示方法
工作表名.Select 函数表示法: Sheets("表名").Select Sheets(1).Select 选中工作表中第一个工作表(不是旁边任务管理器的顺序)
-
Add
添加工作表
Sheets.Add [Before, After, Count, Type]
- 参数赋值
参数 := 值
-
参数详解
1 .
Before, After
在某表前或后插入工作表
工作表名.Add Before:=工作表名
2 .
Count
插入几个工作表
工作表名.Add Count:=工作表名
3 .
Type
插入工作表的类型
-
Delete
删除表
Sheets.Delete
- 直接删会触发警告触发器,需要删除前屏蔽,删完后打开
Excel.Application.DisplayAlerts = False/True
-
Copy
复制表
Sheets.Copy [Before, After]
- 如果没有参数,则会新建文件后拷贝
属性
-
Count
返回工作表个数,是只读的
sheets.count
- 常用方法
Sheets.Add after := sheets(sheets.count)
总是在最后一张表插入,同时**
sheets(sheets.count)
还可以表示最后一张表或者新插入的表** -
Name
Workbooks
工作簿对象
路径(Filename)要写绝对路径+后缀名
方法
-
Open
打开文件
Workbooks.Open [Filename]
-
ActiveWorkbook
当前活动的工作薄对象每当open之后的工作薄就是这个对象
ActiveWorkbook.Save 保存 ActiveWorkbook.Close 关闭 ActiveWorkbook.sheets(1).... 使用
-
每次运行后都会报警告和文件刷新,这两个必须成对使用
Excel.Application.DisplayAlerts = False/True Excel.Application.ScreenUpdating = False/True 关闭/打开工作表刷新
-
-
Add
添加工作簿
Workbooks.Add
-
创建工作簿后需要保存
ActiveWorkbook.SaveAs [Filename]
SaveAs
保存后会自动打开 -
备份保存
ThisWorkbook.SaveCopyAs [Filename]
ThisWorkbook == ActiveWorkbook
-
Range
单元格对象
-
表示方法
[a1] cells(行,列) '数值 range("单元格")
-
定义变量
dim 变量名 as range
方法
-
Offset
偏移
range("单元格").offset(行偏移量,列偏移量)
- 遵循 上减下加,左减右加
-
End
以给出单元格为起点,到达最后一个被使用的单元格
range("单元格").End(xl..)
-
Resize
在指定单元格基础下,重设单元格区域
range("单元格").resize(行,列)
- 遵循 上减下加,左减右加
-
Copy
复制单元格
range("单元格").copy 目标单元格
- 如果复制整行或整列,目标单元格一定要从第一个行/列单元格开始
-
Merge
合并选中的单元格
range("单元格").Merge
-
*AutoFilter
筛选
range("单元格").AutoFilter [Field Criteria1 Operator]
-
参数详解
- Field 可选,表示筛选列的整形偏移量
- Criteria1 可选。筛选条件字符串
- Operator 可选,指定筛选类型。设置为xlAutoFileterOpearator枚举中的常量之一
-
取消筛选
range("单元格").AutoFilter
-
-
Find
查找
range("查找区间").find("查找内容")
返回就是返回单元格,使用
select
就可以选中找到的单元格但是如果没找到就会报错
属性
-
Value
单元格的值
range('单元格').Value
- 常用于对象的值需要作为参数时使用
-
Row,Column
单元格行号和列号
-
EntireRow/Column
单元格的整行/整列
最后一行的表示方法
sheet1.range("a65536").End(xlUp).Row
事件
在Visual Basic双击工作表,就可以选择对象和事件
Application.EnableEvents = False/True
可以控制事件,让事件只执行一次
SelectionChange
选区被改变
Change
只要工作表被改变就会触发,慎用
BeforeSave
在保存前执行,工作在Workbook上的事件
函数
VBA函数与工作表函数不一样,但是工作表函数可以呗调用
WorksheetFuntion.工作表函数
若要在工作表上运行就需要先选择工作表:工作表.select
自定义函数
定义:
function 函数名(参数名 As 参数类型)
语句
End function
定义出来后可以在工作表使用,也可以在**Sub
**中使用
Format
更改格式
format(更改内容,"格式")
Isnumberic
判断是否是数字
Val
将输入的转换为数值
文本函数
VBA.String
InStr
字符在字符串中的第几个
VBA.String.InStr(单元格,"字符")
Split
分隔字符串,返回数组,数组下标0开头。引用用**()
**小括号
VBA.String.Split(单元格,"字符")
日期函数
VBA.DateTime
DateSerial
将给出的年月日,合并为日期型
VBA.DateTime.DateSerial(年,月,日)
加载宏
相当于Excel的代码库,可以让EXCEL打开时加载代码库中的代码
需要在Thisworkbook
对象上面插入模块
加载宏要保存为.xlam/.xla
文件,路径不可更改
开发工具 -> EXCEL加载项
加载后就可以使用,一般用添加宏选项卡的方式来使用
文件 -> 更多 -> 选项 -> 自定义功能区 -> 宏
如果是函数,就可以直接使用了
文件
文件操作一般分层使用:工作簿 -> 工作表 -> 单元格
DIR
查看是否存在这个文件,返回文件名,可使用通配符
DIR(PATH)
-
匹配机制
匹配第一个后,匹配时不给参数就可以匹配到第一个匹配路径的第二个值或者更多的值
DIR(PATH) '匹配到的第一个 DIR ‘匹配到的第二个 ...... '以此类推
-
通配符
*.* 任意文件
SET
将对象引用赋值给变量
Set 文件对象
文件对象操作
文件对象.close
文件对象:可以用Workbook.Open
打开
跨文件需要吧对象名写全,如**Thisworkbook.sheets(1)
**
数组
可以提高代码运行速度
定义动态数组,0开头
dim 数组名()
可以给数组赋值一整个区域
-
数组使用区域
数组名 = range("A!1:I7")
-
值 引用
数组名(下标)
-
重新定义数组下标
redim 数组名(a to b)
不能再用
dim
定义同一个数组
定义静态数组
dim 数组名(a to b)
可存储**b-a+1
**个数据,从a开头
可以通过数组名吧所有值输出,但是输出区域的维度必须跟数组的维度一样
ActiveX
引用:
表名.控件名.属性
命令按钮
mousemove
鼠标悬停事件
选项按钮
GroupName
组名,同组名只能被选择一个,所以需要把同类型的按钮设同组名
用户窗体
ShowModel
显示方式:**ture
**表示独占
常用事件
Activate
表单激活时触发
一般用于隐藏EXCEL主窗体
Application.Visible = True/False
QueryClose
表单退出时触发
一般用于关闭EXCEL
Application.Quit