鱼C论坛

 找回密码
 立即注册
查看: 170|回复: 4

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

[复制链接]
发表于 2025-4-7 14:20:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

        
生成数据.png
附件2.png

收方单样表1.rar

837.68 KB, 下载次数: 0

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-7 14:21:44 | 显示全部楼层
VBA实现跨表数据复制的解决方案:

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


  1. Sub 数据汇总()
  2.     Dim wsSource As Worksheet, wsTarget As Worksheet
  3.     Dim totalPages As Long, page As Long
  4.     Dim i As Long, targetRow As Long
  5.    
  6.     Set wsSource = ThisWorkbook.Sheets("附件2")
  7.     Set wsTarget = ThisWorkbook.Sheets("生成数据")
  8.    
  9.     Application.ScreenUpdating = False
  10.    
  11.     ' 步骤1:创建表格模板
  12.     totalPages = Application.Ceiling(wsSource.UsedRange.Rows.Count / 65)
  13.     For page = 2 To totalPages
  14.         ' 复制模板行(含格式)
  15.         wsTarget.Rows("1:28").Copy
  16.         wsTarget.Rows((page - 1) * 28 + 1).Insert Shift:=xlDown
  17.     Next page
  18.    
  19.     ' 步骤2:填充数据
  20.     For page = 1 To totalPages
  21.         ' 源数据区域
  22.         Dim srcStart As Long: srcStart = (page - 1) * 65 + 20
  23.         ' 目标区域
  24.         Dim targetStart As Long: targetStart = (page - 1) * 28 + 5
  25.         
  26.         For i = 0 To 39  ' 处理F20-N59共40行
  27.             If wsSource.Cells(srcStart + i, 11) <> 0 Then ' 检查K列
  28.                 targetRow = targetStart + (i \ 4) ' 每4行数据占用1行位置
  29.                
  30.                 ' 复制数据
  31.                 wsTarget.Cells(targetRow, 2) = wsSource.Cells(srcStart + i, 6)  ' F列
  32.                 wsTarget.Cells(targetRow, 3) = wsSource.Cells(srcStart + i, 7)  ' G列
  33.                 wsTarget.Cells(targetRow, 4) = wsSource.Cells(srcStart + i, 11) ' K列
  34.             End If
  35.         Next i
  36.     Next page
  37.    
  38.     Application.CutCopyMode = False
  39.     Application.ScreenUpdating = True
  40.     MsgBox "处理完成!"
  41. End Sub
复制代码


关键要点说明:
  • 复制格式问题:使用 .Copy + .Insert 方法可保留原格式
  • 行号计算逻辑:
      

        
    • 源数据页:每65行一页,起始行号计算为 (page - 1) * 65 + 20
        
    • 目标页:每28行一页,数据起始行为第5行
        
  • 数据填充规则:每4行源数据对应1行目标数据(根据常见收方表格布局设计)


注意事项:
  • 请先备份文件!
  • 根据实际表格结构调整以下参数:
      srcStart(源数据起始行)
      targetStart(目标数据起始行)
      i = 0 To 39(处理行数)


如果遇到具体错误,可以贴出错误提示和涉及的行号,我们可以进一步排查。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-7 15:47:34 | 显示全部楼层
填入指定,如果是一次性的不如自己完成
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-4-7 17:02:26 | 显示全部楼层
FishC 发表于 2025-4-7 14:21
VBA实现跨表数据复制的解决方案:

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

谢谢大神,我要的是python代码,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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 = [cell.value for cell in row]
        ws.append(new_row)

# 保存工作簿
wb.save('AAA2.xlsx')
以上代码只能对表的值进行复制,不能对表格的格式,比如有合并单元格的,有字体大小不同的,都没能进行复制,请大神帮忙指导,谢谢了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-5 20:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表