【问题标题】:How can I find all cell references in a row that contain a value, and display them in one cell?如何在一行中找到包含值的所有单元格引用,并将它们显示在一个单元格中?
【发布时间】:2017-02-10 14:55:39
【问题描述】:

问题:

我有一个 Excel 工作表,我将其用于一个相当大的需求可追溯性矩阵,其中使用 QA 测试用例编号的列和需求的行。我提供了显示针对单个需求使用的测试用例数量的能力,方法是在 req 旁边有一个单元格,对每一行使用 COUNTIF 表示“x”。虽然这将显示针对该要求完成的测试数量,但它不会显示实际使用的 QA 测试用例数量。这有时需要用户向左/向右滚动才能找到针对该要求使用的确切测试用例编号(在列标题中)。

  • 例如:Req 2.1.1 显示“5”作为针对它的测试用例数。用户必须向右滚动,直到在一个单元格中找到所有 X,并在其所在的列中写下/记住 QA 编号。

我提供了一个屏幕截图来帮助说明我的意思。

我在寻找什么:

我想在“E”旁边添加一列(计算 x 的列),该列将显示给定要求/行具有“X”的每个 QA 测试用例编号(列标题 G5:HR5) .

例如:要求 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 ......但是在哪里以及如何使用?

【问题讨论】:

  • 你用的是什么excel? Office 365 Excel 具有 TEXTJOIN() 函数,可以执行您想要的操作。
  • 这里有类似的东西,它是垂直的而不是水平的,但应该稍微修改一下就可以了。 stackoverflow.com/questions/39532189/…
  • @ScottCraner 哎呀,想把它加进去!我正在使用 Excel 2016 (O365 ProPlus)。 TEXTJOIN() 看起来像是我会使用的东西,但首先我需要以某种方式收集所有首先使用的 QA 编号。

标签: excel traceability requirements-management


【解决方案1】:

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

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

作为数组公式,退出编辑模式时需要使用 Ctrl-Shift-Enter 确认,而不是 enter。如果操作正确,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

【讨论】:

  • 绝对精彩 - 完美运行!非常非常感谢你。我正在查看您之前的垂直修复链接,并试图弄清楚如何执行您刚刚在上面回答的 IF(G9:HR9="x",$G$5:$HR$5,"")。
猜你喜欢
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多