资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
带你入门 VBA,第五讲:如何控制单元格单元格是我们平时接触最多的,所以此讲专门介绍和练习单元格的使用和控制。马上就要开始。 。 。在 VBA 中,单元格常用的表示方法有两种,一种是 RANGE如 A1 在 VBA 的表示方法是 Range(a1)A1:100 的表法方法是: Range(A1:A100)和以前一样,大家先在工作表中插入一个矩形作为执行宏的按纽在按纽上单击右键,单击指定宏 ,再单击新建,在 VBE 窗口中的代码窗口会出现Sub 矩形 1_单击()End Sub在两句中间输入Range(a1)=1000Range 可以代表一个单元格区域,也可以代表一个单元格, 通过Range(a1)=1000 也可以看出, 它的用法是 Range 后括号中带上A1 就可以表示我们平时在工作表用到的中的 A1 单元格了,它在表示一个连续区域时是这个的,Range( 区域的左上角单元格:区域的右下角单元格 )请把刚才的代码再加上一句:Range(a1:a10)=1000 对,如果是不连续的单元格多个区域 ,它是这样表示的:Range(单元格区域 1,单元格区域 2.)把刚才的代码替换为:Range(a1:a10,c1:c10,e1:e10) = 100 再试试 以下是引用 matsumi 在 2004-10-25 21:35:00 的发言: a1=1000 与 Range(a1)=1000 有何区别?A1是 Range(A1)的简写.二者在用法上没有什么区别, 但在输入时有点不同,如当你输入A1后加点时, 后面不会出现属性和方法列表 ,而输入 Range(A1)加点后则会出现属性列表供你选取以下是引用 gvntw 在 2004-10-25 21:40:00 的发言: 也可以这样吧: Union(a1:a10, b3:c10, d5:f7) = 100 Union 是求多个单元格区域的并集,用法是 Union(单元格区域 1,单元格区域 2.) 它返回的是所有区域的所有单元格集合请运行下面的一句:Application.Intersect(Range(a1:a10), Range(a3:c4).Select这句有个 Select,它是单元格被选取的意思。在我们录制宏时,会出现大量的 select,其实在程序中多数 Select 是多余的,它影响速度又会影响程序的运行。如:Range(C16).Select ActiveCell.FormulaR1C1 = 100 Range(C11).Select其实我只是在 C16 单元格中填入数值 100,就会出现这么一大堆代码,这此代码可以优化为:Range(C16).=100 以下是引用 兰色幻想 在 2004-10-25 21:51:00 的发言: 下面请运行下面的一句:Application.Intersect(Range(a1:a10), Range(a3:c4).Select这一句的意思是选中区域 A1:A10 和 A3:C4 重叠的区域,即两个区域共有的区域,此名代码运行的结果是选中区域 A3:A4注意 Intersect 方法是一个非常实用的一个方法,比如我们在动态选取工作表 Sheet1A 列中已存在数据的区域时,就会用到它。在介绍这个用法前还要介绍一下另一个工作表中非常实用的属性:Usedrange你可以选试着运行一下:Activecell.usedrange.Select运行 Activecell.usedrange.Select 你会发现,在当前工作表中的所有用过的区域全被选中了。你明白了吗,其实 usedrange 就是工作表中所有已存在内容的矩形区域,为什么不说是存在内容的单元格呢?原因是比如你在一个空工作表中的 B3 和 C5 单元格任意输入一个数值,运行 Activecell.usedrange.Select后选取的不只是 B3 和 C5 单元格,而是 B3:C5 单元格区域以下是引用 gvntw 在 2004-10-25 22:42:00 的发言: Sheet1.UsedRange.Select我们平时在程序中会看到 Activesheet worksheets(sheet1) sheet1 sheets(sheet1) Sheets(1) 顺便说一说他们的区别 Activesheet 是指当前活动工作表,即你正在操作的工作表 worksheets(sheet1)等同于 sheets(sheet1)是特指工作表 Sheet1,注意这时的 Sheet1 是工作表的名子, 就如同员工工资表一样是工作表的名称, 而 Sheet1 和 Sheets(1),不管你如何命名,Sheet1 和Sheets(1)就只代表第一个工作表, Sheet2 和 Sheets(2)代表第二个工作表。 下面以一个实例说明如何动态选取一个区域:要求:无论工作表中所有单元格如何填入,运行程序后要选取 A 列已用所有区域:代码如下:Intersect(Range(a:a), Sheets(sheet1).UsedRange).SelectRange(a:a)是 A 列,Sheets(sheet1).UsedRange 是工作表 sheet1 已使用的所有单元格区域,用Intersect 求二者的共有区域,结果就是我们所要的 A 列已用所有区域Sub 矩形 1_单击()Application.Intersect(Range(a:a), Sheets(sheet1).UsedRange).SelectEnd Sub以下是引用 先锋 在 2004-10-25 23:27:00 的发言: 结果不是的。你把 A9,A10,A11 内容删掉, 再运行它仍然选 A3:A12 这个区域?其实这中间有个规律:如果你输入的是非数字的字符,即使你删除了,也被当做已用区域(已用过的区域),而当你删除的是你输入的数字时则不受这个限制)以下是引用 先锋 在 2004-10-26 13:01:00 的发言: 兰老师:还是不明白?输入非数字的字符时,确实是这样。但是当输入的数字时,有时还是受这个限制的,如附件中的 A3 删掉后,怎么还选呢?应该是受“Sheets(sheet1).UsedRange 是工作表 sheet1 已使用的所有单元格区域”的影响吧,结果只是二者的共有区域,并不是我们所要的 A 列已用所有区域。因为这个区域是矩形区域,在其他列第三行已填有内容,所以 A3 即使删除也属已用区域。 你可以再试着在 C20 填入任意一个内容, A 列选取的也是到 20 行如果只是简单的给单元格赋值就还是用 的好,快捷. 如果还要有其他控制最好还是用 range().以下是引用 wuaza 在 2004-10-26 20:48:00 的发言: 考一下大家,sheet1.rows(2).range(a3).select 是选中哪个单元格?其实它和这句一样的效果:sheet1.Range(a2).Range(a3).Select这种表示方式是对工作表区域重新进行定位坐标,原来默认是以 A1 为坐标右上端点,而 Range(a2).Range(a3)则重新新定义以 A2 为右上角顶点坐标,在这种坐标系下的 A3 当然是 A4 了,再如:Range(B2).Range(a3)的结果是以 B2 为右上端点,这种坐标下结果就为 B4 了sheet1.rows(2).range(a3).select 是以第二行最右端点为新坐标顶点说了这么多还没有介绍到另一个单元格的表示方式:CellSCellS(行数,列数)如 A1:Cells(1,1) 用 range 表示: range(a1)b2: cells(2,2) 用 range 表示: range(b2)c100: cells(100,3) 用 range 表示: range(c100)cells 也是一个常用的单元格表示方法,它和 Range 在表示单元格时有什么共同点和区别呢?Range 可以表示单元格,也可以表示单元格区域 cells 也是这样,但除了 cells 作为一外集合对象外其他只能表示一个独立的单元格,如:Cells.select 选取工作表所有单元格 Cells(2,2).select 选取 B2 单元格所以在表示单元格区域时,除表示全部单元格外 ,其他均需用 Range 来表示如:range(a1:b20).选中 A 列连续数据区域中最后一个单元格:cells(range(a1).CurrentRegion.Rows.count,1).select 以下是引用 612321 在 2004-10-27 11:44:00 的发言: 老师,我要为我的 VBA 程序设置密码保护的怎么设置啊?在点击 VBE 编辑器菜单的工具 -VBAProject 属性- 保护以下是引用 wuaza 在 2004-10-27 11:34:00 的发言: 再讲一讲 offset 和 resize 的用法吧。offset 是单元格或单元格区域的移动 offset (移动行数,移动列数) resize 是单元格或单元格区域的行数和列数重新设置后范围大小 resize (变动后行数, 变动后列数) 例: Range(A1:B2).Select 选取 A1:B2 区域 Range(A1:B2).Offset(3, 0).Select A1:B2 区域向下移动三行,结果是选中 A4:B5 区域 Range(A1:B2).Resize(2, 4).Select A1:B2 区域重新设置,行数为 2,列数为 4, 结果为选取 A1:D2 Range(A1:B2).Resize(Range(A1:B2).Rows.Count + 2, Range(A1:B2).Columns.Count + 4).Select A1:B2 区域重新设置,在原来行数的基础上加 2 行, 在原来列数的基础上加 4 列, 运行结果为:结果是选取 A1:F4 Sub 矩形 1_单击()Range(A1:B2).Offset(3, 0).SelectEnd SubSub 矩形 2_单击()Range(A1:B2).SelectEnd SubSub 矩形 3_单击()Range(A1:B2).Resize(2, 4).SelectEnd SubSub 矩形 4_单击()Range(A1:B2).Resize(Range(A1:B2).Rows.Count + 2, Range(A1:B2).Columns.Count + 4).SelectEnd Sub以下是引用 hpw 在 2004-10-27 17:14:00 的发言: 不好意思,上面说的太罗索我其实就是想把上面说的第一步要操作的内容都去掉,只保留 0.690,然后改成 p=0.690,放到表格的标题后面就可以了.呵呵,不知道这次说清楚了没有 .一直等待.On Error Resume Next 如出错误, 执行下一句 K = -9 设置变量 K 的初始值,设置 K 目的是控制在购买可能性后添加数的位置 EEE = Application.CountIf(Columns(2), Crosstabs) EEE 为循环的次数,有多少个Crosstabs 就行循环多少次 For I = 1 To EEE 设置循环 K = K + 12 因为每个 Pearson Chi-Square相隔 12 行,所以设置循环一次加 12 AAA = Application.Match(Crosstabs, Columns(2)
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号