ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 多条件求和

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-12-20 13:07 | 显示全部楼层
wangxml 发表于 2017-12-20 12:22
Public Function itemFilter()
Dim rng As Range, rngSelect As Range, iRowMax As Long
With Sheets(" ...

大神,你这是写了一个自定义的函数是吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-12-20 13:12 | 显示全部楼层
wangxml 发表于 2017-12-20 12:22
Public Function itemFilter()
Dim rng As Range, rngSelect As Range, iRowMax As Long
With Sheets(" ...

具体怎么使用?

TA的精华主题

TA的得分主题

发表于 2017-12-20 15:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Option Explicit

  2. Sub main()
  3. With Sheets("报表")
  4.   Dim iRow As Integer, iCol As Integer
  5.   For iRow = 2 To 12
  6.    For iCol = 7 To 11
  7.     If iRow = 8 Then
  8.     Else
  9.      Dim strID As String, strDate As String
  10.      strID = .Cells(iRow, 3).Value
  11.      If iCol = 6 Then
  12.       strDate = Split(CStr(Sheets("报表").Cells(1, iCol).Value), "售")(1)
  13.      Else
  14.       strDate = Split(CStr(.Cells(1, iCol).Value), " 星")(0)
  15.      End If
  16.      Call itemFilter(strID, strDate, iRow, iCol)
  17.     End If
  18.    Next iCol
  19.   Next iRow
  20. End With
  21. End Sub

  22. Public Function itemFilter(ByVal siteID As String, ByVal saleDate As String, ByVal iRow As Integer, ByVal iCol As Integer)
  23. 'Public Function itemFilter()
  24. Dim rng As Range, rngSelect As Range, iRowMax As Long
  25. With Sheets("源数据")
  26.   iRowMax = .Range("A2").End(xlDown).Row
  27.   Set rng = .Range(.Cells(1, 1), .Cells(iRowMax, 3))
  28.   '打开筛选
  29.   rng.AutoFilter Field:=1, Criteria1:=siteID '"S200005A"
  30.   rng.AutoFilter Field:=3, Criteria1:=saleDate '"2017/12/5"
  31.   '设置可见区域
  32.   Set rngSelect = rng.SpecialCells(xlCellTypeVisible)
  33.   Dim rngSelectRowMax As Long
  34.   rngSelectRowMax = .Range("A1048576").End(xlUp).Row
  35.   '计算
  36.   Sheets("报表").Cells(iRow, iCol).Formula = "=Subtotal(109,'源数据'!H2:" & .Cells(rngSelectRowMax, 8).Address & ")"
  37.   Sheets("报表").Cells(iRow, iCol).Value = Sheets("报表").Cells(iRow, iCol).Value
  38.   '关闭筛选
  39.   rng.AutoFilter
  40. End With
  41. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2017-12-20 16:01 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-12-20 17:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wangxml 发表于 2017-12-20 16:01
Alt+F11
复制代码至"ThisWorkbook"
F5

结果出来是0,,不知道哪里出错了

TA的精华主题

TA的得分主题

发表于 2017-12-20 20:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
尝试使用数据透视表,不完全符合需要,仅做参考。
  1. Option Explicit
  2. '######################################
  3. '根据源数据的销售,匹配日期和店铺编号,建立数据透视表
  4. '######################################
  5. Sub Main()
  6.     On Error Resume Next
  7.         '行总计,行循环因子,一区店名循环因子,二区店名循环因子
  8.         '一区门店名列表,二区门店名列表,门店名长列表
  9.     Dim RowsCount&, row&, YiQu_i%, ErQu_i%, YiQuMenDianMing(), ErQuMenDianming(), MenDianMingCheng()
  10.         '该门店是否属于一区
  11.     Dim IsYiQu As Boolean
  12.    
  13.         '获取行总计和门店名长列表
  14.     Sheet2.Activate
  15.     RowsCount = Range("A1").End(xlDown).row
  16.     MenDianMingCheng = Range("B1", [B1].End(xlDown).Address).Value
  17.         
  18.         '获取一、二区门店名列表
  19.     Sheet1.Activate
  20.     YiQuMenDianMing = Range("D2", "D7").Value
  21.     ErQuMenDianming = Range("D9", "D12").Value
  22.         
  23.         '创建分公司列表,全为“销售三公司”,为创建数据透视表做准备
  24.     Dim FenGongSi()
  25.     ReDim FenGongSi(1 To RowsCount, 1 To 1)
  26.     FenGongSi(1, 1) = "分公司"
  27.     For row = 2 To RowsCount
  28.         FenGongSi(row, 1) = "销售三公司"
  29.     Next row
  30.         
  31.         '创建门店名&片区二维列表
  32.     Dim MenDianMing_PianQu()
  33.     ReDim MenDianMing_PianQu(1 To RowsCount, 1 To 2)
  34.     MenDianMing_PianQu(1, 1) = "门店名"
  35.     MenDianMing_PianQu(1, 2) = "片区"
  36.         '二位列表循环赋值
  37.     For row = 2 To RowsCount
  38.         '逻辑变量初始化
  39.         IsYiQu = False
  40.             '判断该店是否属于一区
  41.             '若属于则用一区为其赋值,并将逻辑变量设为真,跳出本层循环
  42.         For YiQu_i = 1 To UBound(YiQuMenDianMing)
  43.             If InStr(1, MenDianMingCheng(row, 1), YiQuMenDianMing(YiQu_i, 1)) > 0 Then
  44.                 MenDianMing_PianQu(row, 1) = YiQuMenDianMing(YiQu_i, 1)
  45.                 MenDianMing_PianQu(row, 2) = "宁波一区"
  46.                 IsYiQu = True: Exit For
  47.             End If
  48.         Next YiQu_i
  49.             
  50.             '若属于一区为真,直接跳过下面循环,进入下一次外层循环
  51.             '若不为真,则属于二区或其他,判断并赋值
  52.         For ErQu_i = 1 To UBound(ErQuMenDianming)
  53.             If IsYiQu = True Then Exit For
  54.             If InStr(1, MenDianMingCheng(row, 1), ErQuMenDianming(ErQu_i, 1)) > 0 Then
  55.                 MenDianMing_PianQu(row, 1) = ErQuMenDianming(ErQu_i, 1)
  56.                 MenDianMing_PianQu(row, 2) = "宁波二区"
  57.                 Exit For
  58.             ElseIf ErQu_i = UBound(ErQuMenDianming) Then
  59.                 MenDianMing_PianQu(row, 1) = "其他"
  60.                 MenDianMing_PianQu(row, 2) = "其他"
  61.             End If
  62.         Next ErQu_i
  63.     Next row
  64.    
  65.         '若相应位置已有数据,删除;重新写入
  66.     Sheet2.Activate
  67.     If [A1].End(xlToRight).Value = "分公司" Then
  68.         Range([A1].End(xlToRight).Offset(0, -2), [A1].End(xlToRight).End(xlDown)).Clear
  69.     End If
  70.     [A1].End(xlToRight).Offset(0, 1).Resize(RowsCount, 2) = MenDianMing_PianQu
  71.     [A1].End(xlToRight).Offset(0, 1).Resize(RowsCount, 1) = FenGongSi
  72.    
  73.         '调用子过程,创建数据透视表
  74.     Call CreatePivotTable
  75. End Sub

  76. Sub CreatePivotTable()
  77.     Application.DisplayAlerts = False
  78.    
  79.     Dim sht As Worksheet
  80.     For Each sht In Sheets
  81.         If sht.Name = "透视表" Then sht.Delete
  82.     Next sht
  83.    
  84.     Sheets.Add , after:=Worksheets(Sheets.Count)
  85.     ActiveSheet.Name = "透视表"
  86.     ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
  87.         "源数据!$A$1:" & Sheets("源数据").Range("A1").End(xlDown).End(xlToRight).Address, Version:=4).CreatePivotTable _
  88.         TableDestination:=ActiveSheet.Name & "!R3C1", TableName:="透视表", DefaultVersion:= _
  89.         xlPivotTableVersion14
  90.     With ActiveSheet.PivotTables("透视表")
  91.         .InGridDropZones = True
  92.         .RowAxisLayout xlTabularRow
  93.     End With
  94.     With ActiveSheet.PivotTables("透视表").PivotFields("分公司")
  95.         .Orientation = xlRowField
  96.         .Position = 1
  97.     End With
  98.     With ActiveSheet.PivotTables("透视表").PivotFields("片区")
  99.         .Orientation = xlRowField
  100.         .Position = 2
  101.     End With
  102.     With ActiveSheet.PivotTables("透视表").PivotFields("门店编号")
  103.         .Orientation = xlRowField
  104.         .Position = 3
  105.     End With
  106.     With ActiveSheet.PivotTables("透视表").PivotFields("门店名")
  107.         .Orientation = xlRowField
  108.         .Position = 4
  109.     End With
  110.     With ActiveSheet.PivotTables("透视表").PivotFields("会计日期")
  111.         .Orientation = xlColumnField
  112.         .Position = 1
  113.     End With
  114.     ActiveSheet.PivotTables("透视表").AddDataField ActiveSheet.PivotTables("透视表" _
  115.         ).PivotFields("销售金额"), "求和项:销售金额", xlSum
  116.     ActiveSheet.PivotTables("透视表").PivotFields("片区").PivotItems("其他"). _
  117.         ShowDetail = False
  118.    
  119.     Application.DisplayAlerts = True
  120. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2017-12-20 20:42 | 显示全部楼层
leon小鱼 发表于 2017-12-20 17:57
结果出来是0,,不知道哪里出错了

单击按钮,这下应该可以了

测试.rar

206.87 KB, 下载次数: 9

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-12-21 08:06 | 显示全部楼层
2801959927 发表于 2017-12-20 20:40
尝试使用数据透视表,不完全符合需要,仅做参考。

谢谢你,大神

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-12-21 08:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-12-21 09:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

我这运行正常啊
QQ截图20171221094604.jpg
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 13:20 , Processed in 0.024989 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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