Excel精英培训网

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

[已解决]多条件数据汇总求和

[复制链接]
发表于 2010-12-19 19:26 | 显示全部楼层 |阅读模式
多条件数据汇总求和 II4OprwY.zip (27.02 KB, 下载次数: 240)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2010-12-19 21:30 | 显示全部楼层

请具体解释条件和汇总的内容

<=30 等什么意思?

A列未发现炉号为1#的

汇总的内容是数据表的哪一列

回复

使用道具 举报

 楼主| 发表于 2010-12-19 22:20 | 显示全部楼层

1、依据“数据”中A列的炉号和G列中的含量进行分类统计汇总到“统计”表中。
2、汇总条件为:A列的炉号:"可能有1#、5#、6#",G列的含量:含量范围分为0-30(包括30)、30-70(包括70)、70-100(包括100)、大于100

3、最大、最小为G列含量的最大和最小值。
3、用VBA做。

不知道说明白了没??

回复

使用道具 举报

发表于 2010-12-19 22:54 | 显示全部楼层

试试看行不:

Sub test()
Dim arr1(), arr2(1 To 30, 1 To 22)
Dim i1%, I2%, I3%
With Sheets("数据")
   arr1 = .Range("a2:g" & .[a65536].End(xlUp).Row).Value
End With
For i1 = 1 To UBound(arr1)
   If arr1(i1, 7) <= 30 Then
      I2 = 1
   ElseIf arr1(i1, 7) <= 70 Then
      I2 = 5
   ElseIf arr1(i1, 7) <= 100 Then
      I2 = 9
   Else
      I2 = 13
   End If
   If arr1(i1, 1) = "1#" Then
      arr2(Day(arr1(i1, 3)), I2) = arr2(Day(arr1(i1, 3)), I2) + arr1(i1, 7)
      If arr2(Day(arr1(i1, 3)), 17) < arr1(i1, 7) Then arr2(Day(arr1(i1, 3)), 17) = arr1(i1, 7)
      If arr2(Day(arr1(i1, 3)), 20) = 0 Or arr2(Day(arr1(i1, 3)), 20) > arr1(i1, 7) Then arr2(Day(arr1(i1, 3)), 20) = arr1(i1, 7)
   ElseIf arr1(i1, 1) = "5#" Then
      arr2(Day(arr1(i1, 3)), I2 + 1) = arr2(Day(arr1(i1, 3)), I2 + 1) + arr1(i1, 7)
      If arr2(Day(arr1(i1, 3)), 18) < arr1(i1, 7) Then arr2(Day(arr1(i1, 3)), 18) = arr1(i1, 7)
      If arr2(Day(arr1(i1, 3)), 21) = 0 Or arr2(Day(arr1(i1, 3)), 21) > arr1(i1, 7) Then arr2(Day(arr1(i1, 3)), 21) = arr1(i1, 7)
   Else
      arr2(Day(arr1(i1, 3)), I2 + 2) = arr2(Day(arr1(i1, 3)), I2 + 2) + arr1(i1, 7)
      If arr2(Day(arr1(i1, 3)), 19) < arr1(i1, 7) Then arr2(Day(arr1(i1, 3)), 19) = arr1(i1, 7)
      If arr2(Day(arr1(i1, 3)), 22) = 0 Or arr2(Day(arr1(i1, 3)), 22) > arr1(i1, 7) Then arr2(Day(arr1(i1, 3)), 22) = arr1(i1, 7)
   End If
   arr2(Day(arr1(i1, 3)), I2 + 3) = arr2(Day(arr1(i1, 3)), I2 + 3) + arr1(i1, 7)
Next
With Sheets("统计")
   .[b4].Resize(30, 22) = arr2
End With
End Sub

回复

使用道具 举报

发表于 2010-12-19 23:11 | 显示全部楼层

用透视表能做一部分,用SUMPRODUCT()也可能做出来,用VBA我不会。。
回复

使用道具 举报

 楼主| 发表于 2010-12-19 23:18 | 显示全部楼层

用代码试了下,数据统计不全,不知什么原因
回复

使用道具 举报

发表于 2010-12-19 23:19 | 显示全部楼层    本楼为最佳答案   

