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列已有内容的话)。
- 自定义工作表名:记得把代码里的
"源数据"和"目标表"替换成你实际使用的工作表名称。
使用方法:
- 打开你的Excel文件,按下
Alt + F11打开VBA编辑器。 - 插入一个新的模块(右键点击工作簿名称 → 插入 → 模块)。
- 将上面的代码粘贴到模块中,修改工作表名称为你自己的。
- 回到Excel界面,按下
Alt + F8选择RepeatValuesToDColumn宏运行即可。
内容的提问来源于stack exchange,提问作者kDubya
相关产品推荐
相关产品推荐

