ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 根据单元格药品名称查找药品入库明细中全部发票号与数量

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-7-12 15:10 | 显示全部楼层 |阅读模式
本帖最后由 业务员 于 2023-7-12 15:14 编辑

image.png

上图红色字体是药品信息,以此去入库信息工作表检索药品对应的发票号和数量
image.png
上图红色信息是需要引用的信息

我的需求,查询结果如下图
image.png


药品信息,入库信息都是很多的,同一个药品可以有发票七八张,我上传少量数据供老师们测试。
image.png

发票查找测试.zip

9.47 KB, 下载次数: 16

TA的精华主题

TA的得分主题

发表于 2023-7-12 16:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
测试看看呢!
Dingtalk_20230712161606.jpg

发票查询测试.rar

16.34 KB, 下载次数: 21

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-12 16:19 | 显示全部楼层
本帖最后由 业务员 于 2023-7-12 16:29 编辑

这么简单啊,我试试哈。谢啦,感觉还不错,我自己吧i从2到100,100不够智能,用vba改成了最后一行

TA的精华主题

TA的得分主题

发表于 2023-7-12 16:20 | 显示全部楼层
用到SQL、getrows,split、join
GIF 2023-07-12 16-17-34.gif

发票查找测试.zip

16.79 KB, 下载次数: 10

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-7-12 16:25 | 显示全部楼层
Sub limonet()
    Dim Cn As Object, StrSQL$, i%, Arr As Variant
    Set Cn = CreateObject("adodb.connection")
    Cn.Open "provider=microsoft.ace.oledb.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.FullName
    StrSQL = "select 名称,发票号&'@'&数量 as result from [入库信息$] order by 名称"
    StrSQL = "select result from (" & StrSQL & ") where 名称='"
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
        Arr = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Cn.Execute(StrSQL & Cells(i, "B").Value & "'").getrows))
        Cells(i, "R").Resize(1, UBound(Arr) * 2) = Split(Join(Arr, "@"), "@")
    Next i
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-7-12 16:28 | 显示全部楼层
字典,请测试

发票查找测试.rar

16.48 KB, 下载次数: 17

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-7-12 16:28 | 显示全部楼层
Sub 匹配()
Application.ScreenUpdating = False
Dim ar As Variant, br As Variant
Dim i As Long, r As Long, rs As Long
Dim d As Object
Set d = CreateObject("scripting.dictionary")
With Sheets("入库信息")
    r = .Cells(Rows.Count, 1).End(xlUp).Row
    ar = .Range("a1:h" & r)
End With
For i = 2 To UBound(ar)
     If Trim(ar(i, 4)) <> "" Then
        If Not d.exists(Trim(ar(i, 4))) Then
            d(Trim(ar(i, 4))) = ar(i, 3)
        Else
            d(Trim(ar(i, 4))) = d(Trim(ar(i, 4))) & "|" & ar(i, 3)
        End If
    End If
Next i
With Sheets("合同量内表")
    rs = .Cells(Rows.Count, 2).End(xlUp).Row
    .[a1].CurrentRegion.Offset(1, 17) = Empty
    br = .Range("b1:b" & rs)
    For i = 2 To UBound(br)
        y = 17
         If Trim(br(i, 1)) <> "" Then
            If d.exists(Trim(br(i, 1))) Then
                zd = d(Trim(br(i, 1)))
                If InStr(zd, "|") = 0 Then
                    .Cells(i, 18) = zd
                Else
                    rr = Split(zd, "|")
                    For s = 0 To UBound(rr)
                        y = y + 1
                        .Cells(i, y) = rr(s)
                    Next s
                End If
            End If
        End If
    Next i
End With
Application.ScreenUpdating = True
MsgBox "ok!"
End Sub

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

发表于 2023-7-12 16:30 | 显示全部楼层
发票查找测试.rar (17.5 KB, 下载次数: 15)

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-12 16:36 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-1 22:18 , Processed in 0.046272 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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