我使用Microsoft Excel处理大量数据,尤其是制造日期(MFD)和批号。
日期可以有多个条目,条目的可能性类似或不同。例如
MFD B.No.
05-Apr-18 AD0418BB05
05-Apr-18 AD0418BB05
06-Apr-18 AD0418BB06
06-Apr-18 AD0418BB06
07-Apr-18 AA0418BB07
07-Apr-18 BB0418BB07
我尝试使用公式将日期合并到另一列中,
=IFERROR(INDEX($A$2:$A$15, MATCH(0,COUNTIF($D$1:D1, $A$2:$A$15), 0)),"")
在下一列中,我使用了concatenateif公式来连接与每个日期相对应的值。代码如下,
=CONCATENATEIF($A$2:$A$15, D2, $B$2:$B$15, ",")
我得到的输出是
MFD B.No.
05-Apr-18 AD0418BB05,AD0418BB05
06-Apr-18 AD0418BB06,AD0418BB06
07-Apr-18 AA0418BB07,BB0418BB07
在07-Apr-18
上,它很棒。但是,在05-Apr-18
和06-Apr-18
上,两个相似的条目被串联在一起。我希望只显示一次。有谁知道我该怎么办?
谢谢。
P.S。 :我无法执行删除重复项选项,因为我有许多与此相关的数据!
答案 0 :(得分:2)
您需要为此调整连接功能。
我引入了AllowDuplicates
参数来选择是否应将重复项串联起来。
因此,像=CONCATENATEIF($A$2:$A$15, D2, $B$2:$B$15, ",", FALSE)
一样使用它,以防止重复。
Function ConcatenateIf(CriteriaRange As Range, _
Condition As Variant, _
ConcatenateRange As Range, _
Optional Separator As String = ",", _
Optional AllowDuplicates As Boolean = True) As Variant
Dim strResult As String
On Error GoTo ErrHandler
If CriteriaRange.Count <> ConcatenateRange.Count Then
ConcatenateIf = CVErr(xlErrRef)
Exit Function
End If
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
Dim i As Long
For i = 1 To CriteriaRange.Count
If CriteriaRange.Cells(i).Value = Condition Then
If AllowDuplicates Then
strResult = strResult & Separator & ConcatenateRange.Cells(i).Value
Else
If Not dict.Exists(ConcatenateRange.Cells(i).Value) Then
dict.Add ConcatenateRange.Cells(i).Value, 0
strResult = strResult & Separator & ConcatenateRange.Cells(i).Value
End If
End If
End If
Next i
If strResult <> "" Then
strResult = Mid(strResult, Len(Separator) + 1)
End If
ConcatenateIf = strResult
Exit Function
ErrHandler:
ConcatenateIf = CVErr(xlErrValue)
End Function