условно объединить текст из нескольких записей в vba - PullRequest
0 голосов
/ 12 августа 2011

Пример данных: UniqueID Описание ConsolidatedText Str1 Вот предложение Вот предложение Str2 И еще одно предложение. И еще одно предложение. И несколько слов Str2 И несколько слов Стр3 123 123
Str4 abc abc ### " Str5 ###

У меня есть несколько записей (~ 4000), каждая со значением UniqueID (текст) и текстовым полем (потенциально довольно длинным), которое представляет собой введенное пользователем описание данных. Мне нужно объединить электронную таблицу, объединив все описания в одну запись, где встречается многократное вхождение значения UniqueID. В общем, я хочу пройтись по диапазону потенциальных значений и сказать «если UniqueID равен, то взять все значения Description и объединить их вместе в одну строку (либо первую строку, либо новую строку), а затем удалить все старые строки «. По сути, я хочу создать поле ConsolidatedText в этом примере данных, а затем также удалить дополнительные строки. Это выходит за рамки моих возможностей программирования на VBA, и любая помощь по структуре этого макроса будет принята с благодарностью.

1 Ответ

0 голосов
/ 12 августа 2011
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
...