ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何通过代码实现将表中相对应匹配的数据求和

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-1-29 20:41 | 显示全部楼层 |阅读模式
这是一张销售的数据表,做的时候遇到了瓶颈,我想实现的功能就是如何把表格上述单元格内年份后对应的数字(如DR2019.41、2019.42、2019.43对应的是10月)填入下方我列出来的区间中求和。有没有大佬能帮萌新解决这个问题,感觉如果不用代码好像实现不了匹配数字区间。而且如果我下次遇到新的销售数据表若是从2020.1-2020.4(第一周到第四周)那么我就可以将新数据继续填入下方单元格中。
若是有大佬能帮我解决这个问题我真的很感激!!!谢谢!!!
QQ图片20200129203130.png

求助!.zip

9.44 KB, 下载次数: 19

TA的精华主题

TA的得分主题

发表于 2020-1-30 00:42 | 显示全部楼层

更新下,这下应该没问题,不清楚有没有好办法了,能力有限

本帖最后由 answer6141 于 2020-1-30 09:09 编辑

结果不太对,看着你这些英文头疼,应该是数组除了问题,已经很接近正确答案了
提供个思路给你,能力有限,做了快2个小时了,明天再改睡觉了,等待大神出现,看有没有简单的方法

求助!.zip

22.48 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2020-1-30 00:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-1-30 10:20 | 显示全部楼层
  1. Sub test()
  2. Dim i, j, k, l, xrow, ycol As Long
  3. Dim m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12 As Single
  4. Dim arr, brr
  5. Dim d As Object
  6. With Sheets(1)
  7.     xrow = .Cells(1, 2).End(xlDown).Row
  8.     ycol = .Cells(1, Cells.Columns.Count).End(xlToLeft).Column
  9.     arr = .Range(.Cells(1, 1), .Cells(xrow, ycol))
  10.     ReDim brr(UBound(arr, 1) - 1, 15)
  11.     For i = 2 To UBound(arr, 1)
  12.         brr(i - 2, 0) = arr(i, 2)
  13.         brr(i - 2, 14) = arr(i, 5)
  14.         For j = 1 To UBound(arr, 2)
  15.             If (j + 9) <= UBound(arr, 2) Then
  16.                 k = Split(arr(1, j + 9), ".")(1) * 1
  17.                 If k >= 1 And k <= 4 Then
  18.                     m1 = arr(i, j + 9) + m1
  19.                     brr(i - 2, 1) = m1
  20.                 ElseIf k >= 5 And k <= 8 Then
  21.                     m2 = arr(i, j + 9) + m2
  22.                     brr(i - 2, 2) = m2
  23.                 ElseIf k >= 9 And k <= 13 Then
  24.                     m3 = arr(i, j + 9) + m3
  25.                     brr(i - 2, 3) = m3
  26.                 ElseIf k >= 14 And k <= 17 Then
  27.                     m4 = arr(i, j + 9) + m4
  28.                     brr(i - 2, 4) = m4
  29.                 ElseIf k >= 18 And k <= 22 Then
  30.                     m5 = arr(i, j + 9) + m5
  31.                     brr(i - 2, 5) = m5
  32.                 ElseIf k >= 23 And k <= 26 Then
  33.                     m6 = arr(i, j + 9) + m6
  34.                     brr(i - 2, 6) = m6
  35.                 ElseIf k >= 27 And k <= 30 Then
  36.                     m7 = arr(i, j + 9) + m7
  37.                     brr(i - 2, 7) = m7
  38.                 ElseIf k >= 31 And k <= 35 Then
  39.                     m8 = arr(i, j + 9) + m8
  40.                     brr(i - 2, 8) = m8
  41.                 ElseIf k >= 36 And k <= 39 Then
  42.                     m8 = arr(i, j + 9) + m8
  43.                     brr(i - 2, 9) = m8
  44.                 ElseIf k >= 40 And k <= 43 Then
  45.                     m9 = arr(i, j + 9) + m9
  46.                     brr(i - 2, 10) = m9
  47.                 ElseIf k >= 44 And k <= 48 Then
  48.                     m11 = arr(i, j + 9) + m11
  49.                     brr(i - 2, 11) = m11
  50.                 ElseIf k >= 49 And k <= 52 Then
  51.                     m12 = arr(i, j + 9) + m12
  52.                     brr(i - 2, 12) = m12
  53.                 End If
  54.             End If
  55.         Next
  56.     Next
  57.     Debug.Print brr(0, 0)
  58.     .Range("a18").Resize(UBound(brr, 1) + 1, UBound(brr, 2) + 1) = brr
  59. End With
  60. End Sub
