簡體   English   中英

Excel Lookup 在刪除重復項時水平返回多個值

[英]Excel Lookup return multiple values horizontally while removing duplicates

我想對查找值列表進行垂直查找,然后將多個值返回到每個查找值的列中。 經過長時間的谷歌搜索,我實際上設法做到了這一點,這是代碼:

=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 的新手,我不知道該怎么做。 計算有這么多細胞也需要永遠。

[編輯]

你可以用修改后的公式做你想做的事,但不確定 70,000 行的效率如何。

將此公式用於第一場比賽

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

現在假設F5中的公式在 G5 中使用此公式,用CTRL+SHIFT+ENTER並復制

=IFERROR(索引(數據:$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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM