ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA求助,去重后,查询满足条件的值,并统计数量!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-6-13 16:12 | 显示全部楼层 |阅读模式
将表中B列的订单类型提取在E列显示(去重),再以E列的值去找C列相应对的值(输入人),再统计同一个人出现的次数在F列显示,请高手指教,谢谢,在线等!
微信图片_20190613160447.png

test.rar

8.4 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2019-6-13 16:15 | 显示全部楼层
select 订单类型,输入者,count(输入者) as 次数 from 表名

TA的精华主题

TA的得分主题

发表于 2019-6-13 16:35 | 显示全部楼层
本帖最后由 melville 于 2019-6-13 16:39 编辑

代码如下
  1. Sub tt()
  2. Dim d1 As Object
  3. Dim arr, brr
  4. Dim i As Long
  5. Dim j, k As Integer
  6. Dim s As String

  7. Application.ScreenUpdating = False
  8. Application.DisplayAlerts = False

  9.     Set d1 = CreateObject("Scripting.Dictionary")
  10.    
  11.     k = 0
  12.     arr = Sheet1.Range("A1").CurrentRegion
  13.     ReDim brr(1 To UBound(arr, 1), 1 To 3)
  14.    
  15.         For i = 2 To UBound(arr)
  16.             s = arr(i, 2) & "/" & arr(i, 3)
  17.             If s <> "" Then
  18.             If d1.Exists(s) Then
  19.                 brr(d1(s), 3) = brr(d1(s), 3) + 1
  20.                 Else
  21.                 k = k + 1: d1(s) = k
  22.                 brr(k, 1) = arr(i, 2): brr(k, 2) = arr(i, 3): brr(k, 3) = 1
  23.             End If
  24.             End If

  25.       Next
  26.          
  27.     j = Sheet1.[E65536].End(xlUp).Row

  28.     If j > 2 Then
  29.     Sheet1.Range(sheet1.Cells(2, 5),sheet1 .Cells(j, 7)).ClearContents  '清除原有内容
  30.     End If

  31.     sheet1.Range("E2").Resize(k, 3) = brr
  32.    
  33.     Set d1 = Nothing
  34. Application.ScreenUpdating = True
  35. Application.DisplayAlerts = True
  36. End Sub
复制代码


评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-13 17:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-6-14 06:46 | 显示全部楼层
Sub tt2()
Dim A()
Set d = CreateObject("Scripting.Dictionary")
arr = Sheet1.[A1].CurrentRegion
For i = 2 To UBound(arr)
    d(arr(i, 2) & "|" & arr(i, 3)) = d(arr(i, 2) & "|" & arr(i, 3)) + 1
Next
'------------------------
S1 = d.keys
t1 = d.items
'------------------------
ReDim A(1 To 3, 1 To UBound(S1) + 1)
For i = 0 To UBound(S1)
    X = Split(S1(i), "|")
    A(1, i + 1) = X(0)
    A(2, i + 1) = X(1)
    A(3, i + 1) = d(S1(i))
Next
A = Application.Transpose(A)
Sheet1.[I2].Resize(UBound(A), UBound(A, 2)) = A
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-14 15:25 | 显示全部楼层
shi353 发表于 2019-6-14 06:46
Sub tt2()
Dim A()
Set d = CreateObject("Scripting.Dictionary")

非常谢谢,比楼上朋友的要简单些,呵呵

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-28 19:26 | 显示全部楼层
shi353 发表于 2019-6-14 06:46
Sub tt2()
Dim A()
Set d = CreateObject("Scripting.Dictionary")

你好,请问VBA如何提取指定字符串后的内容呢?如图:
aa.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-28 19:28 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-25 05:21 , Processed in 0.038375 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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