复制,查找原表数据填入母表中的指定单元格
各位大神,请帮忙,本人小白一名,刚学写代码,但知识有限,未能完成达到目的,请求大神们帮忙,谢谢!要求:我要根据工作薄中【附件2】现场实际收方资料来汇总到【生成数据】表中来,【生成数据】表每28行为一页对应收集【附件2】每65行为一页,
1、首先要根据【附件2】表有多少个65行,【生成数据】表先复制多少个1-28行的表格样式在本工作表内,要求复制的单元格与1-28行的表格样式一样,大小,格式等;【我怎么复制都只能复制成值 ,单元格大小格式没能正确复制,求大神们帮忙,谢谢】
2、再根据【附件2】表中对应每页的,F20-N59单元格中的数据,只要K列的值不为0的行 ,将对应的F,G,K列单元格的值复制到【生成数据】表中对应每页的B,C,D列对应的行的单元格中。循环完成所有页的内容。
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 小助理,如未能正确解答您的问题,请继续追问。 填入指定,如果是一次性的不如自己完成 FishC 发表于 2025-4-7 14:21
VBA实现跨表数据复制的解决方案:
以下是实现需求的代码模板(请根据实际情况调整工作表名称):
谢谢大神,我要的是python代码,谢谢 import openpyxl
# 加载工作簿和工作表
wb = openpyxl.load_workbook(r'AAA.xlsx')
ws = wb['生成数据']
param_ws = wb['参数']
# 获取循环次数
loop_count = param_ws['B2'].value
# 复制数据
for i in range(1, loop_count + 1):
for row in ws.iter_rows(min_row=1, max_row=28):
new_row =
ws.append(new_row)
# 保存工作簿
wb.save('AAA2.xlsx')
以上代码只能对表的值进行复制,不能对表格的格式,比如有合并单元格的,有字体大小不同的,都没能进行复制,请大神帮忙指导,谢谢了。
页:
[1]