Excel:根据重复键组合字符串

Excel:根据重复键组合字符串

我有两列 钥匙价值 (标准地图)

有重复的键。删除重复的键(即删除重复项按钮)很简单。但这会删除值列中的一些有用数据(或者打乱配对)。

真正应该做的是合并数据,以便根据重复键将值连接起来。理想情况下,这应该在考虑特定格式的情况下完成,但这并不重要。

对于数值来说,这似乎相对简单,但对于基于文本的要求来说则不那么简单。

例如http://www.extendoffice.com/documents/excel/1268-excel-combine-duplicate-rows-and-sum.html

我希望求和等同于连接;但遗憾的是事实似乎并非如此。

答案1

思考这听起来像类似问题我刚刚用 VBA 回答了这个问题。对于您的解决方案,您需要复制列Key,删除重复项,然后使用公式调用返回以逗号分隔的值字符串的 UDF。

这是该问题的最终结果:

屏幕截图 1

代码如下:

Option Explicit
Function LookupCSVResults(lookupValue As Variant, lookupRange As Range, resultsRange As Range) As String

    Dim s As String 'Results placeholder
    Dim sTmp As String  'Cell value placeholder
    Dim r As Long   'Row
    Dim c As Long   'Column
    Const strDelimiter = "|||"  'Makes InStr more robust

    s = strDelimiter
    For r = 1 To lookupRange.Rows.Count
        For c = 1 To lookupRange.Columns.Count
            If lookupRange.Cells(r, c).Value = lookupValue Then
                'I know it's weird to use offset but it works even if the two ranges
                'are of different sizes and it's the same way that SUMIF works
                sTmp = resultsRange.Offset(r - 1, c - 1).Cells(1, 1).Value
                If InStr(1, s, strDelimiter & sTmp & strDelimiter) = 0 Then
                    s = s & sTmp & strDelimiter
                End If
            End If
        Next
    Next

    'Now make it look like CSV
    s = Replace(s, strDelimiter, ",")
    If Left(s, 1) = "," Then s = Mid(s, 2)
    If Right(s, 1) = "," Then s = Left(s, Len(s) - 1)

    LookupCSVResults = s 'Return the function

End Function

为了帮助展示示例,这里是在单元格中显示的公式E1

=LookupCSVResults(D1,B1:B7,A1:A7)

以下是该范围内数据的 CSV 版本A1:D7

亚当,红色,,红色
亚当,绿色,,绿色
亚当,蓝色
,,蓝色 鲍勃,红色,,黄色
鲍勃,黄色,,
鲍勃,绿色,,
卡尔,红色,,

答案2

我已经在整个互联网上搜索了这个问题。我修改了以下行:

If lookupRange.Cells(r, c).Value = lookupValue Then

至此,部分字符串匹配即可生效:

If InStr(1, lookupRange.Cells(r, c).Value, lookupValue) Then

相关内容