分享

VBA对单元格及区域、行、列的选择、写入、复制、删除、插入等 ​

 成已成物 2022-05-08 发布于湖南省

​EXCEL是由很多的对象组成,每个对象都有他的属性和方法,所谓的对象可以理解为所有存在的东西,在同一个程序里的对象之间是存在关系的,比如说上下级关系或同级关系,上下级关系之间用英文句点“.”连接。

例如:

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=1

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)).select 选择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.select就是选择当前工作表的所有单元格,工作表除了是由单元格组成,同时也是由行或列组成,因此选择单元格或行或列还有都可以有多种,一行或一列也是一个区域,所以也是可以使用range指定的。

比如下面几种单元格的选择方法

cells(10).select 选择整个表格里的第10个单元格,顺序是从左到右,再从上到下,这个用法用到的机会并不多

Cells(1, 1).Select 选择第一行第一列交叉的单元格,就是A1

Cells使用方法和range使用方法是不一样的,range(“A1”)是以列号字母加行号代表,列号在前行号在后,要以英文双引号''括起来,意味是字符串的形式,cells(1,1),以索引号行号加列号,行号在前列号在后,中间用英文逗号隔开,不用加英文双引号,意味着里面的数字就是数值。

其实cells还有一个用法,cells(1,“A”).select也是选择A1,这个就有点混血儿的感觉了。前面是行号,数值1,后面是字符列号'A',在编写程序的时候使用cells比使用range更灵活。可以方便使用变量替换.

cells是不能像range一样直接指定区域的,但可以配合Resize属性指定区域,Resize属性是调整指定区域的大小。

比如:

Cells(1, 1).Resize(4, 4).Select 意思是第一行第一列交叉的单元格(就是A1)为左上角第一个单元格向右下调整成一个4*4的单元格区域。相当于range(“A1:D4”)

Rows是当前工作表所有行的集合,因此也可以使用rows来指定行

比如:

Rows(1).select 选择第一行

Rows.select 选择所有行,和Cells.Select 及 Columns.Select 是同样的效果,相当于选择表格上所有单元格。

columns是当前工作表所有列的集合

Columns(1).select 选择第一列

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 & “)”

range.row属性,返回对象的行号,如果是一个区域返回左上角第一个单元格的行号

如:a=Range(“D10”).row 返回单元格D10所在的行号10给变量a

range.column属性,返回对象的列号,如果是一个区域返回左上角第一个单元格的列号

如:b=Range(“B2:F5”).column 返回指定区域左上角第一个单元格b2所在的列号给变量b,注意这里返回的是数值列号不是字母列号,B就是第2列,所以返回的是2

Range.Select 方法 选择对象

range(“A1”).select 选择A1单元格

Range.Clear 方法 清除对象,可使用具体参数指定只清除内容或公式或格式等

Range(“A1:G37”).Clear 清除A1:G37 单元格区域的内容、公式和格式设置等。

Range.Copy 方法将单元格区域复制到指定的区域或剪贴板中。如果没指定目标区域将复制到剪贴板。

下例所示把区域A1:D4复制到 E5开始的同等大小区域。就是复制到E5:H8,可以使用具体参数设置复制粘贴的类型,比如仅复制公式,仅复制值等。

Range(“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.Insert 方法 插入

Range(“1:1,8:8,12:12”).Insert 同时在第1,第8,第12行上面插入一行空白行

以上列举了小部分常用的对象、属性和方法,每个对象都有不同的属性和方法,不同的属性和方法可能会有多个参数,想要获得详情的属性和方法参数只考帮助文档,在VBA代码编辑器中按F1可打开VBA帮助文档。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多