2017-02-10 15 views
2

問題:値を含む行内のすべてのセル参照を見つけて1つのセルに表示するにはどうすればよいですか?

私はQAテストケース番号の列を使用してかなり大きな要件トレーサビリティマトリックスのために使用していますExcelシート、および要件の行を持っています。私は、すべての行について「x」のCOUNTIFを使用してreqの隣にセルを置くことによって、単一の要件に対して使用されたテストケースの数を表示する機能を提供しました。これは、その要件に対して行われたテストの数を示していますが、使用された実際のQAテストケース番号は表示されません。これにより、ユーザーは、その要件に対して使用された正確なテストケース番号(列ヘッダー内)を見つけるために、左右にスクロールする必要があることがあります。

  • たとえば、Req 2.1.1は、それに対して使用されるテストケースの数として「5」を示しています。ユーザーはセル内のすべてのXを見つけるまで右にスクロールし、その列にQA番号を書き留めておいてください。

私が意味することを示すのに役立つスクリーンショットが含まれています。すべてのQAテストケースの数が表示されます、私は「E」の横の列を追加したい

(X年代をカウント1)(列ヘッダー: 私が探してRTM Example

G5:HR5)には、所要量/行に対して「X」が付いています。

例:要件1.1.2には、この行に4つのxがあり、この要件に使用される4つの異なるテストケース(QA-466、QA-467、QA-468、およびQA-470)が示されています。 1.1.2の要件表示 "QA-466 QA-467 QA-468 QA-470"で行のどこかにセルを持っていたいと思います。

私は、この仕事をするためにいくつかの数式を実行するために、いくつかの隠れたセル以上が必要であると感じています。そして、ある時点でREFERENCEとOFFSETを使用しています。 ?

+0

どのように優れていますか? Office 365 Excelには、必要な処理を行うTEXTJOIN()関数があります。 –

+1

ここでは似たようなものがありますが、それは水平ではなく垂直ですが、ちょっと変わってトリックを行うべきです。 http:// stackoverflow。com/questions/39532189/vlookup-with-multiple-criteria-in-one-cellを返す –

+0

@ScottCranerこれを追加するつもり!私はExcel 2016(O365 ProPlus)を使用しています。 TEXTJOIN()は私が使用するもののように見えますが、最初に何らかの形で使用されたQA番号をすべて収集する必要があります。 –

答えて

3

は、Office 365 Excelを持っている場合は、F9で配列数式としてTEXTJOIN()を使用します。

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

は、それが編集を終了するときはCtrl-Shiftキーを押しながら入力する代わりに入力して確認する必要があります、配列数式ビーイングモード。正しく実行された場合、Excelは{}を数式の周りに置きます。

小さな例:

enter image description here


NOTE

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 
+0

絶対に素晴らしい - 完璧に働いた!本当にありがとう。私は垂直修正のためのあなたの以前のリンクを見ていましたが、上で答えたばかりのIF(G9:HR9 = "x"、$ G $ 5:$ HR $ 5、 "")を行う方法を理解しようとしていました。 –

関連する問題