excel VBA

零. excel 2016 开启VBA

“Excel选项”对话框,
单击“自定义功能区”选项, 在右侧的面板的列表框中勾选“开发工具”复选框,最后单击“确定”按钮


一、VBA基础

注:快捷键 ctrl+空格:变量名称补全 , Ctrl+J

0. 注释

' 注释代码

调试输出:

' 注释
Debug.Print "Hello, World!"`
msgbox("hello")`

1. 变量声明

Dim xx as type
const xx as type = value

Dim i as Integer
i = 3

' 变量类型有 
' String Integer Long Single Double
' Date Boolean Variant Object

1.1 字符串连接使用 & ,不要使用 +

1.2 数组

dim myarr(5) as integer '等价于dim myarr(0 to 5) as integer 直接声明一个固定长度为 6 的数组
dim myarr(5 to 10) as integer '声明一个下标由5到10的数组
dim dyn_array() as integer '声明一个动态数组
redim dyn_array()(array_size) '重新定义数组的大小
redim preserve dyn_array(array_size) '保留数组的数值 

arr = Range("A1:A5")

循环
for each city in cities  
    msgbox city 
next

For i = 0 to 5
     '赋值
     myarr(i) = i
Next

For i = 0 to 5 
     Debug.Print  myarr(i) 
Next
相关函数
set myArr=Array("Ford","Black","1999")
IsArray(myArr) 判断某个变量是否是数组
Erase(myArr)清除数组中的数据
LBound、UBound(myArr) 返回下界和上界数字

2. 逻辑比较

= <> > < >= <=
AND OR NOT

3. if语句:

if ... then
  ...
elseif 
  ...
else 
  ...
end if

4. for 语句

注:没有break和continue,建议使用while语句,修改变量值来达到跳出循环的目的

for counter=start to end [step step]
  ... exit for
next [counter] 

或

for each element in group
 ... exit for
next [element]

5. while 语句

do while|until condition
 ...
loop 

或

do
 ...
loop while|until condition

二、工作簿相关

1. range属性:

range("a5").select '选择单个单元格
range("A1:A10").select '选择一个单元格区域
range("A1,B6,C8").select '选择一些不相邻的单元格
range("A1:A10,C12,D3").select '选择不相邻的单元格和单元格区域

遍历range

for each tmpRange in someRange
    ...
next for

2. cells属性

cells(5,1).select 或cells(5,A).select
range(Cells(6,1),cells(10,1)).select
cells.select '选择所有单元格

3. offset属性

Range("A1").offset(1,3).select '选择A1的下面一行和右边3列的单元格
range("D15").offset(-2,-1).select
selection.offset(-2,-1).select
selection.resize(2,4).select

4. 选择单元格的其它方法

activeCell.end(xlToRight).select
activeCell.end(xlDown).select 'xlToLeft,xlUp

5. 选择整行和整列

selection.entirerow.select
selection.entirecolumn.select

6. 设置单元格内容

activesheet.range("A1:C4").value="=4*25"
activesheet.range("A1:C4").formula="=4*25"

7. 操作工作簿和工作表

WorkBooks.add '打开一个新的工作簿
workbooks.open filename:=xxx (必须是全路径!可以使用thisworkbooks.path &"\...")
workbooks(1).name
workbooks(2).activate
workbooks("chap02.xls").activate
workbooks(1).close

worksheets.add
worksheet.select
worksheet.activate

8. 打开和关闭系统警告提示

Application.DisplayAlerts = False 
Application.DisplayAlerts = True 
Application.ScreenUpdating=false
'然后结束时改回来 用于提升性能
Application.ScreenUpdating=True 

使用 _+一个空格 ,可以打断很长的代码行。

9. 必须注意设置对象的值要使用set,例如workbook等

10. 换行符 Chr(10)

11. 提高效率:

  • (1) 尽量使用VBA原生的属性、方法和worksheet函数:例子,如果要求A1:A1000 的平均值,使用Application.WorksheetFunction.Average(Range("A1:A1000")) ,比自己写一个循环统计sum值再求平均值要好。

  • (2)尽量减少使用对象引用,尤其在循环中,使用with语句要好一些,或者使用对象变量(注意使用set设置变量值)。

  • (3) 减少对象的激活和选择,例如

sheets("sheet3").select; range("A1").value=100... ;
可以改为
with sheets("Sheet3"); .Range("A1").value=100...
  • (4) 关闭屏幕更新 Application.ScreenUpdating=false/true

你可能感兴趣的:(excel VBA)