|
发表于 2025-4-7 14:21:44
|
显示全部楼层
VBA实现跨表数据复制的解决方案:
以下是实现需求的代码模板(请根据实际情况调整工作表名称):
- Sub 数据汇总()
- Dim wsSource As Worksheet, wsTarget As Worksheet
- Dim totalPages As Long, page As Long
- Dim i As Long, targetRow As Long
-
- Set wsSource = ThisWorkbook.Sheets("附件2")
- Set wsTarget = ThisWorkbook.Sheets("生成数据")
-
- Application.ScreenUpdating = False
-
- ' 步骤1:创建表格模板
- totalPages = Application.Ceiling(wsSource.UsedRange.Rows.Count / 65)
- For page = 2 To totalPages
- ' 复制模板行(含格式)
- wsTarget.Rows("1:28").Copy
- wsTarget.Rows((page - 1) * 28 + 1).Insert Shift:=xlDown
- Next page
-
- ' 步骤2:填充数据
- For page = 1 To totalPages
- ' 源数据区域
- Dim srcStart As Long: srcStart = (page - 1) * 65 + 20
- ' 目标区域
- Dim targetStart As Long: targetStart = (page - 1) * 28 + 5
-
- For i = 0 To 39 ' 处理F20-N59共40行
- If wsSource.Cells(srcStart + i, 11) <> 0 Then ' 检查K列
- targetRow = targetStart + (i \ 4) ' 每4行数据占用1行位置
-
- ' 复制数据
- wsTarget.Cells(targetRow, 2) = wsSource.Cells(srcStart + i, 6) ' F列
- wsTarget.Cells(targetRow, 3) = wsSource.Cells(srcStart + i, 7) ' G列
- wsTarget.Cells(targetRow, 4) = wsSource.Cells(srcStart + i, 11) ' K列
- End If
- Next i
- Next page
-
- Application.CutCopyMode = False
- Application.ScreenUpdating = True
- MsgBox "处理完成!"
- End Sub
复制代码
关键要点说明:
- 复制格式问题:使用 .Copy + .Insert 方法可保留原格式
- 行号计算逻辑:
- 源数据页:每65行一页,起始行号计算为 (page - 1) * 65 + 20
- 目标页:每28行一页,数据起始行为第5行
- 数据填充规则:每4行源数据对应1行目标数据(根据常见收方表格布局设计)
注意事项:
- 请先备份文件!
- 根据实际表格结构调整以下参数:
srcStart(源数据起始行)
targetStart(目标数据起始行)
i = 0 To 39(处理行数)
如果遇到具体错误,可以贴出错误提示和涉及的行号,我们可以进一步排查。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|