Excel精英培训网

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

[已解决]多条件求和

[复制链接]
发表于 2017-3-25 13:22 | 显示全部楼层 |阅读模式
本帖最后由 442173622 于 2017-3-25 13:25 编辑

我有一个销售表,每销售一个商品,就填开一个销售单,并将销售日期、品名、销售数量、销售金额、收款方式、货单号、客户名称、备注及打印时间记录到销售表(见表1)中,该表的列标及代表的字段名具体如下所示:

表1(销售基本数据表):
列标       A              B        C        D                     E               F        G              H              I
字段名    日期       品名       数量       销售额           收款方式       货单号    客户       备注       录入时间
2017-1-31   丰乐       1000       2140              2                   5207                                   10:27:18
2017-2-1     绿丰       310         187                3                   5208       门市部                  8:48:21
2017-2-3     茉莉香    20           50                  1                   5209                                   8:48:45
2017-2-5     绿源香    100         208                1                   5210                                   16:01:15
2017-2-6     青花瓷    6300       14025            2                   5211              家佳                     9:04:01

问题1:
希望查询指定的日期段内(比如从2017-2-1至2017-2-15日)各商品(按名称事先列好,见“指定日期段内的销售汇总表”即表2)的:①销售数量、②现金销售收入、③银行销售收入、④赊销收入、⑤赊销收入中特定对象(比如“门市部”)的收入统计、⑥现金收入笔数、⑦银行收入笔数、⑧赊销笔数
由于我当时自己漏计了“门市部”的销售收入,grf1973老师也就没有注意到这一点,因此希望老师能帮我补一下

表2原来是用SUMPRODUCT函数做的,但统计范围扩大到上万行以后,怕影响运行速度,想改用VBA不懂得怎么编写,请老师们能在百忙之中给予帮助(另外,因为我是个菜鸟,希望老师能在代码里加上附注,我想借此机会能学习一二)

问题2:
希望查询任意指定的日期段内(比如从2017-2-1至2017-2-15日)的销售情况并将此结果复制到“指定日期段内的销售结果”表即表3,也就是按销售单填开时的先后顺序直接罗列各销货单。

另外,我用的是2003版(2007开始按钮乱七八糟,不喜欢用)

最佳答案
2017-3-26 09:58
在里面加了一句,很明显。

销售统计表.rar

146.3 KB, 下载次数: 4

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-3-25 16:25 | 显示全部楼层
2016版一个函数就搞定,不必VBA。当然03版用数组公式也可以解决。
  1. =SUMIFS(销!D:D,销!E:E,3,销!G:G,"门市部",销!B:B,汇总!A6)
复制代码
123.jpg
回复

使用道具 举报

发表于 2017-3-26 09:58 | 显示全部楼层    本楼为最佳答案   
在里面加了一句,很明显。

销售统计表.rar

147.39 KB, 下载次数: 26

评分

参与人数 1 +1 收起 理由
442173622 + 1 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-3-28 10:18 | 显示全部楼层
多谢老师了!
我后来自己琢磨着写了:
If arr(i, 7) = "门市部" Then
             brr(k, 9) = brr(k, 9) + arr(i, 4)
             End If
老师的:
''''新增内容
                If fs = 3 And arr(i, 7) = "门市部" Then brr(k, 6) = brr(k, 6) + arr(i, 4)
                '''''''''''''''''
比我的简便多了!
谢谢!
回复

使用道具 举报

 楼主| 发表于 2017-3-28 10:23 | 显示全部楼层
将指定日期段内的结果复制到另一表中,我将老师的稍为改了一下,就可以用了:
Sub 选择指定日期段内结果()
Dim arr, arr1, x
    arr = Sheet1.Cells(1, 1).CurrentRegion  '要统计的数据源
    arr1 = Range("a2:f10000")
For x = 2 To UBound(arr)

If arr(x, 1) >= Cells(1, 8) And arr(x, 1) <= Cells(2, 8) Then
arr1(x - 1, 1) = arr(x, 1)
arr1(x - 1, 2) = arr(x, 2)
arr1(x - 1, 3) = arr(x, 3)
End If
Next
Range("a2:f10000") = arr1
End Sub
这样我就可以不再用函数做了,老师真的是帮了我的大忙,感谢!!
回复

使用道具 举报

 楼主| 发表于 2017-3-28 10:30 | 显示全部楼层
Sub 选择指定日期段内结果()
Dim arr, arr1, i, j
    arr = Sheet1.Cells(1, 1).CurrentRegion  '要统计的数据源
    arr1 = Range("a2:f10000")
For i = 2 To UBound(arr)
For j = 1 To 6
If arr(i, 1) >= Cells(1, 8) And arr(i, 1) <= Cells(2, 8) Then
arr1(i - 1, j) = arr(i, j)
End If
Next
Next
Range("a2:f10000") = arr1
End Sub
回复

使用道具 举报

发表于 2017-8-11 10:51 | 显示全部楼层
学习了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 21:53 , Processed in 0.739526 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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