Excel查找在删除重复项时水平返回多个值

Excel查找在删除重复项时水平返回多个值,excel,return-value,multiple-instances,vlookup,vba,Excel,Return Value,Multiple Instances,Vlookup,Vba,我想对查找值列表进行垂直查找,然后将多个值返回到每个查找值的列中。经过长时间的谷歌搜索,我终于做到了这一点,代码如下: =INDEX(Data!$H$3:$H$70000, SMALL(IF($B3=Data!$J$3:$J$70000, ROW(Data!$J$3:$J$70000)-MIN(ROW(Data!$J$3:$J$70000))+1, ""), COLUMN(A$2))) 现在,我的问题是,正如您在公式中看到的,我的查找范围包含70000行,这意味着有很多返回值。但大多数返回值都

我想对查找值列表进行垂直查找,然后将多个值返回到每个查找值的列中。经过长时间的谷歌搜索,我终于做到了这一点,代码如下:

=INDEX(Data!$H$3:$H$70000, SMALL(IF($B3=Data!$J$3:$J$70000, ROW(Data!$J$3:$J$70000)-MIN(ROW(Data!$J$3:$J$70000))+1, ""), COLUMN(A$2)))
现在,我的问题是,正如您在公式中看到的,我的查找范围包含70000行,这意味着有很多返回值。但大多数返回值都是双倍的。这意味着我必须在许多列上拖动上述公式,直到所有查找值(大约200)返回#NUM

是否有任何可能的方法,我想VBA是必要的,在删除重复项后返回值?我是VBA的新手,不知道该怎么做。而且,要计算出有这么多的细胞也要花很长时间

[已编辑]

你可以用一个修改过的公式做你想做的事情,但不确定它在70000行的情况下会有多高效

使用此公式进行第一次匹配

=IFERROR(索引(数据!$H3:$H70000,匹配($B3,数据!$J3:$J70000,0)),“”)

现在假设在F5中的公式在G5中使用此公式,并通过
CTRL+SHIFT+ENTER
确认,然后跨

=iError(索引(数据!$H3:$H70000,匹配(1)($B3=数据!$J3:$J70000)*ISNA(匹配(数据!$H3:$H70000,$F5:F5,0)),0)),“”)

根据公式1的位置更改了粗体部分


这将为您提供一个不重复的列表…..当您的值用完时,您会得到空白而不是错误

不确定您是否仍在寻找VBA答案,但这应该可以完成工作-在我的机器上运行大约需要25秒-这可能会被本论坛上的人加速:

Sub ReturnValues()

Dim rnSearch As Range, rnLookup As Range, rnTemp As Range Dim varArray
As Variant Dim lnIndex As Long Dim strTemp As String

Set rnSearch = Sheet1.Range("A1:A200") 'Set this to your 200 row value range
Set rnLookup = Sheet2.Range("A1:B70000") 'Set this to your lookup range (assume 2
columns)

varArray = rnLookup

For Each rnTemp In rnSearch
    For lnIndex = LBound(varArray, 1) To UBound(varArray, 1)
        strTemp = rnTemp.Value
        If varArray(lnIndex, 1) = strTemp Then
            If WorksheetFunction.CountIf(rnTemp.EntireRow, varArray(lnIndex, 2)) = 0 Then 'Check if value exists already
                Sheet1.Cells(rnTemp.Row, rnTemp.EntireRow.Columns.Count).End(xlToLeft).Offset(0, 1).Value =
varArray(lnIndex, 2)
            End If
        End If
    Next Next

End Sub

Hi Ampi-只是澄清一下,您有一个包含200个值的列表和一个包含70000个值的查找表来比较它们。对于这200个值中的每一个,您都希望显示查找表中的所有匹配项,每个匹配项都在各自的列中。这将导致A列中有200个值,B、C、D列。。。填充了匹配项。准确吗?好吧,看起来不错,我要试试。唯一的问题是,计算当前公式已经花费了很多时间。也许VBA可以更快,或者这是一种错觉?不管怎样,它工作得非常好,比我用countif找到的任何其他解决方案都好。谢谢谢谢,我一定要试一试!