精华内容
下载资源
问答
  • VBA中,将一个区域赋值变量(定义为一个变量),然后其中进行操作
    千次阅读
    2021-02-06 21:55:27

    VBA中,将一个区域赋值给变量(定义为一个变量),然后其中进行操作。这样可以简写。

    Sub Macro1()
    
    
    Set 表格区域 = Range("A9:H40")
    表格区域.Cells(4, 8).Select
    
    End Sub

     

    更多相关内容
  • 利用Value属性给单元格赋值 For Each---Next循环 使用For Each---Next循环的注意事项 利用Value属性给单元格区域赋值 单元格( Range)对象的Address属性 示例: 如图所示,该表为某公司员工的工资表。现公司...

    目录

    示例:

    利用Value属性给单元格赋值

    For Each---Next循环

    使用For Each---Next循环的注意事项

    利用Value属性给单元格区域赋值

    单元格( Range)对象的Address属性


    示例:

        如图所示,该表为某公司员工的工资表。现公司政策调整,需要将所有员工的补贴统一为200元,该如何用VBA实现?

    员工编号姓名基本工资补贴
    0006程建华28750
    0009李国敏30500
    0016袁志刚35230
    0017周汉林28900
    0018骈永富28500
    0020孙玉梅25800
    0023陈亚菁34600
    0026康小芸18000
    0028刘晨53180
    0042齐光542560
    0052于健惠43200
    0060王文群18750
    0066曾国安47260
    0072刘志峰18500
    0080刘玉录13850
    0114俞卫广67000
    0125杨建军27000
    0209曲波32150
    0215林革壮15650
    0233李卫卿62130
    0247申玲12300
    0260孙正发1950200
    0265毛传阳35000
    0288张元端24650
    0293朱凌波34200
    0314张宏23100
    0327郦锡文19120
    0328张占斌18000
    0334曹阳26320
    0352周书敬42000
    0370姚胜5300500
    0371郭建15710
    0374高波620050
    0377卢卫32000
    0391赵秀池24500
    0399罗卉宁18000
    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引用时的相对引用,则此时该参数需要设置一个单元格对象,表示其相对引用的起始位置。
     

    展开全文
  • '本功能可以实现通过判断表格第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

     

    展开全文
  • 利用Formula属性给单元格输入公式 Formula属性和Value属性的联系与区别 利用FormulaR1C1属性给单元格输入公式 R1C1引用样式的规则 (1)“绝对引用”方式 (2)“相对引用”方式 (3)“混合引用”方式 通过代码...
  • 俺也不是VBA学员,只得从网上临时学习VBA知识,以解其燃眉之急!现将心得体会与大家分享,虽然不是啥好方法,但是足以应付她的问题了,凡事只可问心无愧,本文绝无炫耀之意;希望对大家有所帮助!注:图片中显示的...
  • 示例,通过VBA选取单元格 用对象变量表示单元格对象 Evaluate方法表示单元格对象 Evaluate方法的简写模式 Evaluate方法的一般模式与简写模式的区别 单元格对象的Select方法 对象的概念 对象是ExceIVBA中一...
  • Sub 属性() ...'VBA对象属性的赋值 Sub 属性赋值() Sheet2.Name = "效率" Sheet2.Range("a1") = "hello vba" End Sub Sub 选择方法() Range("a1:a10")...
  • 今天还是讲讲单元格操作 一、删除空行 如果是上面的表格要删除空行的话,我们想到的是先删掉第1行,再第2行,再第3行……但是对于程序来说,删完第1行后,第2行就变成了第1行后面就会出错,所以我们先从后面...
  • 在Excel中,如要以地址表示某个矩形的单元格区域,则需要运用冒号(:)运算符,在其两侧分别写入该矩形区域对角的两个单元格地址,即最左上角的单元格地址和最右下角的单元格地址,或者最左下角的单元格地址和最右上...
  • VBA对指定单元格填充颜色并且赋值

    千次阅读 2016-12-20 09:19:00
    使用VBA对指定的单元格赋值并填充颜色 ====================================================== 代码区域 ====================================================== Sub row应用() For Each rw In Rows(&...
  • 1.几种不同的声明:公共变量:Public变量名As数据类型 私有变量:Private变量名As数据类型 静态变量:Static变量名As数据类型 Dim的声明是最常见的声明,包括以上三种,都是针对变量不同的作用域来选择如何声明...
  • 在Excel中,使用合并单元格功能时,最后的结果将只是所合并区域左上角单元格中的数据,如图1所示。 然而,很多时候我们都需要在合并的同时也能保留单元格的的数据。下面的程序在合并单元格后将保留合并单元格区域中...
  • [单元格地址],这种写法不支持内含变量 Sub 单元格简写() '不用加Range和Cells [a3].Select '引用一个单元格a3 [b2:c6].Select '引用单元格区域b2到c6 [a3, b2:c6, b8:d12].Select '引用a3、b2:c6、b8:d12多个...
  • '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...
  • Range(“a2”).Value = 1 '表示给单元格赋值为1,Range的默认属性就是Value Range(“a1”).Offset(2, 3).Select '以单元格a1为基准,下移2行,右移3列,单元格偏移 Range(“a1”).End '单元格所在区域的边界 Range...
  • 今天在做时序图,填充单元格颜色的时候,想让使用者从源单元格的颜色,来确定填充时单元格的颜色。用宏录制是: Sub Macro3() Range("D4:G8").Select With Selection.Interior .Pattern = xlPatternSolid ....
  • VBA操作Excel之获取单元格区域

    千次阅读 2020-10-17 12:02:48
    VBA操作Excel之获取单元格区域一、VBA通过索引引用工作表二、VBA获取单元格区域三、VBA调用方法参数传值参考文档 一、VBA通过索引引用工作表 VBA打开工作簿后,通常一个工作簿有若干个工作表Sheet,访问其中一个工作...
  • 不过,实验发现,VBA变量类型没有进行严格的管控,不管哪种情况,定义的类型和实际使用中赋值类型并没有什么关系,也就是说定义为integer的变量同样赋值字符串,反之也然。 这样的结果往往会在程序中产生歧义,...
  • Excel VBA基础语法——变量(三)

    万次阅读 2018-08-04 14:22:02
    任何语言(汉语、英语)都得遵守一定的规则,机器语言也不例外,Excel VBA编程语言也要遵守相关的语法规则,否则的话你编写的代码计算机是无法识别和执行的。本节开始学习Excel VBA编程语言的语法规则,虽然很...
  • ActiveSheet.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....
  • VBA中,可以通过Dim语句定义变量,在程序运行的过程中,定义的变量可以随时赋值或读取。 目录 步骤1 步骤2 步骤3 步骤4 说明 声明变量 变量名的命名规则 VBA的数据类型 数据类型的分类及表示方式 (1)...
  • 意思就是当前应用程序(excel)下面的已经打开的第一个工作薄下面的第一个工作表里面的A1单元格,但一般情况下我们不需要这么麻烦,如果我们只对当前的表格操作,前面的都可以省略,只需要写range(“A1
  • 1 如果需要,窗体的控件加变量,实现控制 Controls("Label" & (41 + I)).Caption = "中了第" & ws1.Range("g23") & "个" & Chr(10) & ws1.Range(" k23") & "*" & ws1.Range(" m23") 重点就是 方式1 Controls("") ...
  • 1 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中使用Excel拷贝和粘贴方法是很容易的,并且很多时候为了提升代码运行效率,应尽量避免在代码中使用拷贝和站,而应优先采用直接赋值的方法。 不可否认,有些应用场景中仍然需要将某些内容放置到剪贴版中,这样...
  • 1.EXCEL VBA遍布文件夹的操作 关于VBA遍历文件夹主要用的是提供的Application.FileDialo函数来由个人进行自由选择,通过获取选择的文件夹地址之后,通过Dir函数来匹配选取文件夹下的相应的文档。相应的VBA程序代码...
  • 本章主要内容:单元格单元格对象常用操作,小结及练习。
  • countRows是前面定义的记录总行数的变量 fragState = "FindStandbyStart" ' 设置变量赋值 startRows = 2 endRows = 0 countLoop = 0 For i = 2 To countRows ' for循环,从2循环到countRows(表示总行数的变量...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,225
精华内容 490
关键字:

vba单元格赋值变量