具有相同ID的名称应该位于一个单元格中

时间:2015-07-25 07:44:17

标签: excel vba excel-formula imacros

对于excel中的不同名称,我有不同的ID。许多名称具有相同的ID。如何相应地在一个单元格中获取具有相同id的所有名称。我需要配方奶粉。请帮帮我

2 个答案:

答案 0 :(得分:0)

这是你要找的吗?如果你到目前为止已经展示了你的进展,那就更好了,但希望能有这样的帮助。

Option Explicit

Sub Concatenate_Names()

Dim a As Integer
Dim i As Integer
Dim x As Integer

i = 1
x = *[number of items in your list]*

For a = 1 To *[number of unique values in a separate list]*

    i = 1

    Do While i <= x

        'The cell references should be dependent on where your unique  value list is,
        'as well as where the full list is.

        '"a" for the unique values, "i" for the full list - matching IDs

        If Cells(a, 8).Value = Cells(i, 1).Value Then

            '"a" for the unique values, "i" for the full list - appending names

            Cells(a, 9).Value = Cells(a, 9).Value & Cells(i, 2).Value

        End If

        i = i + 1

    Loop

Next

End Sub

答案 1 :(得分:0)

如果你想避免使用VBA方法,你仍然可以使用递归函数:

  1. 添加列以存储带有键/值的语义表示,在我的示例中,表示模式为:@Key1:Value11[;Value12...][@Key2:Value21[;Value22...]...]

    公式以递归方式构建这样的表示,最后一行将包含对键/值的完整表示:

    =IF(IFERROR(FIND("@"&A2&":";C1);-1)=-1;C1&"@"&A2&":"&B2;IF(IFERROR(FIND("@";C1;FIND("@"&A2&":";C1)+1);-2) = -2;LEFT(C1;FIND("@";C1;FIND("@"&A2&":";C1)+1)-1)&";"&B2;LEFT(C1;FIND("@";C1;FIND("@"&A2&":";C1)+1)-1)&";"&B2&RIGHT(C1;LEN(C1)-FIND("@";C1;FIND("@";C1;FIND("@"&A2&":";C1)+1)) + 1)))

  2. 添加第二个新列以检索与当前行/键关联的值,该公式使用上次计算的表示:

    =IFERROR(LEFT(RIGHT(INDEX(C:C;MATCH(REPT("z";255);C:C));LEN(INDEX(C:C;MATCH(REPT("z";255);C:C)))-FIND("@"&A2;INDEX(C:C;MATCH(REPT("z";255);C:C)))-1-LEN(A2));FIND("@";RIGHT(INDEX(C:C;MATCH(REPT("z";255);C:C));LEN(INDEX(C:C;MATCH(REPT("z";255);C:C)))-FIND("@"&A2;INDEX(C:C;MATCH(REPT("z";255);C:C)))-1-LEN(A2));2)-1);RIGHT(INDEX(C:C;MATCH(REPT("z";255);C:C));LEN(INDEX(C:C;MATCH(REPT("z";255);C:C)))-FIND("@"&A2;INDEX(C:C;MATCH(REPT("z";255);C:C)))-1-LEN(A2)))

  3. 结果应如下所示:

    Key  Value   Representation                   Values
     1     a     @1:a                             a;e;i
     2     b     @1:a@2:b                         b;h
     3     c     @1:a@2:b@3:c                     c;j
     1     e     @1:a;e@2:b@3:c                   a;e;i
     5     f     @1:a;e@2:b@3:c@5:f               f
     6     g     @1:a;e@2:b@3:c@5:f@6:g           g
     2     h     @1:a;e@2:b;h@3:c@5:f@6:g         b;h
     1     i     @1:a;e;i@2:b;h@3:c@5:f@6:g       a;e;i
     3     j     @1:a;e;i@2:b;h@3:c;j@5:f@6:g     c;j