【问题标题】:vlookup two difference data corresponding to two non-adjacent fieldsvlookup 两个不相邻字段对应的两个差异数据
【发布时间】:2016-02-17 16:32:21
【问题描述】:

我想在“否”中做一个 VLOOKUP 获取值 no“201”,其中 Purchases 表中的“no”和“box”匹配

截图

=IFERROR(INDEX($B2:$B100,MATCH(1,($A2:$A100=$H1)*($E2:$E100=I$1),0),3),"NONO")

可以有比 VLOOKUP 更好的选择,这也很好。谢谢!

【问题讨论】:

标签: excel vba


【解决方案1】:

使用这个数组公式。此公式将过滤您将放入 I1 单元格的所有数据。

=IFERROR(INDEX($A$1:$E$25,SMALL(IF($A$1:$A$25=$I$1,ROW($A$1:$A$25)),ROWS($A$1:$A1)),COLUMNS($A$1:A$1)),"")

由于它是一个数组公式,按CTRL+SHIFT+ENTER来计算公式。

示例截图:

将公式放入G4 单元格(如我的屏幕截图)后,根据需要向右和向下拖动和填充。

【讨论】:

  • 对不起,我没有使用 201,然后将其拖动并向下填写,询问是 202 Orange apple apple ok4 no thing no thing no thing
  • 输入公式后是否按Ctrl+Shift+Enter
【解决方案2】:

数组公式² 和 AGGREGATE¹ function 等函数产生的循环处理会产生计算滞后。它们引用的范围应保持最少的行数。在接收频繁添加和删除的数据上维护最少数量的相关行非常耗时。

以下公式看起来要复杂得多,但它会动态跟踪INDEX function数组 中的确切行数。为了简化公式,我允许增加一行;这是包含列标题标签的第 1 行。

以I10为标准公式,

=INDEX(B:B, AGGREGATE(15, 6, ROW($A$1:INDEX($A:$A, MATCH(1E+99,$A:$A )))/($A$1:INDEX($A:$A, MATCH(1E+99,$A:$A ))=$H10), ROW(1:1)))

向右和向下填充。

用于您的字符串连接。我从one of my previous answers 中提取了这个 VBA 用户定义函数³(又名 UDF)来解决类似的问题。

Public Function conditional_concat_strs(rSTRs As Range, rCRITs As Range, rCRIT As Range, Optional sDELIM As String = ", ")
    Dim c As Long, sTMP As String

    Set rSTRs = Intersect(rSTRs, rSTRs.Parent.UsedRange)
    Set rCRITs = Intersect(rCRITs, rCRITs.Parent.UsedRange)

    Set rSTRs = rSTRs.Cells(1, 1).Resize(rCRITs.Rows.Count, rCRITs.Columns.Count)
    For c = 1 To rCRITs.Cells.Count
        If rCRITs(c).Value2 = rCRIT Then _
            sTMP = sTMP & rSTRs(c).Value & sDELIM
    Next c
    conditional_concat_strs = Left(sTMP, Application.Max(Len(sTMP) - Len(sDELIM), 0))
End Function

在 I2 中,

=conditional_concat_strs(E:E,A:A, I1)

完整的列引用在Worksheet.UsedRange property 的范围内被截断。使用它们没有计算惩罚。

    


¹ 数组公式需要使用 Ctrl+Shift+Enter↵ 完成。一旦正确输入第一个单元格,它们就可以像任何其他公式一样被填充或向下或向右复制。尝试将全列引用减少到更接近代表实际数据范围的范围。数组公式以对数方式消耗计算周期,因此最好将引用范围缩小到最小值。更多信息请参见Guidelines and examples of array formulas

² AGGREGATE function 是在 Excel 2010 中引入的。它在早期版本中不可用。

³ 用户定义函数(又名 UDF)被放入标准模块代码表中。点击Alt+F11,当VBE打开时,立即使用下拉菜单插入►模块Alt+I,M)。将功能代码粘贴到标题为 Book1 - Module1 (Code) 的新模块代码表中。点击 Alt+Q 返回您的工作表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多