(実際には答えではありません。質問が何であるかを理解しようとしているだけです)
シート 1 には、多数のアイテムを含むドロップダウン ボックスがあり、選択されたアイテムは、シート 2 のテーブルを参照する vlookup() で使用されます。
シート 2 には 2(+) 列があり、1 つは vlookup に使用されるインデックスで、もう 1 つは区切りリストを含みます。
シート 3 には 1(+) 列があり、各行には、シート 2 の区切りリストのいずれかの項目に対応する値があります。
シート 1 のドロップダウン ボックスでアイテムが選択されている場合、シート 2 の対応するリストを (vlookup を使用して) 検索し、そのリスト内のアイテムがシート 3 に存在するかどうかを確認します。
これはあなたがやろうとしていることですか?はいの場合、この検索の結果は何ですか?
- ブール値: True - いくつかの一致が見つかりました!、False - 一致なし
- 番号: この数の結果が見つかりました
いいえ?:(
アップデート
ワークシート関数だけでそれを行うのはかなり難しいでしょう!
VBA の方がはるかに適しています。(少なくとも最後のステップ)
次のコードを新しいモジュール (ワークシートまたはワークブック モジュールではない) に追加すると、ワークシートで UDF として使用できるようになります。
この関数は文字列 (区切りリスト) を取り、関数内で展開されるため、心配する必要はありません。
私はそれをテストしていませんが、理論的にはリストを渡すことができるはずです。次に、関数はシート 3 をチェックし、アイテムが見つかったかどうかに応じて true/false を返します。
あなたが答えを見つけたことは知っていますが、ここに私の関数の動作する少し高速なバージョンがあります。
Public Function ValidateList(ByVal Target As Range) As Boolean
Dim Sheet As Worksheet: Set Sheet = ThisWorkbook.Worksheets("Sheet3") ' Check Sheet3 is the correct sheet
Dim List As Variant: List = Sheet.UsedRange.Columns("A").Value2 ' Set Column(A) to correct column
Dim Items() As String: Items = Split(Target.Value2, ",")
Dim Item As Long
Dim Key As String
Dim Result As Boolean: Result = False
Dim Search As Object: Set Search = CreateObject("Scripting.Dictionary")
For Item = LBound(Items) To UBound(Items)
Search.Add Trim(Items(Item)), False
Next Item
If Search.Count > 0 Then
' Target List has 1+ Items
For Item = LBound(List, 1) To UBound(List, 1)
Key = Trim(List(Item, 1))
If Search.Exists(Key) = True Then
Search.Remove Key
End If
If Search.Count = 0 Then
Result = True
Exit For
End If
Next Item
Else
' Target List is Empty
' Optionally set result to True here if empty list should return True
' Defaults to False
End If
ValidateList = Result
End Function