Sub yyy()
    Dim ar, r, k, i, arr()
    Dim d As Object
    Set d = CreateObject("scripting.dictionary")
    r = Sheets("数据").Range("a65536").End(xlUp).Row
    ar = Sheets("数据").Range("a2:g" & r)
    ReDim arr(1 To UBound(ar), 1 To 23)
    For i = 1 To UBound(ar)
        Select Case ar(i, 7)
        Case Is <= 30
            k = 1
        Case 30 To 70
            k = 5
        Case 70 To 100
            k = 9
        Case Is > 100
            k = 13
        End Select
        If Not d.exists(ar(i, 3)) Then
            h = h + 1
            d(ar(i, 3)) = h
            arr(h, 1) = ar(i, 3)
        End If
        Select Case ar(i, 1)
        Case Is = "1#"
            m = 1
            If arr(d(ar(i, 3)), 18) < ar(i, 7) Then arr(d(ar(i, 3)), 18) = ar(i, 7)
            If arr(d(ar(i, 3)), 21) > ar(i, 7) Or arr(d(ar(i, 3)), 21) = 0 Then arr(d(ar(i, 3)), 21) = ar(i, 7)
        Case Is = "5#"
            m = 2
            If arr(d(ar(i, 3)), 19) < ar(i, 7) Then arr(d(ar(i, 3)), 19) = ar(i, 7)
            If arr(d(ar(i, 3)), 22) > ar(i, 7) Or arr(d(ar(i, 3)), 22) = 0 Then arr(d(ar(i, 3)), 22) = ar(i, 7)
        Case Is = "6#"
            m = 3
            If arr(d(ar(i, 3)), 20) < ar(i, 7) Then arr(d(ar(i, 3)), 20) = ar(i, 7)
            If arr(d(ar(i, 3)), 23) > ar(i, 7) Or arr(d(ar(i, 3)), 23) = 0 Then arr(d(ar(i, 3)), 23) = ar(i, 7)
        End Select
        arr(d(ar(i, 3)), k + m) = arr(d(ar(i, 3)), k + m) + ar(i, 5)
        arr(d(ar(i, 3)), k + 4) = arr(d(ar(i, 3)), k + 4) + ar(i, 5)
    Next
    Sheets("统计").Range("a4").Resize(h, 23) = arr
End Sub
回复

使用道具 举报

 楼主| 发表于 2010-12-19 23:28 | 显示全部楼层

Sub test()
Dim arr1(), arr2(1 To 30, 1 To 22)
Dim i1%, I2%, I3%
With Sheets("数据")
   arr1 = .Range("a2:g" & .[a65536].End(xlUp).Row).Value
End With
For i1 = 1 To UBound(arr1)
   If arr1(i1, 7) <= 30 Then
      I2 = 1
   ElseIf arr1(i1, 7) <= 70 Then
      I2 = 5
   ElseIf arr1(i1, 7) <= 100 Then
      I2 = 9
   Else
      I2 = 13
   End If
   If arr1(i1, 1) = "1#" Then
      arr2(Day(arr1(i1, 3)), I2) = arr2(Day(arr1(i1, 3)), I2) + arr1(i1, 7)
      If arr2(Day(arr1(i1, 3)), 17) < arr1(i1, 7) Then arr2(Day(arr1(i1, 3)), 17) = arr1(i1, 7)
      If arr2(Day(arr1(i1, 3)), 20) = 0 Or arr2(Day(arr1(i1, 3)), 20) > arr1(i1, 7) Then arr2(Day(arr1(i1, 3)), 20) = arr1(i1, 7)
   ElseIf arr1(i1, 1) = "5#" Then
      arr2(Day(arr1(i1, 3)), I2 + 1) = arr2(Day(arr1(i1, 3)), I2 + 1) + arr1(i1, 7)
      If arr2(Day(arr1(i1, 3)), 18) < arr1(i1, 7) Then arr2(Day(arr1(i1, 3)), 18) = arr1(i1, 7)
      If arr2(Day(arr1(i1, 3)), 21) = 0 Or arr2(Day(arr1(i1, 3)), 21) > arr1(i1, 7) Then arr2(Day(arr1(i1, 3)), 21) = arr1(i1, 7)
   Else
      arr2(Day(arr1(i1, 3)), I2 + 2) = arr2(Day(arr1(i1, 3)), I2 + 2) + arr1(i1, 7)
      If arr2(Day(arr1(i1, 3)), 19) < arr1(i1, 7) Then arr2(Day(arr1(i1, 3)), 19) = arr1(i1, 7)
      If arr2(Day(arr1(i1, 3)), 22) = 0 Or arr2(Day(arr1(i1, 3)), 22) > arr1(i1, 7) Then arr2(Day(arr1(i1, 3)), 22) = arr1(i1, 7)
   End If
   arr2(Day(arr1(i1, 3)), I2 + 3) = arr2(Day(arr1(i1, 3)), I2 + 3) + arr1(i1, 7)
Next
With Sheets("统计")
   .[b4].Resize(30, 22) = arr2
End With
End Sub


代码看不太懂,试将上面的“7”改为“5”结果对了,谢谢青城山苦丁茶[em24]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-29 07:57 , Processed in 0.134865 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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