2

配列数式から戻り値を取得し、それらを単一のセルに連結することは可能ですか? たとえば、次のようなプロジェクト タスクの行を含む単純なスプレッドシートがあります。

Task #    Description    Blocked on    Blocking
-----------------------------------------------
1         Task 1         2             
2         Task 2                       $formula
3         Task 3         2             

セル D3 の数式で "1, 3" が返されるようにしたいと思います (ブロックされたセルに複数の値を入力することもできます)。現在、次の式で「1」を返しています。

=(INDEX($A2:$A999,MATCH(A3,$C2:$C999,0)))
4

2 に答える 2

5

探している数式は (d3 で): =IF($C$2:$C$999=$A4;$A$2:$A$999;"") +ctrl+shift+enter

必ず配列として入力してください

(注:地域の設定によっては;をに変更する必要がある場合もあります)

C のデータが現在の Ai と一致する場合、これは A の内容を返します。結果は配列であるため、現在は 1 つの結果しか表示されませんが、Transpose() を使用して同じ行で複数のセルを選択すると、F2 で ctrl+shift+enter を使用すると、すべての結果が行に表示されます! 例: D3:K3 を選択し、F2 を押し、式を書きます: =Transpose(IF($C$2:$C$999=$A4;$A$2:$A$999;""))、Ctrl+Shift+Enter を押します。 . (再度、次のように記述する必要がある場合があります: =Transpose(IF($C$2:$C$999=$A4,$A$2:$A$999,""))...)

ただし、空の結果でも列が占有されるため、右側に多くの列が必要です。空の文字列が列を占有しないように処理されたとしても、結果の列が不明であるという問題が残ります。そこで、VBA 関数 (かなり前に書いたもの) を使用して、有効な結果を 1 つのセルに (任意の区切り記号で) 連結することを提案します。

D3で最終的に提案された式: =MyConCat("-";IF($C$2:$C$999=$A2;$A$2:$A$999;"")) +ctrl+shift+enter

および MyConCat のコード (VBA コード領域のモジュールに配置するため):

' MyConCat
'
' Very simple By Apostolos Goulandris
Function MyConCat(myDelimiter As String, Avar) As String
    Dim b As Variant, Dum As String
    If IsMissing(myDelimiter) Then myDelimiter = ""
    For Each b In Avar
        Dum = IIf(Len(b) > 0, Dum & myDelimiter & b, Dum)
    Next
    MyConCat = IIf(Len(myDelimiter) > 0, Mid(Dum, Len(myDelimiter) + 1, Len(Dum)), Dum)
End Function
于 2012-12-21T16:48:51.530 に答える