0

我有一个类似的表:

102938 bob
038128 Marc
398401 Tom
298421 Jim
102938 Alex
102938 Junior
209381 Rex
398401 Oby

我想做一些=sumif(A:A, 102938,B:B)应该返回“bobAlexJunior”作为结果的东西。但这不起作用,因为sum适用于数字而不是字符串。如果我进行查找,它适用于字符串,但只找到第一行,而不是所有行。

你知道如何解决这个问题吗?

4

3 回答 3

0

这不一定特别优雅,但它可能是一个很好的起点。如果我正确理解您的要求,则可以归结为以下目标:

  1. 确定特定行是否应包含在连接字符串中(例如,如果左列 = 102938)

  2. 将第 2 列中的文本连接在一起(但仅适用于与条件匹配的那些行)

似乎 Excel 的 CONCATENATE 函数不接受范围(每个参数只有一个单独的单元格引用)。对于大量行,必须手动输入每个单元格显然会很烦人,因此我会考虑添加另一列以增量方式起作用。

例如,使用 A 列中的数字和 B 列中的名称创建第三列,该列将是累积连接字符串。

单元格 C1:

=IF(A1=102938,B1,"")

单元格 C2:

=IF(A2=102938,CONCATENATE(C1, B2),C1)

单元格 C3、C4 等向下重复 C2 的公式。

所以表格看起来像这样:

102938      bob     bob
38128       Marc    bob
398401      Tom     bob
298421      Jim     bob
102938      Alex    bobAlex
102938      Junior  bobAlexJunior
209381      Rex     bobAlexJunior
398401      Oby     bobAlexJunior

然后只需选择最后一行作为您的结果。

于 2012-11-18T23:00:27.823 回答
0

有两个简单的解决方案:

1)在第三列写一个简单的VLOOKUP公式并拖动它。然后您可以选择全部然后您可以使用第 4 列并通过使用对当前元素的第 3 列的引用来连接所有元素,并与第 4 列的前一个元素连接。

2) 使用 VBA,在第一列上使用 Range.Find() 并将其右侧的单元格添加到临时变量并返回它。

如果可能的话,使用单一公式会更加困难。我已经使用数组公式快速尝试了它并且无法成功(尽管我没有说这是不可能的)。

于 2012-11-18T22:56:00.103 回答
0

这是另一种方法,考虑到您对我的另一个答案的评论(您在其中描述有两张纸,一张包含带有代码的名称列表,一张包含唯一代码列表,每张都有一个串联的名称列表) .

您可以创建一个自定义函数,该函数接受范围和代码并返回连接的名称字符串。

将以下 VBA 粘贴到模块中(如果您不熟悉创建自定义函数,请参阅此链接):

Function NamesWithCode(PeopleCodes As Range, CodeToMatch As String)
    Dim Result As String
    For Each Row In PeopleCodes.Rows
        If Row = CodeToMatch Then
            Result = Result & Row.Offset(0, 1)
        End If
    Next
    NamesWithCode = Result
End Function

假设您的第一个工作表称为“名称”,并且有两列,如您指定的:

102938  bob
38128   Marc
398401  Tom
298421  Jim
102938  Alex
102938  Junior
209381  Rex
398401  Oby

在第二个工作表(例如“代码”)中,您可以使用新的 NamesWithCode 函数来查找每个代码的名称列表,方法是传入第一个工作表中的完整表以及查找每一行的代码:

=NamesWithCode(Names!$A$1:$A$8, A2)

所以输出将是:

Code    Names With Code
102938  bobAlexJunior
38128   Marc
398401  TomOby
298421  Jim
于 2012-11-19T00:59:36.840 回答