有条件地连接vba中多个记录的文本

时间:2011-08-12 16:38:49

标签: vba excel-vba string-concatenation excel

示例数据:     UniqueID描述ConsolidatedText     Str1这是一个句子这是一个句子     Str2和另一句话。还有一句话。还有一些话     Str2和一些话     Str3 123 123
    Str4 abc abc ###“     Str5 ###

我有许多记录(~4000),每个记录都有一个UniqueID值(文本)和一个文本字段(可能非常冗长),这是用户输入的数据描述。我需要通过将所有描述连接到一个记录来合并电子表格,其中有多个UniqueID值出现。通常,我想循环遍历潜在值的范围并说“如果UniqueID相等,则获取所有Description值并将它们连接在一起(第一行或新行)然后删除所有旧的行“。基本上,我想在此示例数据中创建ConsolidatedText字段,然后还删除额外的行。这超出了我的VBA编程能力,对此宏结构的任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:0)

Option Explicit

Sub Tester()
    Dim d As Object
    Dim c As Range, sId, sDesc, k

    Set d = CreateObject("Scripting.Dictionary")
    For Each c In ActiveSheet.Range("A2:A4002")
        sId = Trim(c.Value)
        sDesc = c.Offset(0, 1).Value
        If Not d.Exists(sId) Then
            d(sId) = sDesc
        Else
            d(sId) = d(sId) & "   " & sDesc
        End If
    Next c

    DumpDict ActiveSheet.Parent.Sheets("Summary").Range("A2"), d

End Sub

Sub DumpDict(rng As Range, d As Object)
Dim k
    For Each k In d.Keys
        rng.Value = k
        rng.Offset(0, 1).Value = d(k)
        Set rng = rng.Offset(1, 0)
    Next k
End Sub