我如何find包含一个值的行中的所有单元格引用,并将它们显示在一个单元格中?

问题:

我有一个Excel工作表,我正在使用一个相当大的需求追溯matrix,使用QAtesting用例编号的列和需求的行。 我已经提供了通过在每个行使用COUNTIF为“x”请求req的单元格来显示已经用于单个需求的testing用例的数量的能力。 虽然这将显示针对该要求所做的testing次数,但并不显示实际使用的QAtesting用例编号。 这有时需要用户向左/向右滚动以find已经用于该要求的确切的testing用例编号(在列标题中)。

  • 例如:Req 2.1.1显示“5”作为对其使用的testing用例的数量。 用户必须向右滚动,直到find单元格中的所有X,并记下/记住所在列中的QA编号。

我已经包含一个截图来帮助展示我的意思。 RTM示例

我在寻找什么:

我想添加一个“E”(一个计数x的)旁边的列,它将显示每个QAtesting用例编号(列标题G5:HR5),对于给定的要求/行,它具有“X”。

例如:要求1.1.2在该行中有四个x,表示用于该要求的四个不同的testing用例(QA-466,QA-467,QA-468和QA-470)。 我希望有一个单元格在1.1.2要求显示“QA-466 QA-467 QA-468 QA-470”。

我有一种感觉,我需要更多的隐藏单元来运行一些公式来完成这个工作,而且我会在某个时候使用REFERENCE和OFFSET …但是在哪里以及如何?

如果您有OFFICE 365 Excel,请使用TEXTJOIN()作为F9中的数组公式:

=TEXTJOIN(" ",TRUE,IF(G9:HR9="x",$G$5:$HR$5,"")) 

作为一个数组公式,在退出编辑模式时,需要用Ctrl-Shift-Enter确认而不是input。 如果正确完成,则Excel将在公式周围放置{}

小例子:

在这里输入图像说明


注意

TEXTJOIN在OFFICE 365 Excel中引入。

如果您没有TEXTJOIN函数,则将以下内容放在附加到工作簿的模块中。 并使用上面描述的公式:

 Function TEXTJOIN(delim As String, skipblank As Boolean, arr) Dim d As Long Dim c As Long Dim arr2() Dim t As Long, y As Long t = -1 y = -1 If TypeName(arr) = "Range" Then arr2 = arr.Value Else arr2 = arr End If On Error Resume Next t = UBound(arr2, 2) y = UBound(arr2, 1) On Error GoTo 0 If t >= 0 And y >= 0 Then For c = LBound(arr2, 1) To UBound(arr2, 1) For d = LBound(arr2, 1) To UBound(arr2, 2) If arr2(c, d) <> "" Or Not skipblank Then TEXTJOIN = TEXTJOIN & arr2(c, d) & delim End If Next d Next c Else For c = LBound(arr2) To UBound(arr2) If arr2(c) <> "" Or Not skipblank Then TEXTJOIN = TEXTJOIN & arr2(c) & delim End If Next c End If TEXTJOIN2 = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim)) End Function