添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
该文章介绍了一段VBA代码,用于根据A3单元格的输入值动态复制Excel第11行数据并在A列填充顺序编号。当输入值改变时,代码能自动调整行数,如果输入为0或1,只保留一行并填充序号。此外,如果输入值小于已复制的行数,代码会清除多余的数据行。这段代码基于工作表的Change事件触发。 摘要由CSDN通过智能技术生成

实例需求:根据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 '注意:单元格的格式、公式、批注等也会被复制过去哟 Sheets(1).Range("A1").Copy Sheets(1).Range("B1") End Sub Sub CopyRange2() '复制单元格内容示例2,打开