复制代码


又审核?

TA的精华主题

TA的得分主题

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

这个应该对了,昨天有点懵,数组下标搞错了

TA的精华主题

TA的得分主题

发表于 2020-1-30 11:33 | 显示全部楼层
应该满足需求,数据表别搞这么乱好处理得多
  1. Option Explicit
  2. Sub Msm()
  3.     Dim arr, i, n, brr, j, ss, s, k, l, h, d
  4.     Dim dic
  5.     Set dic = CreateObject("scripting.dictionary")
  6.     arr = Sheet1.Range("a1:ao9")
  7.     For i = 1 To UBound(arr)
  8.         dic(arr(i, 2)) = i
  9.     Next
  10.     brr = Sheet1.Range("a17:m25")
  11.     For i = 1 To UBound(brr)
  12.         If dic.exists(brr(i, 1)) Then
  13.             For j = 2 To UBound(brr, 2)
  14.                 h = 0
  15.                 ss = Split(brr(1, j), "月")
  16.                 s = Split(ss(1), "-")
  17. '                For k = s(0) To s(UBound(s))
  18.                     For n = 1 To UBound(arr, 2)
  19.                         If arr(1, n) Like "DR*2019*" Then
  20.                             d = Split(arr(1, n), ".")(1)
  21.                             If Val(d) >= Val(s(0)) And Val(d) <= Val(s(UBound(s))) Then
  22.                                  h = h + arr(i, n)
  23.                             End If
  24.                         End If
  25.                     Next
  26. '                Next
  27.                 brr(i, j) = h
  28.             Next
  29.         End If
  30.     Next
  31.     Sheet1.Range("a17:m25") = brr
  32. End Sub
复制代码

求助!_错觉错觉7.zip

17.41 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2020-1-30 12:12 | 显示全部楼层
Option Explicit

Sub test()
  Dim arr, i, j, n, t
  arr = Range("j1:ao" & [j1].End(xlDown).Row)
  ReDim brr(1 To UBound(arr, 1) - 1, 1 To 12)
  For j = 1 To UBound(arr, 2)
    t = Split(arr(1, j), ".")
    n = Month(DateAdd("ww", t(1), Right(t(0), 4) & "-1-1"))
    For i = 2 To UBound(arr, 1)
      brr(i - 1, n) = brr(i - 1, n) + arr(i, j)
    Next
  Next
  [b18].Resize(UBound(brr, 1), 12) = brr
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-1 14:28 | 显示全部楼层
本帖最后由 错觉错觉7 于 2020-2-1 14:37 编辑
answer6141 发表于 2020-1-30 00:42
结果不太对,看着你这些英文头疼,应该是数组除了问题,已经很接近正确答案了
提供个思路 ...

谢谢大佬!!可能是我描述的问题 B2列是各种不同的商品名 然后只需要把每一行他们的和算出来就行 不需要向下累加 这个能麻烦你帮我实现嘛~

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-1 14:39 | 显示全部楼层
answer6141 发表于 2020-1-30 00:42
结果不太对,看着你这些英文头疼,应该是数组除了问题,已经很接近正确答案了
提供个思路 ...

谢谢大佬哈! 但是可能是我的描述问题 表格中B2列是商品名 求和只需要把他们分别的和算出来就行了 我看你好像是理解成向下累加的 是我描述不清的原因 这个功能可以麻烦实现嘛~

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-1 14:54 | 显示全部楼层

大佬你好 这个算法我验证了下数据好像只有部分和是对的 还可以改进改进吗
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-25 17:35 , Processed in 0.053261 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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