ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 多条件匹配统计

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-11-19 11:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
兄提,提个2个小小的建议哈,1、左表的条件区域里的名称里面的字符串以及字体格式(全角半角)最好和右表数据源里的一摸一样,不然只会增加无意义的匹配难度。如果只是样板是错乱的,你实际工作中用的时候是一样的话,那就没有问题。2、管段长度列里,既然标题行里已经注明了单位是(m),那真没必要在下面数据里再加上m,当然硬要加上m的话,VBA也是很容易处理的,但是感觉没意义。以上纯属个人建议哈。
然后,下面代码是我把以上2点修正后给出的代码,如果和你的需求不一样,请忽略。

Sub test()
    Dim arr, brr
    Dim i As Integer, j As Integer
    Dim dic As Object
   
    arr = Range("B1:E13")
    brr = Range("G1:I11")
   
    For i = 2 To UBound(arr)
        For j = 2 To UBound(brr)
            If arr(i, 1) & "DN" & arr(i, 2) = brr(j, 1) & brr(j, 2) Then
                arr(i, 3) = arr(i, 3) + brr(i, 3)
                arr(i, 4) = arr(i, 4) + 1
            End If
        Next
    Next
   
    Range("B1").Resize(UBound(arr), UBound(arr, 2)) = arr
   
End Sub

TA的精华主题

TA的得分主题

发表于 2022-11-19 11:29 | 显示全部楼层
zhangqi2534797 发表于 2022-11-19 10:16
不不不 你才是大哥 能帮我看看怎么用VBA解决吗? 我写sql逻辑是先数据处理,然后group by 分组汇总,最后 ...

能写一个完整的SQL吗?我学习一下

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

发表于 2022-11-19 11:32 | 显示全部楼层
  1. Sub test1()
  2.   Dim ar, br, Re As Object, Dict As Object
  3.   Dim i As Long, p As Long, sStr As String
  4.   Set Dict = CreateObject("Scripting.Dictionary")
  5.   Set Re = CreateObject("VBScript.Regexp")
  6.   Re.Global = True
  7.   Re.Pattern = "([\u4e00-\u9fa5]+)([((]+)([A-Za-z]+)([))]+)(\d+)"
  8.   With Range("E1", Cells(Rows.Count, "B").End(xlUp))
  9.     Intersect(.Offset(0, 0), .Offset(1, 2)).ClearContents
  10.     ar = .Value
  11.   End With
  12.   For i = 2 To UBound(ar)
  13.     sStr = Re.Replace(Trim(ar(i, 1)) & Trim(ar(i, 2)), "($3)$1道|$5")
  14.     If Not Dict.Exists(sStr) Then Dict.Add sStr, i
  15.   Next
  16.   Re.Pattern = "([A-Za-z]+)(\d+)"
  17.   br = Range("I1", Cells(Rows.Count, "G").End(xlUp)).Value
  18.   For i = 2 To UBound(br)
  19.     sStr = Trim(Replace(Replace(br(i, 1), "(", "("), ")", ")")) & Re.Replace(br(i, 2), "|$2")
  20.     If Dict.Exists(sStr) Then
  21.       p = Dict(sStr)
  22.       ar(p, 3) = Val(ar(p, 3)) + Val(br(i, 3)) & "m"
  23.       ar(p, 4) = ar(p, 4) + 1
  24.     End If
  25.   Next
  26.   Range("B1").Resize(UBound(ar), UBound(ar, 2)) = ar
  27.   Set Re = Nothing
  28.   Set Dict = Nothing
  29.   Beep
  30. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2022-11-19 11:49 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhangqi2534797 发表于 2022-11-19 09:40
样板文件发出来了 我本来想写sql的 但是领导要求写VBA 我就很惆怅

想写sql的 但是领导要求写VBA 我就很惆怅

你的sql也是在线sql,不用vba?

select 名称,管径(mm), sum(regexp2('\d+',管段长度(m))) 管段长度(m) from 正则表达式数据清洗后获取数值后分类合计 group by 名称,管径(mm)

Screenshot_2022-11-19-11-47-45-992_cn.uujian.browser.jpg

TA的精华主题

TA的得分主题

发表于 2022-11-19 11:50 来自手机 | 显示全部楼层
于箱长 发表于 2022-11-19 11:29
能写一个完整的SQL吗?我学习一下

select 名称,管径(mm), sum(regexp2('\d+',管段长度(m))) 管段长度(m) from 正则表达式数据清洗后获取数值后分类合计 group by 名称,管径(mm)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-11-19 12:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zpy2 发表于 2022-11-19 11:50
select 名称,管径(mm), sum(regexp2('\d+',管段长度(m))) 管段长度(m) from 正则表达式数据清洗后 ...

非常感谢,我恰好是SQL和正则都不会

TA的精华主题

TA的得分主题

发表于 2022-11-19 13:36 | 显示全部楼层
样板.zip (16.68 KB, 下载次数: 14)

TA的精华主题

TA的得分主题

发表于 2022-11-19 13:59 | 显示全部楼层

左右項目文字組成不一致, 若只是一種還好處理,
如有多種, 最好上傳更完整的~~

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-19 18:59 | 显示全部楼层


select jg.*,a.c,a.d from (select '(WS)污水管道' as A ,B from jg ) as jg
left join
(select
        '(WS)污水管道' as A ,replace(B,'DN','') as B
        ,sum(CAST(replace(C,'m','') AS SIGNED integer)) as c, count(A)  as d from b1
        group by A,B) as a
       
       
        on  a.A=jg.A and a.B=jg.B
我写的大概也是这样
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 00:40 , Processed in 0.036609 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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