删除单个单元格中的Dupes,嵌套VBA

时间:2013-09-18 16:07:25

标签: excel vba

我需要将多个vlookup值拉入单个单元格。为此,我使用vba创建了一个名为MULTIVLOOKUP的公共函数,它完美地工作,在单个单元格中产生以下值:

Vendor, Site, ARO, ARO, ARO, Site

获得这个的公式是:=MULTIVLOOKUP($J9, $A$2:$A$5000, 4)

然后我使用stackoverflow上的代码来删除欺骗。以下是用户KazJaw提供的代码:

Function UniqueFromCell(rngCell, splitString)

Dim myCol As New Collection
Dim itmCol
Dim i As Long

Dim arrTMP As Variant
arrTMP = Split(rngCell, splitString)

For i = 1 To UBound(arrTMP)
  On Error Resume Next
  myCol.Add arrTMP(i), CStr(arrTMP(i))
  On Error GoTo 0
Next i

Dim result
For Each itmCol In myCol
  result = result & itmCol & splitString
Next

UniqueFromCell = Left(result, Len(result) - Len(splitString))

End Function

我得到的公式变为:

=UNIQUEFROMCELL(MULTIVLOOKUP($J9, $A$2:$A$5000, 4), ",").

除了我的结果是:Site, ARO

之外,它几乎完美无缺
  

我失去了供应商!

有什么建议吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

该行:

For i = 1 To UBound(arrTMP)

是问题所在。 Split返回一个从零开始的数组而不是一个基于数组的数组。编写类似LBound(arrTMP)之类的内容更安全,可以正确处理这两种数组。

For i = LBound(arrTMP) To UBound(arrTMP)

您可以了解数组在VBA here中的工作方式。