【问题标题】:How to search 2 values on another Sheet and then based on that return a specific cell from the same row as them back on the 1st Sheet?如何在另一个工作表上搜索 2 个值,然后基于该值从与它们返回第一个工作表的同一行返回一个特定单元格?
【发布时间】:2020-01-30 11:12:28
【问题描述】:

我在考虑 双 VBA VLOOKUP 或双条件如果对于这 2 个单元格并从 Sheet1 的特定行返回另一个单元格。

找到字符串时基本上是双 VBA VLOOKUP 或双条件 IF 我将使用 VBA 中的 VLOOKUP ,从 Sheet 2 Range A1:A999D2:D999 的 Sheet 1 中查找 A2 和 D2 ,如果结果与 Sheet 1 中 C2 上同一行的输出 C 单元格匹配

但不确定如何进一步进行。任何建议将不胜感激。谢谢!

【问题讨论】:

标签: excel vba


【解决方案1】:

完全无需 VBA 即可:

=INDEX(Sheet2!$C$1:$C$999, AGGREGATE(15, 6, ROW(Sheet2!$A$1:$A$999)/(--(Sheet2!$A$1:$A$999=$A1)*--(Sheet2!$B$1:$B$999=$B1)), 1), 1)

显而易见的是Index - 将AGGREGATE 替换为MATCH,您可能已经认出了它:

=INDEX(Sheet2!$C$1:$C$999, MATCH(???), 1)

但是,我们不使用MATCH,而是使用the AGGREGATE function

AGGREGATE(15, 6, ROW(Sheet2!$A$1:$A$999)/(--(Sheet2!$A$1:$A$999=$A1)*--(Sheet2!$B$1:$B$999=$B1)), 1)
  1. 第一个参数 (15) 只是告诉我们在列表中查找 kth SMALLest 值。这类似于使用SMALL 函数
  2. 第二个参数 (6) 告诉我们丢弃列表中的任何错误值
  3. 第三个参数是要查看的列表 - 我们稍后会分解它
  4. 最后一个参数 (1) 告诉我们从列表中获取第一个st 最小值 - 实际上是 MIN,但 MIN 不能很好地处理计算列表李>

那么,我们的列表是什么。我们来看看公式:

ROW(Sheet2!$A$1:$A$999)/(--(Sheet2!$A$1:$A$999=$A1)*--(Sheet2!$B$1:$B$999=$B1))

这里有两个重要的部分——首先,ROW(Sheet2!$A$1:$A$999) 会输出我们想要的行号,这样我们就可以在INDEX 中使用它。其次,我们将它除以一个值,当 A 列匹配 (--(Sheet2!$A$1:$A$999=$A1)) B 列匹配 (--(Sheet2!$B$1:$B$999=$B1)) 时为 1,但当其中任何一个不匹配时为 0吨。而且,任何除以 0 都会产生 #DIV0! 错误 - 这意味着它会从我们的列表中被丢弃!

因此,AGGREGATE 的输出是值匹配的最小行号。如果没有这样的行,那么您将收到#NUM! 错误。

【讨论】:

  • 那么关于在 Sheet2 上找到的 Sheet1 中的 D2 单元格的第二个条件呢?
  • @Gordon ...您是否尝试过仅更改它查看的列? INDEX(Sheet2!$D$1:$D$999 将提取性别,而--(Sheet2!$D$1:$D$999=$D1) 将搜索它。 (请注意,您没有在问题中标注您的哪些图片是Sheet1Sheet2
  • 带有黄色单元格的图片是Sheet 1,第二张图片是Sheet2。我正在尝试通过使用 VBA 来做到这一点。谢谢!
【解决方案2】:

以下 vba 宏可能会有所帮助:

Sub lookupMatch()
    Dim TotalCols As Long
    Dim rng As Range
    Dim i As Long

    'Copy matched up values from sheet2 to sheet1
    Sheets("Sheet2").Select
    TotalCols = ActiveSheet.UsedRange.Columns.Count

    'Changed Cols to Columns on the above line.

    Range("C1:C" & TotalCols).Copy Destination:=Sheets("Sheet1").Range("C2")

    'destination sheet
    Sheets("Sheet2").Select

    For i = 1 To TotalCols
        'Search for the value on sheet2
        Set rng = Sheets("Sheet2").UsedRange.Find(Cells(i, 3).Value)
        'If found put its value on destination sheet
        If Not rng Is Nothing Then
            Cells(i, 2).Value = rng.Value
        End If
    Next
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多