私の知る限り、Excelでコンマ区切りのタグを解析および要約できる組み込み機能はありません。もちろん、ワークシート関数と小さなVBAを使用して独自のソリューションを作成できます。これを行うための簡単なソリューションを次に示します。
ステップ1:Alt+ F11を押して、ExcelでVBAエディターペインを開きます。新しいモジュールを挿入して、カスタム関数のこのコードに貼り付けます。
Public Function CCARRAY(rr As Variant, sep As String)
'rr is the range or array of values you want to concatenate. sep is the delimiter.
Dim rra() As Variant
Dim out As String
Dim i As Integer
On Error GoTo EH
rra = rr
out = ""
i = 1
Do While i <= UBound(rra, 1)
If rra(i, 1) <> False Then
out = out & rra(i, 1) & sep
End If
i = i + 1
Loop
out = Left(out, Len(out) - Len(sep))
CCARRAY = out
Exit Function
EH:
rra = rr.Value
Resume Next
End Function
この関数を使用すると、コンマ区切りリストを作成して、所有するタグデータを要約できます。
ステップ2:ワークシートで、検索するタグ(以下の例ではH2)にセルを入力します。右側のセルで、Ctrl+ Shift+を押して次の数式を入力しますEnter。
=IFERROR(CCARRAY(IF(NOT(ISERROR(FIND(H2,$B$2:$B$6))),$A$2:$A$6),", "),"No matches found.")
Ctrl+ Shift+を押すEnterと、数式を配列数式として入力します。{...}
数式バーに囲まれて表示されます。式に$B$2:$B$6
は、にリストされているアイテムのすべてのタグを保持する範囲があることに注意してください$A$2:$A$6
。
編集:
一致が1つのセルのリストではなく列にリストされることを気にしない場合、ワークシート関数のみを使用してタグの一致を返すことができます。
あなたのタイトルがである場合Column A
、タグはでありColumn B
、そしてあなたが探しているタグはであるH2
あなたは、以下を使用することができ、配列数式をにI2
し、必要な限りフィルダウン:
=IFERROR(INDEX($A$1:$A$6,SMALL(IF(NOT(ISERROR(FIND($H$2,$B$1:$B$6))),ROW($B$1:$B$6),2000000),ROW()-1)),"")
数式は、最初に各行のタグに検索語が含まれているかどうかに基づいて数値の配列を形成することにより機能します。一致が見つかった場合、行番号は配列に保存されます。見つからない場合、2000000が配列に格納されます。次に、SMALL(<array>,ROW()-1)
式の一部はROW()-1
配列からth番目に小さい値を返します。次に、この値はインデックス引数としてINDEX()
関数に渡され、タイトルの配列内のそのインデックスの値が返されます。タイトル配列の行数よりも大きい数がINDEX()
引数として渡されると、エラーが返されます。一致が見つからない場合は2000000が引数として渡されるため、エラーが返されます。IFERROR()
関数は返します""
。この場合には。
ROW()
この式でどのように使用されているかを把握することが重要です。別の行から始まる結果のリストを表示するSMALL()
場合は、配列の最初の最小値を返すように関数の2番目の引数を調整する必要があります。たとえば、結果のリストが行2ではなく行1で始まる場合、のSMALL(...,ROW())
代わりに使用しますSMALL(...,ROW()-1)
。
また、タイトルとタグのリストが行1で始まっていない場合は、式も調整する必要があります。第2引数IF()
の関数は、行2の代わりに、行1内のタイトルが始まるのリストは、あなたが含まれるように式を必要とする場合は、あなたのデータの最初の行の試合は、1例:を返すように調整しなければならないIF(...,ROW($A$2:$A$7)-1,...)
代わりにIF(...,ROW($A$1:$A$6),...)
。