Excel精英培训网

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

excel统计表公式太多打开很卡,怎么解决,谢谢

[复制链接]
发表于 2019-2-12 17:48 | 显示全部楼层 |阅读模式
   统计表2019excel表在表2018跟data表数据对比后,得出结果。但是由于公式太多,数据多了就越来越慢,请问有什么方法可以优化吗?希望高手指点指点,谢谢!

统计表2019.zip

568.59 KB, 下载次数: 16

 楼主| 发表于 2019-2-12 17:55 | 显示全部楼层
看了很多例子,都说最好使用VBS,但是本人是菜鸟,不懂VBS,望高手指点,谢谢
回复

使用道具 举报

发表于 2019-2-12 20:46 | 显示全部楼层
1  数据量巨大的话 , 公式注定会卡
2  "2018"表格结构不好 , 若结构不能更改的话
       =if(x=0,"",x) ,把if去掉 ,直接=x , 0值不显示用单元格格式实现
       sumifs( ) , 不要整列引用 , 可以把数据源底部做个标记(染色等方法), 数据添加于标记之上
3   可以更改表格结构的话 , 用数据透视表 , 即便不能更改结果 , 亦亦可先用数透把数据源先处理一下,避免过多的冗余计算
4 可能的话, 数据源可以考虑 用 Access等数据库文件, (相对Excel表格而言,无单元格格式,会快很多)
回复

使用道具 举报

发表于 2019-2-12 20:51 | 显示全部楼层
qaj3 发表于 2019-2-12 17:55
看了很多例子,都说最好使用VBS,但是本人是菜鸟,不懂VBS,望高手指点,谢谢

excel 自带的叫 VBA.
单纯解决问题的话 搜 "Excel 代工" "VBA 代工"...

回复

使用道具 举报

 楼主| 发表于 2019-2-13 08:58 | 显示全部楼层
砂海 发表于 2019-2-12 20:51
excel 自带的叫 VBA.
单纯解决问题的话 搜 "Excel 代工" "VBA 代工"...

好的,谢谢,请问你可以解决吗。
回复

使用道具 举报

 楼主| 发表于 2019-2-13 11:02 | 显示全部楼层
望高手指点,谢谢
回复

使用道具 举报

发表于 2019-2-13 14:30 | 显示全部楼层
你能提供一下计算的公式吗,比如N3,现在的表不停的重算,几乎没法看,要把所有的公式删除,然后用vba计算,提供第三行的公式。建议你提供一个你最大的数据,以便于分析确定用什么方式进行数据处理。
回复

使用道具 举报

 楼主| 发表于 2019-2-13 17:47 | 显示全部楼层
liangmutou 发表于 2019-2-13 14:30
你能提供一下计算的公式吗,比如N3,现在的表不停的重算,几乎没法看,要把所有的公式删除,然后用vba计算 ...

您好,第三行的公式如下
=IF((SUMIFS(Data!$H:$H,Data!$J:$J,'2018'!N$1,Data!$I:$I,'2018'!$M$2,Data!$A:$A,'2018'!$B3))=0,"",(SUMIFS(Data!$H:$H,Data!$J:$J,'2018'!N$1,Data!$I:$I,'2018'!$M$2,Data!$A:$A,'2018'!$B3)))

已经是最大数据了。
回复

使用道具 举报

发表于 2019-2-14 12:47 | 显示全部楼层
qaj3 发表于 2019-2-13 17:47
您好,第三行的公式如下
=IF((SUMIFS(Data!$H:$H,Data!$J:$J,'2018'!N$1,Data!$I:$I,'2018'!$M$2,Data!$ ...

代码见后,希望能帮到你。由于Data数据太少,无法验证,自己检查吧。提醒,1月份到2月份之间,均填1月份,后面也这样。
Sub tongji()
Dim ar, br, h As Long, dh As Long, L As Integer, lh As Integer
Application.ScreenUpdating = False
Range("l3:cf" & [b65536].End(3).Row).ClearContents
ar = Range("a1:cf" & [b65536].End(3).Row)
br = Sheet2.Range("a2:j" & Sheet2.[a65536].End(3).Row)
For h = 3 To UBound(ar)
   For dh = 2 To UBound(br)
     For L = 13 To UBound(ar, 2) Step 6
       For lh = 1 To 5
         If ar(h, 2) = br(dh, 1) And br(dh, 9) = ar(2, L + lh) And ar(1, L + lh) = br(dh, 10) Then
           ar(h, L + lh) = br(dh, 8): ar(h, L) = ar(h, L) + ar(h, L + lh)
           ar(h, 12) = ar(h, 12) + ar(h, L + lh)
         End If
       Next lh
     Next L
   Next dh
Next h
Range("a1:cf" & [b65536].End(3).Row) = ar
Application.ScreenUpdating = True
End Sub



回复

使用道具 举报

 楼主| 发表于 2019-2-14 14:24 | 显示全部楼层
liangmutou 发表于 2019-2-14 12:47
代码见后,希望能帮到你。由于Data数据太少,无法验证,自己检查吧。提醒,1月份到2月份之间,均填1月份 ...

您好,VBA我一定都不懂,我将你的代码放进VBA那里保存提示要启用宏,这些也不是很了解,请问可以做好个模板给我吗,谢谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 11:51 , Processed in 0.147291 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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