【发布时间】:2021-06-13 19:41:43
【问题描述】:
我有一个如下所示的表格:
基本上,“MatGroup”是“StorLoc”的子类型,“StorLoc”是“Department”的子类型。
我需要在这三列中查找匹配项,然后将其他两列的值返回到右侧(这些列代表周)。
我在上图中突出显示了一个示例。我在 第 4 周 和 5 搜索 Department 1101、StorLoc 0001 和 MatGroup 1225 ,它应该返回值 243 和 245,然后可以将它们相加 = 488。
出于测试目的,我有一个工作公式可以在同一个工作表中执行此操作:
=SUMPRODUCT(XLOOKUP(K6&J8&K7;A2:A40&B2:B40&C2:C40;D2:E40))
但是,我需要一个纯 VBA 解决方案,因为我将把这些数据提取到一个完全独立的工作簿中。我无法使用与上述公式相同的解决方案,因为显然 VBA 不允许您使用 & 连接多个条件。
我目前使用大量 CountIfs 的解决方案并不完全令人满意,而且完全比必要的资源密集(而且混乱!):
resultCount = Application.WorksheetFunction.SumIfs(dataWorkBook.Range("A" & departmentStartRow & ":BC" & departmentEndRow).Columns(weekNumber + 1), dataWorkBook.Range("B" & departmentStartRow & ":B" & departmentEndRow), StorLoc, dataWorkBook.Range("C" & departmentStartRow & ":C" & departmentEndRow), MatGroup)
【问题讨论】:
-
VBA 接受
&进行连接,但其前后必须存在两个空格... -
我试过了,但我只得到一个类型不匹配的错误。
resultCount0001(storeCategory) = Application.WorksheetFunction.XLookup(storeNo & "0001" & pWS.Range(storeCategoryMatGroup1 & weekNum + 4), oWS.Range("A:A") & oWS.Range("B:B") & oWS.Range("C:C"), oWS.Range("A:B").Offset(weekNum + firstWeek))无论如何,我会在下面查看您的其他解决方案。 :)