You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA需求:遍历单元格区域并将每个单元格内容复制9次

解决动态数据区域重复粘贴需求的Excel VBA代码

针对你描述的动态电子表格数据处理需求——遍历从G列开始的非空单元格,将每个内容重复9次写入另一工作表的D列,我整理了一段实用的VBA代码,还加了细节处理来适配动态数据的场景:

Sub RepeatValuesToDColumn()
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim sourceRange As Range
    Dim cell As Range
    Dim lastRow As Long
    Dim lastCol As Long
    Dim targetRow As Long
    Dim i As Integer
    
    ' 定义源工作表和目标工作表,可根据实际名称修改
    Set wsSource = ThisWorkbook.Worksheets("源数据") ' 替换成你的源表名
    Set wsTarget = ThisWorkbook.Worksheets("目标表") ' 替换成你的目标表名
    
    ' 获取源数据区域的最后一行和最后一列(从G列开始)
    lastRow = wsSource.Cells(wsSource.Rows.Count, "G").End(xlUp).Row
    lastCol = wsSource.Cells(2, wsSource.Columns.Count).End(xlToLeft).Column
    
    ' 定位动态源数据区域(G列到最后一列,第2行到最后一行)
    Set sourceRange = wsSource.Range(wsSource.Cells(2, "G"), wsSource.Cells(lastRow, lastCol))
    
    ' 获取目标工作表D列的最后一行,避免覆盖已有数据
    targetRow = wsTarget.Cells(wsTarget.Rows.Count, "D").End(xlUp).Row + 1
    
    ' 遍历源区域每个单元格
    For Each cell In sourceRange
        ' 只处理非空单元格
        If cell.Value <> "" Then
            ' 重复写入9次
            For i = 1 To 9
                wsTarget.Cells(targetRow, "D").Value = cell.Value
                targetRow = targetRow + 1
            Next i
        End If
    Next cell
    
    MsgBox "数据处理完成!", vbInformation
End Sub

代码关键细节说明:

  • 动态区域定位:通过End(xlUp)和End(xlToLeft)自动获取源数据的最后一行和最后一列,不管用户怎么修改数据,都能准确覆盖有效区域。
  • 非空判断:只处理有内容的单元格,跳过空值,避免无效写入。
  • 目标行定位:先找到目标D列的最后一行再开始写入,不会覆盖原有数据(如果目标表D列已有内容的话)。
  • 自定义工作表名:记得把代码里的"源数据"和"目标表"替换成你实际使用的工作表名称。

使用方法:

  1. 打开你的Excel文件,按下Alt + F11打开VBA编辑器。
  2. 插入一个新的模块(右键点击工作簿名称 → 插入 → 模块)。
  3. 将上面的代码粘贴到模块中,修改工作表名称为你自己的。
  4. 回到Excel界面,按下Alt + F8选择RepeatValuesToDColumn宏运行即可。

内容的提问来源于stack exchange,提问作者kDubya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:55:10