コントロールの種類 (私の場合は製品ブランド) に基づいて定義済みのテーブル構造が変化する状況があります。そのテーブルには、同じワークシートに 2 つのデータ検証セルを設定するために使用する必要がある 2 つの列/フィールドがあります。これらのセルはテーブルの上にあり、「理想的には」データ検証セルに入力されたデータに基づいてテーブルの情報をフィルタリングするために使用されます。
データ検証リスト メソッド ロジック:
Dim str As String
str = Join(UniqueValues(ws,srcrng), ",")
Dim val As Excel.Validation
Set val = range(destrng).Validation
val.Delete
val.Add xlValidateList, xlValidAlertStop, xlBetween, str
- ws : @srcrng が配置されているワークシート
- srcrng : 一意の値を抽出する範囲
- destrng : Data-Validation がアタッチされる範囲。これは単一のセルのみに制御され、複数の行と列がある場合はエラーになります。
上記のメソッドは、2 つのパラメーターが渡されるメソッドと VBA にカプセル化されていTable1[Column1]
ますDataValidationCell1
。
質問を避けるために、メソッドUniqueValues
ロジックを次に示します。
Function UniqueValues(ws As Worksheet, col As String) As Variant
Dim rng As range: Set rng = ws.range(col)
Dim dict As New Scripting.Dictionary
If Not (rng Is Nothing) Then
Dim cell As range, val As String
For Each cell In rng.Cells
val = CStr(cell.Value)
If InStr(1, val, ",") Then
val = Replace(val, ",", Chr(130)) <-- Handles the fact i have commas in the field
End If
If Not dict.Exists(val) Then
dict.Add val, val
End If
Next cell
End If
'Return value as Variant Array
UniqueValues = dict.Items
End Function
質問:
- データ検証の変更をどのように説明しますか?
- データ検証を使用してテーブルをフィルター処理できますか?
- 情報の性質上、ピボットテーブルは妥当なオプションではないため、データ検証フィルタリングが機能的に不可能な場合、どのような代替手段がありますか?
#3 では、可能であればドロップダウン リストを配置したくありません。