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