ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何用VBA查找符合给定条件的产品信息?

如何用VBA查找符合给定条件的产品信息?

作者:绿色风 分类: 时间:2022-08-17 浏览:90
楼主
herelazy
Q:如图所示,“查找”表中列出了模糊查找的条件,如何用VBA在“数据”表中找到这些产品信息,使之显示在“查找”表中?
源数据:

 
条件:

 

A:
  1. Sub JustTest()
  2.     Dim Arr, ArrR(), i&, j As Byte, d As New Dictionary, ArrT
  3.     Arr = Range("a2", [a2].End(4)).Value
  4.     If UBound(Arr, 1) > Columns.Count / 2 Then MsgBox "超出可供查询最大记录。": Exit Sub
  5.     ReDim ArrR(1 To 10000, 1 To UBound(Arr, 1) * 2)
  6.     Range("a" & UBound(Arr, 1) + 2, Cells(Cells.Count)).Clear
  7.     For i = 1 To UBound(ArrR, 2) Step 2
  8.         ArrR(1, i) = Arr((i + 1) \ 2, 1)
  9.         ArrR(2, i) = "名称及规格 订单号码"
  10.         ArrR(2, i + 1) = "数量"
  11.     Next i
  12.     For i = 1 To UBound(Arr, 1)
  13.         d(Arr(i, 1)) = 2
  14.     Next i
  15.     ArrT = Sheets("数据").Range("A1").CurrentRegion.Value
  16.     For i = 2 To UBound(ArrT, 1)
  17.         If Len(ArrT(i, 1)) Then
  18.             For j = 1 To UBound(Arr, 1)
  19.                 If ArrT(i, 1) Like "*" & Arr(j, 1) & "*" Then
  20.                     d(Arr(j, 1)) = d(Arr(j, 1)) + 1
  21.                     ArrR(d(Arr(j, 1)), j * 2) = ArrT(i, 2)
  22.                     ArrR(d(Arr(j, 1)), j * 2 - 1) = ArrT(i, 1)
  23.                     Exit For
  24.                 End If
  25.             Next j
  26.         End If
  27.     Next i
  28.     Range("a" & UBound(Arr, 1) + 3).Resize(Application.Max(d.Items) + 2, UBound(ArrR, 2)) = ArrR
  29. End Sub
示例文件:
用VBA查找符合给定条件的产品信息.rar



该帖已经同步到 herelazy的微博
2楼
herelazy
第一幅截图看着不是很好,但是已无法修改,在图片管理中看不见这张图的链接啦!
3楼
JOYARK1958
謝謝提供學習下載中
4楼
我的1314
謝謝提供學習下載中

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap