6545976 发表于 2025-4-7 14:20:36

复制,查找原表数据填入母表中的指定单元格

各位大神,请帮忙,本人小白一名,刚学写代码,但知识有限,未能完成达到目的,请求大神们帮忙,谢谢!
要求:我要根据工作薄中【附件2】现场实际收方资料来汇总到【生成数据】表中来,【生成数据】表每28行为一页对应收集【附件2】每65行为一页,
      1、首先要根据【附件2】表有多少个65行,【生成数据】表先复制多少个1-28行的表格样式在本工作表内,要求复制的单元格与1-28行的表格样式一样,大小,格式等;【我怎么复制都只能复制成值 ,单元格大小格式没能正确复制,求大神们帮忙,谢谢】
      2、再根据【附件2】表中对应每页的,F20-N59单元格中的数据,只要K列的值不为0的行 ,将对应的F,G,K列单元格的值复制到【生成数据】表中对应每页的B,C,D列对应的行的单元格中。循环完成所有页的内容。

      

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

不二如是 发表于 2025-4-7 15:47:34

填入指定,如果是一次性的不如自己完成

6545976 发表于 2025-4-7 17:02:26

FishC 发表于 2025-4-7 14:21
VBA实现跨表数据复制的解决方案:

以下是实现需求的代码模板(请根据实际情况调整工作表名称):


谢谢大神,我要的是python代码,谢谢

6545976 发表于 2025-4-9 15:26:08

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]
查看完整版本: 复制,查找原表数据填入母表中的指定单元格