-
2021-02-06 21:55:27
VBA中,将一个区域赋值给变量(定义为一个变量),然后其中进行操作。这样可以简写。
Sub Macro1() Set 表格区域 = Range("A9:H40") 表格区域.Cells(4, 8).Select End Sub
更多相关内容 -
Excel 2010 VBA 入门 027 单元格批量赋值
2021-04-02 15:07:19利用Value属性给单元格赋值 For Each---Next循环 使用For Each---Next循环的注意事项 利用Value属性给单元格区域赋值 单元格( Range)对象的Address属性 示例: 如图所示,该表为某公司员工的工资表。现公司...目录
示例:
如图所示,该表为某公司员工的工资表。现公司政策调整,需要将所有员工的补贴统一为200元,该如何用VBA实现?
员工编号 姓名 基本工资 补贴 0006 程建华 2875 0 0009 李国敏 3050 0 0016 袁志刚 3523 0 0017 周汉林 2890 0 0018 骈永富 2850 0 0020 孙玉梅 2580 0 0023 陈亚菁 3460 0 0026 康小芸 1800 0 0028 刘晨 5318 0 0042 齐光 5425 60 0052 于健惠 4320 0 0060 王文群 1875 0 0066 曾国安 4726 0 0072 刘志峰 1850 0 0080 刘玉录 1385 0 0114 俞卫广 6700 0 0125 杨建军 2700 0 0209 曲波 3215 0 0215 林革壮 1565 0 0233 李卫卿 6213 0 0247 申玲 1230 0 0260 孙正发 1950 200 0265 毛传阳 3500 0 0288 张元端 2465 0 0293 朱凌波 3420 0 0314 张宏 2310 0 0327 郦锡文 1912 0 0328 张占斌 1800 0 0334 曹阳 2632 0 0352 周书敬 4200 0 0370 姚胜 5300 500 0371 郭建 1571 0 0374 高波 6200 50 0377 卢卫 3200 0 0391 赵秀池 2450 0 0399 罗卉宁 1800 0 Option Explicit Sub 批量设置补贴() '设置计数变量 Dim RowN As Long '利用For循环 For RowN = 2 To 37 '以下两个语句任选一句 Cells(RowN, "D").Value = 200 'Range("D" & RowN).Value = 200 Next End Sub
利用Value属性给单元格赋值
Value属性是单元格的默认属性,无论是Range对象还是Cells对象,都可以使用Value属性进行赋值。当需要修改单元格的值时,可以在Value属性中写入某个值。Value属性可以接受任何非对象的基本数据类型。当需要给单元格区域批量赋值时,通常采用循环结构给单元格赋值。
由于能够准确得知单元格范围,本例中采用了For---Next循环对某一列的单元格区域进行赋值。若需要对某个多行多列的矩形区域进行赋值,如B2:D37,可以采用如下嵌套的循环结构:Sub 批量设置补贴2() Dim RowN As Long Dim ColN As Long For RowN = 2 To 37 For ColN = 2 To 4 Cells(RowN, ColN).Value = 100 Next Next End Sub
此时,由于列数也在产生变化,而通常采用Cells对象给单元格赋值。在大部分情况下,由于行号和列号均能进行数字化,因而Cells对象使用频率要超过Range对象。
For Each---Next循环
For Each---Next循环可以用来访问某个集合中所有的元素,其语法格式为
For Each element In group [statements] [Exit For] [statements] Next [element]
其中,参数element表示集合中某个元素的变量,group表示某个集合。group所表示的集合可以是单元格区域、工作表集合、工作簿集合、数组集合等。在使用该循环结构时,element所表示的变量的类型必须与group集合中的元素类型一致。
Sub 批量设置补贴2() '设置单元格变量 Dim Rng As Range For Each Rng In Range("D2:D37") Rng.Value = 200 Next End Sub
使用For Each---Next循环的注意事项
使用For Each---Next循环可以极大地方便开发者对对象进行批量的操作,但在使用中应注意以下两点。
- 表示元素的对象应显式声明,并且避免使用Variant对象。
- 当需要进行属性更改时,即使是默认属性,该属性也不能省略。
如果出现上述错误,则VBA程序会对开发者的实际意图进行误判,而造成结果的错误。比如以下程序将不会修改任何一个单元格。
Sub 此程序不会修改任何单元格() '设置单元格变量 Dim Rng As Variant For Each Rng In Range("D2:D37") Rng.Value = 200 Next End Sub
利用Value属性给单元格区域赋值
当引用单元格区域的Value属性时,则表示该区域所有单元格的Value属性,因而通过此简单的赋值语句可以实现批量赋值。
同样,能够使用该方法进行批量修改的单元格属性有:NumberFormat属性、NumberFormatLocal属性、Font属性(字体)、Interior属性(填充)和Border属性等。绝大部分能够通过工作表中批量操作的属性,均能够用VBA访问其相应的属性来进行批量修改。Sub 批量设置补贴3() Range("D2:D37").Value = 200 End Sub
单元格( Range)对象的Address属性
Address属性是Range对象一个非常有用的属性。通过该属性,可以获取各种形式的单元格地址,其语法如下:
Range.Address(RowAbsolute,ColumnAbsolute,ReferenceStyle,External,RelativeTo)
其中,Range为一个单元格或单元格区域对象。
参数RowAbsolute为逻辑值,当其为True时,表示行以绝对引用返回,反之表示相对引用
参数ColumnAbsolute为逻辑值,当其为True时,表示列以绝对引用返回,反之表示相对引用。
参数ReferenceStyle表示引用的形式,默认为xIA1(A1引用方式),也可设置为xIR1C1(R1C1引用方式)。
参数External为逻辑值,当其为True时,表示以外部引用的方式返回单元格地址,其中包括工作簿、工作表的引用。其默认值为False时,表示仅返回单元格的地址。
参数RelativeTo适用于R1C1引用时的相对引用,则此时该参数需要设置一个单元格对象,表示其相对引用的起始位置。
-
通过VBA锁定单元格的值
2022-05-13 09:14:02'本功能可以实现通过判断表格第26列的布尔值来决定是否允许用户修改单元格的值 '不允许修改的逻辑为:保存上一次选中单元格的range和range的value '不允许修改的核心方法是给上一次选中的单元格赋值修改前的值Option Explicit 'iRng 为上一次选中的单元格,全局变量 Dim iRng As Object 'val为上一次选中单元格的值 Dim val Private Sub Worksheet_SelectionChange(ByVal Target As Range) '本功能可以实现通过判断表格第26列的布尔值来决定是否允许用户修改单元格的值 '不允许修改的逻辑为:保存上一次选中单元格的range和range的value '不允许修改的核心方法是给上一次选中的单元格赋值修改前的值 '保存上一次选中单元格的range是为了知道上一个选中单元格的地址,存值是因为上一个选中的单元格值修改就找不到了 'bug:如果选中的一个区域而不是单元格则无效 '如果是操作锁定列,或表格之外的区域则退出sub If Target.Column > 25 Then Exit Sub '初始化状态栏 Application.StatusBar = "" If Cells(Target.Row, 26) Then '在状态栏显示单元格锁定信息,没有锁定则无需显示 Application.StatusBar = Application.StatusBar & "----当前单元格已锁定" End If '如果选中的不是一个区域则 If Not IsArray(Target.Value) Then '如果iRng没有赋值则现在赋值 If iRng Is Nothing Then Set iRng = Target val = iRng.Formula Else '判断本列是否锁定 If Cells(iRng.Row, 26) Then '如果锁定了,且现在的值不等于原来的值则,还原原来的值 If iRng.Formula <> val Then '写入修改的日志信息 iLog Target '时光倒流 iRng.Formula = val '写入修改失败的日志信息 log.Cells(log.Cells(1, 10).Value - 1, 5).Value = False End If Else '如果没有锁定,且现在的值不等于原来的值 If iRng.Formula <> val Then '写入日志 iLog Target '写入修改成功的日志信息 log.Cells(log.Cells(1, 10).Value - 1, 5).Value = True End If End If End If '保留时光 Set iRng = Target '保留时光公式 val = iRng.Formula End If End Sub Private Sub iLog(ByVal Target As Range) Debug.Print log.Cells(1, 10).Value '在第1列写入时间 log.Cells(log.Cells(1, 10).Value, 1) = Now '在第2列写入单元格地址 log.Cells(log.Cells(1, 10).Value, 2) = Target.Address '在第3列写入单元格原值 log.Cells(log.Cells(1, 10).Value, 3) = val '在第4列写入单元格新值 log.Cells(log.Cells(1, 10).Value, 4).Value = iRng.Formula '在第10列第1行写入下一次写入新的日志的行号 log.Cells(1, 10).Value = log.Cells(1, 10).Value + 1 End Sub
下面是运行效果, 代码放在sheet1里面使用,再新建一个sheet,在VBA界面属性里面修改新建的sheet2名称为log
-
VBA 用变量或数组引用不连续单元格
2020-03-15 15:53:36在工作中,常常会遇到引用不连续单元格...则用vba方法选中这三个不连续单元格的代码如下: 1, range("A1,B2,B5").select 2,Union([A1], [B2], [B5]).selcet 以上均可使用range对象变量进行直接引用. dim c as ran...在工作中,常常会遇到引用不连续单元格的情况,经过摸索总结,有以下方法:
一、对象变量引用单元格本身
假如有三个不连续的单元格:A1,B2,B5
则用vba方法选中这三个不连续单元格的代码如下:
1, range("A1,B2,B5").select
2,Union([A1], [B2], [B5]).selcet
以上均可使用range对象变量进行直接引用.
dim c as range
set c=range("A1,B2,B5") 或者 set c=Union([A1], [B2], [B5])
二、数组元素引用单元格数据
为了便于循环引用,可将不连续单元格数据使用array()函数组成自定义数组,然后循环引用.
比如上述三个单元格,
dim brr
brr = Array([a1], [b2], [b5])
当然,考虑到通用性问题,可以将array中的元素使用变量代替
dim brr
dim a,b,c
set a=[a1]:set b=[b2]:set c=[b5]
brr= Array(a,b,c)
组成自定义数组后,便可使用brr(i)的方式进行相应单元格数据的引用.
三、不连续单元格一次性赋值
上面一、二我们得到了不连续单元格的对象引用以及数组方式的数据引用.为此将二者结合起来,可以进行不连续单元格的批量赋值.
采用循环,一对一进行赋值.
dim rng as range
i=0
for each rng in c
rng=brr(i)
i=i+1
next
-
Excel 2010 VBA 入门 028 向单元格输入公式
2021-04-02 15:49:20利用Formula属性给单元格输入公式 Formula属性和Value属性的联系与区别 利用FormulaR1C1属性给单元格输入公式 R1C1引用样式的规则 (1)“绝对引用”方式 (2)“相对引用”方式 (3)“混合引用”方式 通过代码... -
在Excel中利用VBA实现多表单元格数据的读取与赋值应用举例
2020-12-22 10:52:39俺也不是VBA学员,只得从网上临时学习VBA知识,以解其燃眉之急!现将心得体会与大家分享,虽然不是啥好方法,但是足以应付她的问题了,凡事只可问心无愧,本文绝无炫耀之意;希望对大家有所帮助!注:图片中显示的... -
Excel 2010 VBA 入门 024 单元格的性属与方法
2021-03-31 14:30:29示例,通过VBA选取单元格 用对象变量表示单元格对象 Evaluate方法表示单元格对象 Evaluate方法的简写模式 Evaluate方法的一般模式与简写模式的区别 单元格对象的Select方法 对象的概念 对象是ExceIVBA中一... -
vba 属性 选择 方法 赋值 复制 删除 常量 变量
2018-09-16 17:02:53Sub 属性() ...'VBA对象属性的赋值 Sub 属性赋值() Sheet2.Name = "效率" Sheet2.Range("a1") = "hello vba" End Sub Sub 选择方法() Range("a1:a10")... -
VBA 单元格基本操作 - 值的相关操作
2020-08-06 22:43:34今天还是讲讲单元格操作 一、删除空行 如果是上面的表格要删除空行的话,我们想到的是先删掉第1行,再第2行,再第3行……但是对于程序来说,删完第1行后,第2行就变成了第1行后面就会出错,所以我们先从后面... -
Excel 2010 VBA 入门 025 单元格区域
2021-03-31 15:10:43在Excel中,如要以地址表示某个矩形的单元格区域,则需要运用冒号(:)运算符,在其两侧分别写入该矩形区域对角的两个单元格地址,即最左上角的单元格地址和最右下角的单元格地址,或者最左下角的单元格地址和最右上... -
VBA对指定单元格填充颜色并且赋值
2016-12-20 09:19:00使用VBA对指定的单元格赋值并填充颜色 ====================================================== 代码区域 ====================================================== Sub row应用() For Each rw In Rows(&... -
了解VBA的变量声明及赋值
2017-02-09 20:05:001.几种不同的声明:公共变量:Public变量名As数据类型 私有变量:Private变量名As数据类型 静态变量:Static变量名As数据类型 Dim的声明是最常见的声明,包括以上三种,都是针对变量不同的作用域来选择如何声明... -
Excel VBA:合并单元格并保留所合并单元格的全部数据
2020-06-18 15:34:10在Excel中,使用合并单元格功能时,最后的结果将只是所合并区域左上角单元格中的数据,如图1所示。 然而,很多时候我们都需要在合并的同时也能保留单元格的的数据。下面的程序在合并单元格后将保留合并单元格区域中... -
第043篇:VBA之单元格简写与引用、值与地址
2020-06-10 13:01:15[单元格地址],这种写法不支持内含变量 Sub 单元格简写() '不用加Range和Cells [a3].Select '引用一个单元格a3 [b2:c6].Select '引用单元格区域b2到c6 [a3, b2:c6, b8:d12].Select '引用a3、b2:c6、b8:d12多个... -
VBA 不能给数组赋值--array() 或[{}] 都不可以对静态数组赋值
2019-12-23 18:15:31'array()函数返回的必须是变量,或变量对等的动态数组,不能赋值给静态数组 'arr2 = [{3, 4, 5, "6", 7, 0, 1, 2, 8, 9}] 也不行 'arr2() = Array(3, 4, 5, "6", 7, 0, 1, 2, 8, 9) arr2(3) = 1 arr... -
Excel:VBA操作单元格对象
2020-06-20 23:46:58Range(“a2”).Value = 1 '表示给单元格赋值为1,Range的默认属性就是Value Range(“a1”).Offset(2, 3).Select '以单元格a1为基准,下移2行,右移3列,单元格偏移 Range(“a1”).End '单元格所在区域的边界 Range... -
VBA 根据单元格颜色,填充其他单元格颜色时注意的问题
2021-02-07 21:27:16今天在做时序图,填充单元格颜色的时候,想让使用者从源单元格的颜色,来确定填充时单元格的颜色。用宏录制是: Sub Macro3() Range("D4:G8").Select With Selection.Interior .Pattern = xlPatternSolid .... -
VBA操作Excel之获取单元格区域
2020-10-17 12:02:48VBA操作Excel之获取单元格区域一、VBA通过索引引用工作表二、VBA获取单元格区域三、VBA调用方法参数传值参考文档 一、VBA通过索引引用工作表 VBA打开工作簿后,通常一个工作簿有若干个工作表Sheet,访问其中一个工作... -
【VBA研究】变量定义的类型和实际赋值类型
2015-07-10 11:52:37不过,实验发现,VBA对变量类型没有进行严格的管控,不管哪种情况,定义的类型和实际使用中赋值类型并没有什么关系,也就是说定义为integer的变量同样赋值字符串,反之也然。 这样的结果往往会在程序中产生歧义,... -
Excel VBA基础语法——变量(三)
2018-08-04 14:22:02任何语言(汉语、英语)都得遵守一定的规则,机器语言也不例外,Excel VBA编程语言也要遵守相关的语法规则,否则的话你编写的代码计算机是无法识别和执行的。本节开始学习Excel VBA编程语言的语法规则,虽然很... -
用VB在EXCEL中循环给单元格的超链接赋值
2020-12-24 16:48:10ActiveSheet.Hyperlinks.Add Anchor:=Cells(1, 1), _ Address:=Cells(1, 3).Value 2、用VB在EXCEL中循环给单元格的超链接赋值 Sub test1() Dim i As Integer For i = 1 To 13 Cells(i, 2) = i ActiveSheet.... -
Excel 2010 VBA 入门 016 定义变量使VBA程序更灵活
2021-03-23 14:45:16在VBA中,可以通过Dim语句定义变量,在程序运行的过程中,定义的变量可以随时赋值或读取。 目录 步骤1 步骤2 步骤3 步骤4 说明 声明变量 变量名的命名规则 VBA的数据类型 数据类型的分类及表示方式 (1)... -
VBA对单元格及区域、行、列的选择、写入、复制、删除、插入等
2021-05-02 18:28:59意思就是当前应用程序(excel)下面的已经打开的第一个工作薄下面的第一个工作表里面的A1单元格,但一般情况下我们不需要这么麻烦,如果我们只对当前的表格操作,前面的都可以省略,只需要写range(“A1 -
VBA窗体form和控件初接触(3): 窗体控件名加变量进行控制等
2021-12-08 17:56:141 如果需要,窗体的控件加变量,实现控制 Controls("Label" & (41 + I)).Caption = "中了第" & ws1.Range("g23") & "个" & Chr(10) & ws1.Range(" k23") & "*" & ws1.Range(" m23") 重点就是 方式1 Controls("") ... -
【原创】VBA学习笔记(307)VBA的一些细节:比如 cells() 可随意,但是 range() 赋值需要range().value
2019-12-27 13:58:141 range赋值,有时候注意些完整,加range().value cells() 赋值 可以 cells()=cells() range() 赋值 不可以 range()=range() Range("b5:d7") = Range("b1:d3").Value 才可以 Sub test112() Range("f1:h3") = .... -
VBA基础语法:变量
2020-01-02 11:46:59目录 声明变量 ...写赋值语句 声明常数 声明变量 通常会使用 Dim 语句来声明变量。一个声明语句可以放到过程中以创建属于过程的级别的变量。或在声明部分可将它放到模块顶部,以创建属于模块级别的... -
如何使用VBA将变量值拷贝到剪贴板?
2021-04-18 04:24:36VBA中使用Excel拷贝和粘贴方法是很容易的,并且很多时候为了提升代码运行效率,应尽量避免在代码中使用拷贝和站,而应优先采用直接赋值的方法。 不可否认,有些应用场景中仍然需要将某些内容放置到剪贴版中,这样... -
关于利用EXCEL VBA 获取单元格地址、选取、复制、分列到其它工作薄中以及遍布文件夹的操作
2019-09-08 13:49:531.EXCEL VBA遍布文件夹的操作 关于VBA遍历文件夹主要用的是提供的Application.FileDialo函数来由个人进行自由选择,通过获取选择的文件夹地址之后,通过Dir函数来匹配选取文件夹下的相应的文档。相应的VBA程序代码... -
【VBA(五):操作单元格对象】【单元格+单元格对象常用操作+小结及练习】
2020-04-13 20:13:36本章主要内容:单元格,单元格对象常用操作,小结及练习。 -
VBA,单元格处理,数据复制,格式设置,折线图,图表属性设置
2020-05-14 21:32:41countRows是前面定义的记录总行数的变量 fragState = "FindStandbyStart" ' 设置变量并赋值 startRows = 2 endRows = 0 countLoop = 0 For i = 2 To countRows ' for循环,从2循环到countRows(表示总行数的变量...