ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 用VBA实现代替SUMPRODUCT

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-14 19:47 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
之前是用SUMPRODUCT,现在想用VBA实现按类目,分类汇总每个产品的销售数据,
里面有部分代码,麻烦大神们帮我修改下,谢谢

22.rar

46.04 KB, 下载次数: 14

TA的精华主题

TA的得分主题

发表于 2020-3-14 20:59 | 显示全部楼层
好像把类目和名称整混了,改过来就好了吧

TA的精华主题

TA的得分主题

发表于 2020-3-14 21:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
opel-wong大神不是已经帮你写完了吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-14 22:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-3-14 22:08 | 显示全部楼层
netbar2008 发表于 2020-3-14 22:08
初学VBA有些代码还看不太懂

一楼附件中的代码好像是我写过的,好熟悉的感觉,

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-3-14 22:13 | 显示全部楼层
自己不明白,提供数据的时候有乱搞,给你写了改都不明白,让人怎么写? 这平台主要还是学习吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-14 22:13 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-14 22:19 | 显示全部楼层
产品一样时数量汇总不起来

TA的精华主题

TA的得分主题

发表于 2020-3-15 09:10 | 显示全部楼层
本帖最后由 于箱长 于 2020-3-15 09:12 编辑

发了三个帖子,全是这一个事儿,不知道你的最终使用的版本和这次改过的版本到底还有多大出入,比如说,你的第二行,茶叶、茶具之类的,等你的明细表行数越来越多的时候,是否做为一个条件参与计算,你原表的sumproduct函数并没有体现这部分,我倒是修改了部分代码,并计算出了结果 图片.png

TA的精华主题

TA的得分主题

发表于 2020-3-15 10:45 | 显示全部楼层
本帖最后由 lkqsmxw 于 2020-3-15 12:16 编辑

Sub 汇总数据()
    Dim arr, i As Long, mRow As Long, j As Integer, k As Long, Keys, Its, m, BRR
    Dim d As Object: Set d = CreateObject("Scripting.Dictionary")
    Worksheets("3月数据汇总").Range(Worksheets("3月数据汇总").Cells(4, 2), Worksheets("3月数据汇总").Cells(65536, 24)).ClearContents
    With Worksheets("3月明细表")
        mRow = .Range("B65536").End(3).Row
        arr = .Range("B3:U" & mRow).Value
    End With
    Dim pName$, mNumber&, TotalCost#, mSales#, GrossProfit#, pNameB$
    For i = 1 To UBound(arr)
        pName = arr(i, 1) & "│" & arr(i, 4)
        mNumber = Val(arr(i, 5))
        TotalCost = Val(arr(i, 14))
        mSales = Val(arr(i, 10)) + Val(arr(i, 11)) + Val(arr(i, 9))
        GrossProfit = mSales - TotalCost
        If Len(pName) And Not d.Exists(pName) Then d(pName) = Array(mNumber, TotalCost, mSales, GrossProfit) Else d(pName) = Array(mNumber + mNumber, TotalCost + TotalCost, mSales + mSales, GrossProfit + GrossProfit)
    Next
    With Worksheets("3月数据汇总")
        .Activate
        mRow = Cells.Find("*", , , , 1, 2).Row
        BRR = .Range(.Cells(4, 2), .Cells(mRow, 24)).Value
        Keys = d.Keys
        Its = d.items
        For j = 2 To UBound(BRR, 2) Step 6
            pNameB = .Cells(2, j + 1)
            m = 0
            For i = 0 To UBound(Keys)
                If pNameB = Split(Keys(i), "│")(0) Then
                    m = m + 1
                    BRR(m, j - 1) = Split(Keys(i), "│")(1)
                    For k = 2 To 5
                        BRR(m, k + j - 2) = Its(i)(k - 2)
                    Next
                End If
            Next
        Next
        .Range(.Cells(4, 2), .Cells(mRow, 24)).Value = BRR
    End With
    Set d = Nothing
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-20 01:26 , Processed in 0.046594 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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