ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求写一个VBA代码匹配出多个值

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-30 18:28 | 显示全部楼层 |阅读模式

求写一个VBA代码匹配出订单号,存在以下特殊情形:
1、第三方号可能会匹配出多个订单号(VLOOKUP只能匹配出第一个,不适用),这个可能要看车牌号和金额。
2、订单号在源数据表格是唯一值,但是在匹配项这里可能重复出现,金额会被拆分,如170元,在匹配表里,会出现两个85元。
3、要保证匹配项匹配出来的订单号金额合计=源数据的订单号金额合计
image.png

image.png

工作簿4.rar

1.46 MB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2024-7-30 18:58 | 显示全部楼层
用字典就行。

工作簿4.zip

1.45 MB, 下载次数: 14

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-30 18:59 | 显示全部楼层
参与一下。。。

  1. Sub ykcbf()   '//2024.7.30
  2.     Dim arr, d
  3.     Application.ScreenUpdating = False
  4.     Set d = CreateObject("Scripting.Dictionary")
  5.     With Sheets("源数据")
  6.         r = .Cells(.Rows.Count, "a").End(xlUp).Row
  7.         arr = .[a1].Resize(r, 4)
  8.     End With
  9.     For i = 2 To UBound(arr)
  10.         s = arr(i, 2) & "|" & arr(i, 3) & "|" & arr(i, 4)
  11.         d(s) = arr(i, 1)
  12.     Next
  13.     With Sheets("匹配项")
  14.         r = .Cells(.Rows.Count, "a").End(xlUp).Row
  15.         arr = .[a1].Resize(r, 4)
  16.         For i = 2 To UBound(arr)
  17.             s = arr(i, 3) & "|" & arr(i, 1) & "|" & arr(i, 2)
  18.             If d.Exists(s) Then
  19.                 arr(i, 4) = d(s)
  20.             End If
  21.         Next
  22.         .[d1].Resize(r, 1) = Application.Index(arr, 0, 4)
  23.     End With
  24.     Set d = Nothing
  25.     Application.ScreenUpdating = True
  26.     MsgBox "OK!"
  27. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2024-7-30 21:08 | 显示全部楼层
参与一下,进过参考。。。
image.png
image.png

工作簿4.zip

1.45 MB, 下载次数: 11

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-30 21:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
代码如下。。。
Sub test()
    Set d = CreateObject("scripting.dictionary")
    Set wb = ThisWorkbook
    Set sht = wb.Sheets("源数据")
    Set sh = wb.Sheets("匹配项")
    arr = sht.[a1].CurrentRegion
    brr = sh.[a1].CurrentRegion
    ReDim crr(1 To UBound(brr), 1 To 1)
    For i = 2 To UBound(arr)
        s = arr(i, 2) & arr(i, 3)
        If Not d.exists(s) Then
            d(s) = arr(i, 1)
        End If
    Next
    For i = 2 To UBound(brr)
        s = brr(i, 3) & brr(i, 1)
        If d.exists(s) Then
            crr(i, 1) = d(s)
        End If
    Next
    Set d = Nothing
    sh.[d1].Resize(UBound(crr), 1) = crr
    sh.[d1] = "订单号"
    Beep
End Sub

TA的精华主题

TA的得分主题

发表于 2024-7-30 21:39 | 显示全部楼层
本帖最后由 quqiyuan 于 2024-7-30 21:58 编辑

这个表格其实有些重复的,用公式筛选也可以做出来,字典反而不行,要从新写,算了,公式还一目了然
image.jpg
=INDEX(FILTER(源数据!A:A,(A2=源数据!C:C)*(源数据!B:B=C2),""),COUNTIFS(A$2:A2,A2,C$2:C2,C2&"*"))
下拉
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 07:37 , Processed in 0.039189 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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