パート 1 - これは、ドロップダウンで一意のリストを作成する方法を示しています。
これはスクリーンショットですが、現在はデータの上に行が必要です (?)。これにより、Data Validation ドロップダウンにアイテムの一意のリストが表示されます。(以下のすべての数式は、事前にいくつかの範囲に名前を付けることで作成しやすくなります。)
E2 の配列数式はコメントに示されています。を使用Ctrl-Shift-Enter
して配列数式を入力し、これを必要なだけ下にドラッグします。#N/A が下部に表示され始めます。
まあ、説明するのは難しいです:)。COUNTIF は基本的に 1 と 0 のシーケンスを生成して、列 B の所在を示します。列 E の前の(上記の) 値は列 B に配置されます。列 B には存在しない空白 - これにより、最初の項目であるブドウが取得されます。
次に、MATCH は、この一連の 0 と 1 の最初の 0 を見つけます。これは、(列 B の) 値が列 E にまだ現れていないことを示します。
次に、INDEX はこの一致した値を使用して、列 B から新しい一意のアイテムを取得します。
次に、列 E のすべての値を取得する定義済みの名前が ([数式] タブで) 作成されますが、最初に出現する「#」までしか取得されません。これは、リストに一意の値がこれ以上ないことを示します。
この定義された名前は、データ検証で使用されます。
パート 2 - 答え (VBA を使用)
C11:C18 のセルをクリックすると F1 の値が変更され、その下に一意のリストが生成され、C11:C18 のデータ検証リストが入力されるようにするには、次の VBA コードが必要です。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C11:C18")) Is Nothing Then
Sheets("Sheet1").Range("F1").Value = ActiveCell.Offset(0, -1).Value
End If
End Sub
次のスクリーンショットに示すように、数式と定義名が必要です。F2 の式は F3 とは異なるため、F3 をコピーします。
F3 の数式の数字 10 は、(行の) 数が多いだけです。
- 列 E は固有項目です。
- 列 D は、対応するカテゴリです。
- 列 F は、セル F1 のカテゴリの一意のアイテムです (列 E から抽出されます)。
パート 3 - VBA なし
=INDIRECT(ADDRESS(CELL("row"),CELL("col")-1))
セル F1の数式を使用します。C11:C18 のセルをクリックすると、 F9キーを押してワークシートを再計算する必要があり、ドロップダウン リストが更新されます。
CELL("row")
との値を更新するには、再計算が必要CELL("col")
です。
パート 4 - F9 を押さずに
F9 を押さなくても実行できますが、すべてのカテゴリを異なる列 (下のスクリーンショットの G1 と右側) に分散することを意味します。=INDEX($A$2:$A$8,MATCH(0,COUNTIF($F$1:F1,$A$2:$A$8),0))
これは、G1の配列数式でも実現できます。
#N/As は、G2 以降の数式で IFERROR() を戦略的に使用してドロップダウン リストから削除し、"" に置き換えることもできます。または、次を使用します。
=OFFSET(Sheet1!$G$1,1,MATCH(Sheet1!B11,Sheet1!$G$1:$J$1,0)-1,MATCH("#",OFFSET(Sheet1!$G$1,1,MATCH(Sheet1!B11,Sheet1!$G$1:$J$1,0)-1,COUNTA(Sheet1!$G:$G)-1,1),-1),1)
定義名Items
は #N/As を削除するだけでなく、IFERROR() がドロップダウン リストに残す冗長な ("") 値も削除するためです。(この定義名を作成するときは、カーソルを C11 に配置する必要があります。)
長々と申し訳ありませんが、誰かの参考になれば幸いです。