2017-08-10 78 views
0

我很难在标题中描述问题,因此请原谅任何误导性描述。Excel |获取特定文本作为列表的所有列/行名称

最简单的方法来描述我需要的是一个例子。我有一个表,如:

A B C 
1 x 
2 x x 
3  x x 

现在,我要的是一个单元格的公式为每一个列,每个行或列名对于每个被置于x的行。在如下示例中:

 A B C 
     1,2 2,3 3 
1 A  x 
2 A, B x x 
3 B, C  x x 

列名和行名称与Excel名称不等效。它适用于单个单元格的简单WHEN语句(= WHEN(C3 =“x”; C1)),但不适用于一组单元格(= WHEN(C3:E3 =“x”; C1:E1))。这样的配方应该如何/如何?

+1

嗯,你会希望能够连接数组公式。如果没有UDF,这在Excel中是不可能的,但谷歌表单支持它。不,不知道这是否仍然如此... –

回答

1

所以我找到了我的问题的答案。 Excel提供了正常的CONCATENATE函数。需要的是类似CONCATENATEIF(德文= verkettenwenn)功能。通过在基于ransi from 2011 on the ms-office-forum.net的线程的VBA中添加模块,可以使用功能verkettenwenn。为德国模块的代码如下所示:

Option Explicit 


Public Function verkettenwenn(Bereich_Kriterium, Kriterium, Bereich_Verketten) 
    Dim mydic As Object 
    Dim L As Long 
    Set mydic = CreateObject("Scripting.Dictionary") 
    For L = 1 To Bereich_Kriterium.Count 
     If Bereich_Kriterium(L) = Kriterium Then 
      mydic(L) = Bereich_Verketten(L) 
     End If 
    Next 
    verkettenwenn = Join(mydic.items, ", ") 
End Function 

随着地方公式所提到的例子之一是模块的样子:=verkettenwenn(C3:E3;"x";$C$1:$K$1)

CONCATENATEIF功能的英文代码也许应该是:

Option Explicit 


Public Function CONCATENATEIF(Criteria_Area, Criterion, Concate_Area) 
    Dim mydic As Object 
    Dim L As Long 
    Set mydic = CreateObject("Scripting.Dictionary") 
    For L = 1 To Criteria_Area.Count 
     If Criteria_Area(L) = Criterion Then 
      mydic(L) = Concate_Area(L) 
     End If 
    Next 
    CONCATENATEIF = Join(mydic.items, ", ") 
End Function 
+0

很高兴看到你找到答案 –