VBA对单元格及区域、⾏、列的选择、写⼊、复制、删除、插⼊等
E XCEL是由很多的对象组成,每个对象都有他的属性和⽅法,所谓的对象可以理解为所有存在的东西,在同⼀个程序⾥的对象之间是存在关系的,⽐如说上下级关系或同级关系,上下级关系之间⽤英⽂句点“.”连接。
collaboration例如:
application.workbooks(1).worksheets(1).range(“A1”)
意思就是当前应⽤程序(excel)下⾯的已经打开的第⼀个⼯作薄下⾯的第⼀个⼯作表⾥⾯的A1单元格,但⼀般情况下我们不需要这么⿇烦,如果我们只对当前的表格操作,前⾯的都可以省略,只需要写range(“A1”)就可以了,如果我们在⼯作表1中要对同⼀个⼯作薄⾥的⼯作表2进⾏操作就要指明⼯作表,但不需要指定⼯作薄名,不指定⼯作薄默认是在同⼀个⼯作薄,不指定⼯作表,默认在同⼀个⼯作表,如果我们在第⼀个⼯作薄要去操作第⼆个⼯作薄就要指定第⼆个⼯作薄。除了可以使⽤数字去指定第⼏个⼯作薄或第⼏个⼯作表,我们还可以直接指定其名称,这样可以更直接知道是对哪个⼯作薄或⼯作表进⾏操作,前提是要知道它的名称。⽐如:
workbooks(“2019年销售记录”).worksheets(“⼀⽉份销售记录”).range(“A1”)
代表⼀个名为“2019年销售记录”的⼯作薄⾥⾯的⼀个名为"⼀⽉份销售记录"的⼯作表的A1单元格
每个对象都有它的属性和⽅法,对象和属性或⽅法之间也是⽤英⽂的句点“.”连接,⽐如说⼀个单元格,宽度多少,⾼度多少,对齐⽅式是什么,有没边框,边框是单实线、双实线、还是虚线,有没背景⾊,什么背景⾊等,这些都是单元格的属性。我们可以对这些属性进⾏设置。
例如:
rows(1).rowheight=20 指定当前⼯作表第⼀⾏的⾏⾼为20磅,所以这个连接的英⽂句点“.”可以理解为:什么“的”什么。
对于刚刚开始学习VBA的朋友,建议在VBA代码编辑器的⽴即窗⼝中进⾏练习,进⼊⽴即窗⼝的⽅法在EXCEL中同时按ALT+F11,打开代码编辑器,如果在打开的编辑器⾥没看到⽴即窗⼝可以按Ctrl+G或点击菜单栏的“视图”》“⽴即窗⼝”,就可以打开⽴即窗⼝,建议把代码编辑器窗⼝调节成下图⼀样,⽅法及时看到运⾏结果。
输⼊代码并回车会在对应区域中显⽰结果
如果当前的活动⼯作表是打开的第⼀个⼯作薄⾥的第⼀个⼯作表,那么下⾯这⼏⾏代码效果是完全⼀样的。
形容词性物主代词
Cells(1,1).value云冈石窟简介
Range(“A1”).value
sheets(1).cells(1,1).value=1
worksheets(1).cells(1,1).value=1shuriken
workbooks(1).worksheets(1).cells(1,1).value=1
application.workbooks(1).worksheets(1).cells(1,1).value=1
其中worksheets可以简写成sheets
如上⾯的sheets(1).cells(1,1).value=1和worksheets(1).cells(1,1).value=1是完全⼀样的
⼯作表格是EXCEL的基础,那么VBA的基础就是怎么使⽤VBA对表格进⾏操作,知道了怎么使⽤VBA操作当前⼯作表,以后再要操作其它的⼯作表或⼯作薄就容易了。以下是本⼈对⼀些基本操作的总结。都是以当前活动⼯作表为例。
在指定的区域上进⾏写⼊,删除,复制,粘贴,写⼊公式,填充公式等等,这些都是最基本的操作。
这样看来要在表格上⼲什么都要先指定⼀个区域,整个表格是表格中最⼤的⼀个区域,单元格就是表格中最⼩的区域,区域可以⽤range(“区域对象”)来表⽰。
⽐如:
Range(“A1”).Select 选择A1单元格
Range(“A1:F10”).Select选择A1到F10区域
Range(Cells(1, 1), Cells(3, 3)).lect 选择A1:C3区域
Range(“A:A”).Select选择A列
Range(“A:F”).Select选择A-F列
世界新闻自由日RANGE(“A1:D5,F2:G2,H:H”).Select同时选择A1:D5,F2:G2,H列三个指定区域
Range(“1:1”).Select 选择第⼀⾏
Range(“1:1,8:8,12:12”).Select同时选择第1,第8,第12⾏
Range可以⽤英⽂中括号[]代替,可以是下⾯的格式
Range(“A1”) 可以简写成 [A1]
Range(“A2:B2”) 可以简写成 [A2:B2]
但是:
Range(“1:1,8:8,12:12”) 不能简写成 [“1:1,8:8,12:12”]
Range(Cells(1, 1), Cells(3, 3)) 不能简写成 [Cells(1, 1), Cells(3, 3)]
⼀个⼯作表由很多的单元格组成,所有的单元格集合在⼀起⽤cells表⽰,所以cells也代表就代所有的单元格,如果要指定某⼀个单元格只需要在cells后⾯指定⾏和列就可以,如:cells(1,1),就代表第⼀⾏第⼀列交叉的单元格A1,后⾯不指定单元格就代表所有单元格,如cells.lect就是选择当前⼯作表的所有单元格,⼯作表除了是由单元格组成,同时也是由⾏或列组成,因此选择单元格或⾏或列还有都可以有多种,⼀⾏或⼀列也是⼀个区域,所以也是可以使⽤range指定的。
⽐如下⾯⼏种单元格的选择⽅法
cells(10).lect 选择整个表格⾥的第10个单元格,顺序是从左到右,再从上到下,这个⽤法⽤到的机会并不多
Cells(1, 1).Select 选择第⼀⾏第⼀列交叉的单元格,就是A1
Cells使⽤⽅法和range使⽤⽅法是不⼀样的,range(“A1”)是以列号字母加⾏号代表,列号在前⾏号在后,要以英⽂双引号""括起来,意味是字符串的形式,cells(1,1),以索引号⾏号加列号,⾏号在前列号在后,中间⽤英⽂逗号隔开,不⽤加英⽂双引号,意味着⾥⾯的数字就是数值。
其实cells还有⼀个⽤法,cells(1,“A”).lect也是选择A1,这个就有点混⾎⼉的感觉了。前⾯是⾏号,数值1,后⾯是字符列号"A",在编写程序的时候使⽤cells⽐使⽤range更灵活。可以⽅便使⽤变量替换.
cells是不能像range⼀样直接指定区域的,但可以配合Resize属性指定区域,Resize属性是调整指定区域的⼤⼩。
⽐如:
Cells(1, 1).Resize(4, 4).Select 意思是第⼀⾏第⼀列交叉的单元格(就是A1)为左上⾓第⼀个单元格向右下调整成⼀个4*4的单元格区域。相当于range(“A1:D4”)boasts
Rows是当前⼯作表所有⾏的集合,因此也可以使⽤rows来指定⾏
⽐如:
Rows(1).lect 选择第⼀⾏
Rows.lect 选择所有⾏,和Cells.Select 及 Columns.Select 是同样的效果,相当于选择表格上所有单元格。
columns是当前⼯作表所有列的集合
Columns(1).lect 选择第⼀列
Columns.Select 选择所有列
上⾯说到了怎么选择单元格,⾏,列,区域,都是直接指定的,有明确⽬标的,但我们学习VBA就是要实现智能化,⾃动化,这样的我们就要⽤到变量来代替,那么怎么⽤变量来选择区域呢?
上⾯的例⼦有提到,使⽤range(“A1”)这样的⽅法来选择是要加英⽂双引号的,代表是字符串类型,使⽤cells(1,1)这样的⽅法来选择的时候是不加双引号的,代表是数值类型。⽽变量可以代表任意类型,当然也可以⼿动指定变量是什么类型。如果不指定,那么变量是⼀个可变的类型,会根据情况⾃适应类型。不指定类型使⽤起来好像⽅便,但可能会存在⼀些情况。
⼀是占⽤的存储占⽤空间⼤,⼆是运⾏速度会慢⼀些,毕竟它每次运⾏的时候还要判断⼀下⾃⼰应该
是哪个类型。三是在给变量赋值的时候它不会检查是否符合类型要求,可能会存在⼀些未知的错误或冲突,查找起错误的原因会⽐较困难。⽐如有两个⽂本型的数字变量
沈阳新东方英语学校
a=“2”,b=“3”,那么可以在⽴即窗⼝中分别使⽤msgbox a + b,msgbox a - b,msgbox a * b,msgbox a / b,看⼀下结果分别是什么,你会发现,两个变量相减,相乘,相除都是和数值计算⼀样,但相加就不⼀样的,a+b结果是23,⽽不是5,因为+号在VBA中可以⽤于连接两个字符串。如果你不指定变量的类型,⼀开始给这个本应该是数值型的变量赋值了⼀个字符型的数值,在运⾏的过程中系统不会提⽰任何错误,这样在发⽣错误的时候你可以不知道,或发现错误,但查找起来要花费很多时间。
回到正题,和变量配合使⽤,要使⽤符号&进⾏连接,变量⽆论是什么类型都是不需要再双引号的。
使⽤变量选择Range的⽅法⽰例:
X = 2
y = 3
Cells(X, y).Select 选择第2⾏第3列交叉的单元格
Range(“a” & X).Select 选择A2单元格
Range(“a” & X & “:c5”).Select 选择A2:C5区域
Range(“a1:” & “c” & y).Select 选择A1:C3区域
Range(“a” & X & “:” & “b” & y).Select 选择A2:B3选择
下⾯介绍⼀下⼏个Range对象最常⽤的属性和⽅法:
Range.value属性,返回返设置range对象的内容
如:纹身培训
a=Range(“A1”).value 返回单元格A1的值给变量a
Range(“A1”).value=“姓名” 把A1单元格内容设置为 “姓名”,注意,设置的内容为字符串时需要⽤英⽂双引号括起来,数值或变量等其它类型是不⽤双引号的。
要把内容设置为公式,要在公式前加⼀个=号,如下所⽰,在E2单元格加⼊求和公式,⾥⾯使⽤了变量来指定求和区域
Range(“E2”).value = “=sum(A” & t & “ ” & t & “)”
如:a=Range(“D10”).row 返回单元格D10所在的⾏号10给变量a
如:b=Range(“B2:F5”).column 返回指定区域左上⾓第⼀个单元格b2所在的列号给变量b,注意这⾥返回的是数值列号不是字母列号,B就是第2列,所以返回的是2
Range.Select ⽅法 选择对象
range(“A1”).lect 选择A1单元格
Range.Clear ⽅法 清除对象,可使⽤具体参数指定只清除内容或公式或格式等
Range(“A1:G37”).Clear 清除A1:G37 单元格区域的内容、公式和格式设置等。
Range.Copy ⽅法将单元格区域复制到指定的区域或剪贴板中。如果没指定⽬标区域将复制到剪贴板。
下例所⽰把区域A1:D4复制到 E5开始的同等⼤⼩区域。就是复制到E5:H8,可以使⽤具体参数设置复
制粘贴的类型,⽐如仅复制公式,仅复制值等。
nazoRange(“A1:D4”).CopyRange(“E5”)
Range.Delete ⽅法 删除对象
RANGE(“A1:D5,F2:G2”).delete 同时删除A1:D5,F2:G2,两个指定区域
Range(“1:1,8:8,12:12”).delete 同时删除第1,第8,第12⾏
Range.Inrt ⽅法 插⼊
剑桥少儿英语教案
Range(“1:1,8:8,12:12”).Inrt 同时在第1,第8,第12⾏上⾯插⼊⼀⾏空⽩⾏
以上列举了⼩部分常⽤的对象、属性和⽅法,每个对象都有不同的属性和⽅法,不同的属性和⽅法可能会有多个参数,想要获得详情的属性和⽅法参数只考帮助⽂档,在VBA代码编辑器中按F1可打开VBA帮助⽂档。