VBA自动动态复制数据

161 篇文章 16 订阅
20 篇文章 2 订阅

以此博客文章纪念2023年度Microsoft MVP续任成功!

AltMVP

实例需求:根据A3单元格(黄色)的输入值动态复制第11行数据,并且在A列填充顺序编号,如下图所示。

在这里插入图片描述

如果A3单元格输入的数值小于当前已复制的行数,则清除多余数据行。如果A3单元格为0时,则仅保留序号1的行内容,和A3单元格为1时的效果相同,如下图所示。

在这里插入图片描述

根据单元格内容变化出发代码实现效果,通常使用工作表的Change事件,示例代码如下。

Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .CountLarge = 1 And .Cells(1).Address = "$A$3" And .Cells(1) <> "" Then
            Application.EnableEvents = False
            iQty = .Value
            If iQty > 1 Then
                Set rngData = [a11:X11]
                rngData.Copy
                With [a12].resize(iQty - 1, 1)
                    .Select
                    ActiveSheet.Paste
                    .Formula = "=row()-10"
                    .Formula = .Value
                End With
            End If
            If iQty = 0 Then iQty = 1
            iLstRow = Cells(Rows.Count, 1).End(xlUp).Row
            If iLstRow > iQty + 10 Then
                Range(iQty + 11 & ":" & iLstRow).Clear
            End If
            .Select
            Application.CutCopyMode = False
            Application.EnableEvents = True
        End If
    End With
End Sub

【代码解析】
第3行代码判断发生变化的单元格(参数Target代表的Range对象)是否满足如下条件。

判断条件说明
.CountLarge = 1发生变化的为单个单元格
.Cells(1).Address = “$A$3”单元格地址为A3,注意此处需要使用绝对引用地址
.Cells(1) <> “”单元格内容不为空

第4行代码禁用系统事件,避免代码修改单元格内容导致再次激活Change事件,进而可能导致死循环。
第5行代码读取Target单元格内容(下文简称为输入)。
第6行代码判断输入是否大于1,如果满足条件第7~14行代码复制数据行,并且更新序号列。
第7~8行代码拷贝被复制的数据行。
第10行代码选中粘贴区域的第一列单元格区域。
第11行代码粘贴数据行。
第12行代码在序号列设置公式。
第13行代码将序号列的公式转换为数值。
第16行代码更新iQty变量的值,输入为0时的效果与为1时相同,这样可以简化后续代码。
第17~20行代码用于实现当数据行总数大于输入值时,清理多余数据行。
第17行代码获取最后数据行的行号。
第18行代码判断数据行总数是否大于输入值,如果满足条件,第19行代码清空多余的数据行。
第21行代码选中Target单元格。
第22行代码清空系统剪切板。
第23行代码恢复系统事件机制。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值