ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 216|回复: 5

求助 用sumif和vlookup链接其他工作表信息

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-30 13:07 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
        请教在线老师 怎么用vba写代码 在同工作簿里面链接不同工作表的信息。因为每天都会更新,有时候数量行数多了,用函数运行起来就比较卡。

     感谢你的阅读并希望帮助解决,谢谢!
无标题.png

sumif vlookup.rar

1.68 MB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2024-5-30 15:12 | 显示全部楼层
本帖最后由 rym9401 于 2024-5-30 15:35 编辑

一次传不了,只有搞分卷了。数据接着各表最后数据填写,然后选数据选项-全部刷新,即可更新。不知道你的数据量究竟多大,目前这点数据不算慢。清除公式会更快。

PQ.part1.rar

1.5 MB, 下载次数: 1

PQ.part2.rar

673.28 KB, 下载次数: 1

TA的精华主题

TA的得分主题

发表于 2024-5-30 15:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub 汇总()
  2.     Dim sh As Worksheet
  3.     Set d = CreateObject("scripting.dictionary")
  4.     arr = Sheets("每日出货").Range("a3:a" & Sheets("每日出货").Cells(Rows.Count, 1).End(3).Row)
  5.     For i = 1 To UBound(arr)   '辅助列和行的关系
  6.         d(arr(i, 1)) = i
  7.     Next
  8.     ReDim brr(1 To UBound(arr), 1 To 1)
  9.     For Each t In Array("销售单列表", "出货信息", "入库信息")
  10.         ReDim brr(1 To UBound(arr), 1 To 1)
  11.         Set sh = Sheets(t)
  12.         If t = "销售单列表" Then c1 = "G": c2 = "R": c = 27 'c1:数据列,c2:辅助列,c:本表中输出的列
  13.         If t = "出货信息" Then c1 = "E": c2 = "O": c = 28
  14.         If t = "入库信息" Then c1 = "D": c2 = "F": c = 74   'BV列
  15.         r = sh.Range(c2 & Cells.Rows.Count).End(3).Row
  16.         mydata = sh.Range(c1 & "1:" & c2 & r)
  17.         cmax = UBound(mydata, 2)   '源数据的最大列(辅助列)
  18.         For i = 2 To r
  19.             k = mydata(i, cmax)
  20.             If d(k) > 0 Then brr(d(k), 1) = brr(d(k), 1) + mydata(i, 1)
  21.         Next
  22.         Cells(3, c).Resize(UBound(arr), 1) = brr
  23.         
  24.         If t = "销售单列表" Then   '是否报关
  25.             c = 77  'BY列
  26.             ReDim brr(1 To UBound(arr), 1 To 1)
  27.             For i = 2 To r
  28.                 k = mydata(i, cmax)
  29.                 If mydata(i, 6) <> "" And d(k) > 0 Then brr(d(k), 1) = mydata(i, 6)
  30.             Next
  31.             Cells(3, c).Resize(UBound(arr), 1) = brr
  32.         End If
  33.     Next
  34. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-31 12:16 | 显示全部楼层
rym9401 发表于 2024-5-30 15:12
一次传不了,只有搞分卷了。数据接着各表最后数据填写,然后选数据选项-全部刷新,即可更新。不知道你的数 ...

首先非常感谢你在百忙中帮我解决问题,估计是在保存文档时没有选宏工作簿,造成丢失了代码。不楼上老师的也解决了我需要的问题。感谢2位老师的大力帮助!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-31 12:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

非常感谢帮助我解决了问题,速度非常快的,而且还备注了代码说明,让我更容易看懂代码的意思,送花给你点赞!!!

TA的精华主题

TA的得分主题

发表于 2024-5-31 12:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
既然来到JSA专区,请带回JS代码:

建议,数据表格采用结构化引用,即在Sheet中选中原来的表格区域,点【插入】【表格】,详见:
对 Excel 表格使用结构化引用 - Microsoft 支持

假设,插入的【表格】分别命名为:每日出货表、销售表、出货表、入库表,则代码如下:
  1. function 更新数据链接(){
  2.         function setData(inInfo, inField, outField, outInfo = '每日出货表[辅助列]'){
  3.                 const resObj = {}, tmpData = Range(`${inField}`).Value2;
  4.                 Range(`${inInfo}`).Value2.forEach((x, i)=>
  5.                         resObj[x[0]] = resObj[x[0]]==undefined ? tmpData[i][0] : resObj[x[0]] + tmpData[i][0]);
  6.                 Range(`${outField}`).Value2 = Range(`${outInfo}`).Value2.map((x, i) => [resObj[x[0]]]);
  7.         }
  8.         const args = [ ['销售表[辅助列]', '销售表[订货数量]', '每日出货表[订货\n数量]'],
  9.                 ['销售表[辅助列]', '销售表[是否报关]', '每日出货表[是否报关]'],
  10.                 ['出货表[辅助列]', '出货表[实际出货量]', '每日出货表[出货\n数量]'],
  11.                 ['入库表[辅助列]', '入库表[入库数量]', '每日出货表[入库\n数量]'] ];
  12.         args.forEach(x => setData(...x));
  13. }
复制代码
共13行代码,因为有2行代码太长,拆成耻多行,不计较代码长度的话,只有9行代码。


再写一段清洗数据的代码:
  1. function clearData(){
  2.         Range('每日出货表[[订货\n数量]:[出货\n数量]]').ClearContents();
  3.         Range('每日出货表[入库\n数量]').ClearContents();
  4.         Range('每日出货表[是否报关]').ClearContents();
  5. }
复制代码
多次测试了运行时间,均不到0.2秒






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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-25 15:37 , Processed in 0.033351 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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