Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 986|回复: 7

[已解决]接近2万条数据循环复制引用单元格区域

[复制链接]
发表于 2021-12-19 11:00 | 显示全部楼层 |阅读模式
各位大佬,本人自学VBA三天,首次编了一个for循环查找复合条件,并复制引用正行。虽然能跑起来,但电脑瘫痪不响应了。
目的:把“生产计划”里的"机型"对应行提取,拷贝到“部品明细”里”机型“相匹配的行里。
备注:1.“生产计划”里“机型”是“唯一”出现的         
备注:2.“部品明细”里“机型”是“重复"出现的  
现有代码虽然摸索实现上述功能,但在时间作业时,因为数据量太大,电脑跑不动。
请各位前辈老师,帮忙看看如何能够提高效率。
最佳答案
2021-12-19 16:45
  1. Sub demo()
  2.     Dim arr1, arr2, i As Long, j As Long
  3.     arr1 = Sheet3.Range("a3:a" & Sheet3.Range("a3").End(xlDown).Row)
  4.     arr2 = Sheet2.Range("f2:f" & Sheet2.Range("f2").End(xlDown).Row)
  5.     For i = 1 To UBound(arr1, 1)
  6.             For j = 1 To UBound(arr2, 1)
  7.                     If arr2(j, 1) = arr1(i, 1) Then
  8. Sheet2.Range(Sheet2.Cells(j + 1, "J"), Sheet2.Cells(j + 1, "AM")) = Sheet3.Range(Sheet3.Cells(i + 2, "E"), Sheet3.Cells(i + 2, "AH")).Value
  9.                     End If
  10.             Next j
  11.     Next i
  12. End Sub
复制代码

你那第二个表的编码也不是唯一的,不够严谨,你看下这个能解决需求了吗?用时2秒多,解决问题请给最佳。

因为你需求说得不是很清楚,所以可能有偏差,解决问题是:
根据生产计划表-产品编码 VS 部分明显-使用机型匹配
相同就把对应生产计划表得E~AH得内容赋值给部分明显表得J~AM
如果只是复制日期1~31的内容就改一下代码里面的区间就可以了
部品明细表.png
生产计划表.png

求高速循环复制引用单元格.rar

806.02 KB, 下载次数: 8

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2021-12-19 11:34 | 显示全部楼层
本帖最后由 林木水 于 2021-12-19 11:38 编辑

你2个表,一个叫产品编号,一个叫适应机型,2个不一样的叫法是同一个东西吗?
另外你的341 378;342 379也是相互重复,并不是唯一。

你上面的描述也没讲清楚,你就举一个例子,先弄一个是要做到什么效果。这种数据大的可以用数组会比较快
回复

使用道具 举报

 楼主| 发表于 2021-12-19 12:13 | 显示全部楼层
本帖最后由 13591163120 于 2021-12-19 12:15 编辑
林木水 发表于 2021-12-19 11:34
你2个表,一个叫产品编号,一个叫适应机型,2个不一样的叫法是同一个东西吗?
另外你的341 378;342 379也 ...

两个表不一样,产品编号里面数据多,有近2万条。内部条件区域有重复的                      生产计划里的数据少,我想把生产计划里的对应行,粘贴至产品编号里

  

条件列(a)
部品编号   A B  C列       生产计划  A B C D E F J H I G K M           目标 :A B C D E F J H I G K M
                1                                1 5 4  5  8 9 7 0 8                              1 5 4  5  8 9 7 0 8
                1                                2 2 5 4  5  8 9 7 0 8                           1 5 4  5  8 9 7 0 8
                2                                3 5 4  5  8 9 7 0 8                              2 2 5 4  5  8 9 7 0 8
                1                                                                                        1 5 4  5  8 9 7 0 8
                2                                                                                        2 2 5 4  5  8 9 7 0 8
                3                                                                                        3 5 4  5  8 9 7 0 8


回复

使用道具 举报

发表于 2021-12-19 16:45 | 显示全部楼层    本楼为最佳答案   
  1. Sub demo()
  2.     Dim arr1, arr2, i As Long, j As Long
  3.     arr1 = Sheet3.Range("a3:a" & Sheet3.Range("a3").End(xlDown).Row)
  4.     arr2 = Sheet2.Range("f2:f" & Sheet2.Range("f2").End(xlDown).Row)
  5.     For i = 1 To UBound(arr1, 1)
  6.             For j = 1 To UBound(arr2, 1)
  7.                     If arr2(j, 1) = arr1(i, 1) Then
  8. Sheet2.Range(Sheet2.Cells(j + 1, "J"), Sheet2.Cells(j + 1, "AM")) = Sheet3.Range(Sheet3.Cells(i + 2, "E"), Sheet3.Cells(i + 2, "AH")).Value
  9.                     End If
  10.             Next j
  11.     Next i
  12. End Sub
复制代码

你那第二个表的编码也不是唯一的,不够严谨,你看下这个能解决需求了吗?用时2秒多,解决问题请给最佳。

因为你需求说得不是很清楚,所以可能有偏差,解决问题是:
根据生产计划表-产品编码 VS 部分明显-使用机型匹配
相同就把对应生产计划表得E~AH得内容赋值给部分明显表得J~AM
如果只是复制日期1~31的内容就改一下代码里面的区间就可以了
1639903132(1).jpg

求高速循环复制引用单元格.rar

829.58 KB, 下载次数: 15

回复

使用道具 举报

 楼主| 发表于 2021-12-19 18:13 | 显示全部楼层
林木水 发表于 2021-12-19 16:45
你那第二个表的编码也不是唯一的,不够严谨,你看下这个能解决需求了吗?用时2秒多,解决问题请给最佳。
...

大哥,你真乃神人也,我为个这个事咬牙切齿3天,觉都没咋睡好,睡觉都琢磨这事,最后嗯呲瘪肚写个代码出来,把电脑跑瘫痪了。
你尽然用这么短的代码就实现我的需求,感谢之心无以言表,并由衷倾佩你的学识。服了。
学海无涯啊,我这40岁的人,为这个逻辑关系,费劲脑汁,又是研究字典,又是研究高级筛选,又是研究for循环,始终未得其神韵。
回复

使用道具 举报

发表于 2021-12-19 18:16 | 显示全部楼层
13591163120 发表于 2021-12-19 18:13
大哥,你真乃神人也,我为个这个事咬牙切齿3天,觉都没咋睡好,睡觉都琢磨这事,最后嗯呲瘪肚写个代码出 ...

有问题多交流,相互学习。方法确实是个好东西,会用就很简便,坚持学习,肯定也是慢慢会熟练的。
回复

使用道具 举报

 楼主| 发表于 2021-12-19 18:28 | 显示全部楼层
林木水 发表于 2021-12-19 18:16
有问题多交流,相互学习。方法确实是个好东西,会用就很简便,坚持学习,肯定也是慢慢会熟练的。

师傅。如果日期列是个变量,也就是说 有可能只有1周,或半个月,又或是整月的时候,有方法可以解决吗?
回复

使用道具 举报

发表于 2021-12-19 18:34 | 显示全部楼层
那你可以用开始的单元格的resize属性,开始肯定是不变的,研究一下就可以了。不难。
比如:原来表示一个固定的区域是RANGE("A1:A10"),10列
那么用Resize就可以改成RANGE("A1").RESIZE(1,10),而这个10可以改成变量,你想变1周就1周,其他的也都可以
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-7 09:19 , Processed in 0.308122 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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