0

コントロールの種類 (私の場合は製品ブランド) に基づいて定義済みのテーブル構造が変化する状況があります。そのテーブルには、同じワークシートに 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

質問:

  1. データ検証の変更をどのように説明しますか?
  2. データ検証を使用してテーブルをフィルター処理できますか?
  3. 情報の性質上、ピボットテーブルは妥当なオプションではないため、データ検証フィルタリングが機能的に不可能な場合、どのような代替手段がありますか?

#3 では、可能であればドロップダウン リストを配置したくありません。

4

1 に答える 1

1

データ検証は、セル(またはセルの範囲)に入力できるデータの種類を制限する方法です。http://office.microsoft.com/en-us/excel-help/apply-data-validation-to -セル-HP010072600.aspx

したがって、あなたの質問はデータ検証に固有のものではありません。あなたの質問は、テーブルの上部にある2つのセルに入力された値に基づいてテーブルをフィルタリングすることに関するもののようです(データ検証が適用されています)。私は正しいですか?その場合:これらのデータ検証セルが変更されるたびにマクロを実行する必要があります。Sub Worksheet_Change(ByVal Target As Range)を使用してこれを自動化するか、「フィルターの更新」ボタンを使用して、「クール」を少し下げることができます。いずれの場合も、マクロでこれら2つのセルにリンクし、これら2つのセルの値に基づいてテーブルのフィルターを更新する必要があります。

これは、私が説明したようなことを行うマクロの例です。

Sub Worksheet_Change(ByVal Target As Range) 

    ActiveSheet.AutoFilterMode = False 
    Range("A3:H20").AutoFilter 
    Range("A3:H20").AutoFilter Field:=2, Criteria1:=Range("A1").Text 

End Sub 

これは、http ://www.ozgrid.com/forum/showthread.php?t=85547からのものです。

お役に立てれば。幸運を。

于 2012-10-08T16:21:43.327 に答える