ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 统计问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-6-25 14:27 | 显示全部楼层 |阅读模式

本人初学者,请教大神,已按之前大神的方法,做了修改,但是统计速度很慢,不知该如何优化?

已知单价图
11.JPG

要求统计合计值(黄色部分自动生成)
22.JPG

我弄的代码如下:

Private Sub CommandButton1_Click()
  Dim r%, i%
  Dim arr
  Dim reg As New RegExp
      Application.ScreenUpdating = False
  With reg
    .Global = True
    .Pattern = "([^\*\+]+)\*?(\d+)?"
  End With
  With ThisWorkbook.Worksheets("清单表")
    r = .Cells(.Rows.Count, 1).End(xlUp).Row
    arr = .Range("a2:c" & r)
  End With
  u = ThisWorkbook.Worksheets("单价").Range("A65535").End(xlUp).Row
  For i = 1 To UBound(arr)
    dj = 0
    jz = 0
    Set mh = reg.Execute(arr(i, 3))
    If ThisWorkbook.Worksheets("清单表").Cells(i + 1, 4).Value = "" Then
      For j = 0 To mh.Count - 1
      xm = mh(j).SubMatches(0)
      sl = Val(mh(j).SubMatches(1))
        For t = 2 To u
          If ThisWorkbook.Worksheets("单价").Cells(t, 1) = xm Then
          dj = ThisWorkbook.Worksheets("单价").Cells(t, 2).Value

          End If
        Next
        If sl = 0 Then
          sl = 1
        End If
        jz = jz + dj * sl
      Next
         ThisWorkbook.Worksheets("清单表").Cells(i + 1, 4).Value = jz
    End If

  Next

    Application.ScreenUpdating = True
End Sub



样表.zip (28.31 KB, 下载次数: 4)



TA的精华主题

TA的得分主题

发表于 2018-6-25 14:45 | 显示全部楼层
直接把礼品名称替换为单价不就行了

TA的精华主题

TA的得分主题

发表于 2018-6-25 15:08 | 显示全部楼层
  1. Sub 按钮3_Click()
  2.     Application.ScreenUpdating = False
  3.     arr = Sheets("清单表").UsedRange
  4.     brr = Sheets("单价").UsedRange
  5.     For j = 2 To UBound(brr)
  6.         Sheets("清单表").Columns(3).Replace brr(j, 1), brr(j, 2)
  7.     Next j
  8.     For j = 2 To UBound(arr)
  9.         arr(j, 5) = Application.Evaluate(Sheets("清单表").Cells(j, 3).Value)
  10.     Next j
  11.     Sheets("清单表").UsedRange = arr
  12.     Application.ScreenUpdating = True
  13. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-6-25 15:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
附件内容供参考,修改了思路。。。

样表.zip

20.57 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2018-6-25 15:12 | 显示全部楼层
  1. Sub vvv()
  2.     Dim arr, brr
  3.     Set d = CreateObject("scripting.dictionary")
  4.     arr = Sheet2.[a1].CurrentRegion
  5.     For i = 2 To UBound(arr)
  6.         d(arr(i, 1)) = arr(i, 2)
  7.     Next
  8.    
  9.     With Sheet1
  10.         brr = .Range("c2:d" & .[a1].Cells(Rows.Count, 1).End(xlUp).Row)
  11.         For i = 1 To UBound(brr)
  12.             If InStr(brr(i, 1), "+") > 0 Then
  13.                 s = Split(brr(i, 1), "+")
  14.                 For x = 0 To UBound(s)
  15.                     ss = Split(s(x), "*")
  16.                     brr(i, 2) = brr(i, 2) + d(ss(0)) * Val(ss(1))
  17.                 Next
  18.             Else
  19.                 ss = Split(brr(i, 1), "*")
  20.                 brr(i, 2) = d(ss(0)) * Val(ss(1))
  21.             End If
  22.             
  23.         Next
  24.         .[d2].Resize(UBound(brr), 1) = Application.Index(brr, , 2)
  25.     End With
  26.    
  27. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2018-6-25 15:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 jiangxiaoyun 于 2018-6-25 15:17 编辑


样表.zip (22.93 KB, 下载次数: 0)
审核挺烦的,

TA的精华主题

TA的得分主题

发表于 2018-6-25 15:31 | 显示全部楼层
liulang0808 发表于 2018-6-25 15:09
附件内容供参考,修改了思路。。。

给力,刘版!之前的贴子我也写了,估计运行的速度楼主吼不住了,呵呵。学习了

点评

这个也是从其他人那里学来的  发表于 2018-6-25 16:04

TA的精华主题

TA的得分主题

发表于 2018-6-25 15:57 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-25 21:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

受教了,谢谢版主大神的思路,我好好研究消化下。。。

TA的精华主题

TA的得分主题

发表于 2018-6-25 22:07 | 显示全部楼层
coden0906 发表于 2018-6-25 21:50
受教了,谢谢版主大神的思路,我好好研究消化下。。。

他们的思路和共享,值得你送4朵花!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-27 04:42 , Processed in 0.045393 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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