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

我想对查找值列表进行垂直查找,然后将多个值返回到每个查找值的列中。 我实际上设法做了一个长的谷歌search后,这是代码:

=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))) 

现在,我的问题是,正如你可以在公式中看到的,我的查找范围包含70,000行,这意味着很多返回值。 但是这些返回值中的大部分是双倍的。 这意味着我必须拖动上面的公式,直到所有的查找值(大约200)返回#NUM !.

有没有什么可能的办法,我想VBA是必要的,在重复删除后返回值? 我是VBA新手,我不知道该怎么做。 计算有这么多的细胞也需要永远。

将post

你可以用一个修改过的公式来做你想要的,但是不知道它有多高效率,但是有70,000行。

第一场比赛使用这个公式

=IFERROR(INDEX(Data!$H3:$H70000,MATCH($B3,Data!$J3:$J70000,0)),"")

现在假设F5中的公式使用此公式在G5中用CTRL+SHIFT+ENTER并复制

= IFERROR(INDEX(数据!$ H3:$ H70000,MATCH(1,($ B3 = Data!$ J3:$ J70000)* ISNA(MATCH(Data!$ 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 
Interesting Posts