如何找到一行中包含值的所有单元格引用,并将它们显示在一个单元格中?
How can I find all cell references in a row that contain a value, and display them in one cell?
问题:
我有一个 Excel sheet 用于相当大的需求可追溯性矩阵,使用 QA 测试用例编号的列和需求的行。我提供了显示已针对单个需求使用的测试用例数量的功能,方法是在请求旁边有一个单元格,每行使用 "x" 的 COUNTIF。虽然这将显示针对该要求完成的测试数量,但它不会显示实际使用的 QA 测试用例数量。这有时需要用户滚动 left/right 以找到针对该要求使用的确切测试用例编号(在 headers 列中)。
- 例如:Req 2.1.1 显示“5”作为对其使用的测试用例数。用户必须向右滚动直到找到单元格中的所有 X,然后在它所在的列中写入 down/remember QA 编号。
我附上了一张截图来帮助说明我的意思。
我在找什么:
我想在 "E" 旁边添加一列(计算 x 的列),它将显示每个 QA 测试用例编号(第 headers G5:HR5 列) "X" 对于给定的 requirement/row.
Ex:要求 1.1.2 在该行中有四个 x,表示用于此要求的四个不同测试用例(QA-466、QA-467、QA-468 和 QA-470)。我想在显示 1.1.2 要求的行中的某处放置一个单元格 "QA-466 QA-467 QA-468 QA-470".
我感觉我需要多个隐藏单元格来 运行 一些公式来完成这项工作,并且我会在某个时候使用 REFERENCE 和 OFFSET.. .但是在哪里以及如何?
如果您有 OFFICE 365 Excel,请在 F9 中使用 TEXTJOIN() 作为数组公式:
=TEXTJOIN(" ",TRUE,IF(G9:HR9="x",$G:$HR,""))
作为数组公式,退出编辑模式时需要用Ctrl-Shift-Enter确认,而不是回车。如果正确完成,那么 Excel 将在公式周围放置 {}
。
小例子:
注意
OFFICE 365 中引入了 TEXTJOIN 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
问题:
我有一个 Excel sheet 用于相当大的需求可追溯性矩阵,使用 QA 测试用例编号的列和需求的行。我提供了显示已针对单个需求使用的测试用例数量的功能,方法是在请求旁边有一个单元格,每行使用 "x" 的 COUNTIF。虽然这将显示针对该要求完成的测试数量,但它不会显示实际使用的 QA 测试用例数量。这有时需要用户滚动 left/right 以找到针对该要求使用的确切测试用例编号(在 headers 列中)。
- 例如:Req 2.1.1 显示“5”作为对其使用的测试用例数。用户必须向右滚动直到找到单元格中的所有 X,然后在它所在的列中写入 down/remember QA 编号。
我附上了一张截图来帮助说明我的意思。
我在找什么:
我想在 "E" 旁边添加一列(计算 x 的列),它将显示每个 QA 测试用例编号(第 headers G5:HR5 列) "X" 对于给定的 requirement/row.
Ex:要求 1.1.2 在该行中有四个 x,表示用于此要求的四个不同测试用例(QA-466、QA-467、QA-468 和 QA-470)。我想在显示 1.1.2 要求的行中的某处放置一个单元格 "QA-466 QA-467 QA-468 QA-470".
我感觉我需要多个隐藏单元格来 运行 一些公式来完成这项工作,并且我会在某个时候使用 REFERENCE 和 OFFSET.. .但是在哪里以及如何?
如果您有 OFFICE 365 Excel,请在 F9 中使用 TEXTJOIN() 作为数组公式:
=TEXTJOIN(" ",TRUE,IF(G9:HR9="x",$G:$HR,""))
作为数组公式,退出编辑模式时需要用Ctrl-Shift-Enter确认,而不是回车。如果正确完成,那么 Excel 将在公式周围放置 {}
。
小例子:
注意
OFFICE 365 中引入了 TEXTJOIN 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