
点亮☆星标,不错过精彩分享
如何从8个工作簿70多个工作表中查询出某个编号的物料数据呢?

这里有8个供应商数据表,每个供应商工作簿中有N个工作表,现需要根据某个物料编号,在这些表中查询出所有记录。


这种跨文件跨工作表的查询,方法有很多种,比如,用VSTACK+FILTER函数、用power query等。
但都比较麻烦,因为文件数量太多,工作簿数量不定,工作表数量不确定!
如果要手动操作,一般逻辑是这样的:需要先将这么多个数据文件,几十上百个工作中的数据先合并到一个工作表中,再用FILTER函数筛选出来。
如果只有三两个表还好,但如果有几十上百个工作表,几百上千个物料编号,手动用函数公式筛选查询,查一次可能要一个小时。
如果是要给老板或领导做的表,他们可能不会这么复杂的操作,难道你还得教他怎么写函数公式?如果这样做,老板明天就能让你放长假了。

今天我们分享一个VBA查询工具,只需要输入要查询的编号,点一下按钮几秒钟就能从几十个表中把数据查询汇总出来,【VBA代码在文章最后】。
我们演示一下,在这里输入要查询的物料编号,点一下查询按钮,选择所有查询数据源表。


确定,几秒钟时间,就能从75个工作表中,把这个编号的物料数据全部查询筛选出来。

还能把数据的来源路径一一标注清楚,方便备查。


不会VBA,需要这个查询表的小伙伴,关注公众号,回复消息私信:跨表查询,可下载。
VBA代码:
Private Sub CommandButton1_Click()Dim fileNames As VariantDim i%, j%, xc As Worksheet, startrow%Dim wb As WorkbookDim ws As WorksheetDim lastRow As LongDim arr, brr, findid$Application.ScreenUpdating = FalseSet xc = ThisWorkbook.ActiveSheetWith xcfindid = .[h1]If Len(findid) = 0 ThenMsgBox "H1查询色号为空,请输入要查询的色号"EndEnd IfIf InStr(1, .[g1], "查询") = 0 ThenMsgBox "请点到数据查询表再运行"EndEnd Ifstartrow = .Range("a50000").End(xlUp).Row.Range("a3:e" & startrow + 3).Clearstartrow = 3fileNames = Application.GetOpenFilename( _FileFilter:="Excel Files (*.xlsx; *.xlsm; *.xls), *.xlsx; *.xlsm; *.xls", _Title:="选择Excel文件", _MultiSelect:=True)If IsArray(fileNames) Then ' 检查是否选择了文件For i = LBound(fileNames) To UBound(fileNames)Set wb = Workbooks.Open(fileNames(i))If ThisWorkbook.Name = wb.Name Thenwb.Close SaveChanges:=FalseSet wb = NothingGoTo 下一文件End IfFor Each ws In wb.WorksheetslastRow = ws.Range("a50000").End(xlUp).Rowarr = ws.Range("a2:a" & lastRow + 1)For j = 1 To UBound(arr)If arr(j, 1) = findid Thenbrr = ws.Range("a" & j + 1 & ":d" & j + 1).Range("a" & startrow).Resize(1, 4) = brr.Range("e" & startrow) = GetFileNameWithoutExt(wb.Name) & "\" & ws.Name & "\" & j + 1startrow = startrow + 1End IfNext jNext wswb.Close SaveChanges:=FalseSet wb = Nothing下一文件:Next iApplication.ScreenUpdating = TrueWith .Range("a1:e" & startrow - 1).Borders.LineStyle = xlContinuous '边框.HorizontalAlignment = xlCenter '居中.VerticalAlignment = xlCenter '垂直居中End WithMsgBox "查询完成!", vbInformationElse ' 未选择文件时的提示Application.ScreenUpdating = TrueMsgBox "未选择文件", vbExclamationExit SubEnd IfEnd WithEnd SubFunction GetFileNameWithoutExt(filePath As String) As StringDim fso As ObjectDim fileName As StringSet fso = CreateObject("Scripting.FileSystemObject")fileName = fso.GetBaseName(filePath)GetFileNameWithoutExt = fileNameSet fso = NothingEnd Function
你学会了吗?
#办公软件#办公技巧#wps#officel办公技巧#excel
关注我,学习更多高效办公小技巧!
往期干货文章学习推荐:
手把手教你用EXCEL手搓一个春晚收视率数据地图?地图根据数据自动变化!
分享高效办公技巧及免费自动化模版,避免以后需要找不到,请您持续关注哦