/ / Filtry DataValidation Table - excel, excel-vba, excel-2010, validation, vba

Filtry DataValidation Table - excel, excel-vba, excel-2010, validation, vba

Mam sytuację, w której zdefiniowano tabelęzmiany struktury na podstawie typu kontrolnego (dla mojej instancji jest to marka produktu). W tej tabeli znajdują się dwie kolumny / pola, które będą potrzebne do wypełnienia dwóch komórek sprawdzania danych w tym samym arkuszu. Komórki te znajdują się powyżej tabeli, a "idealnie" będą używane do filtrowania informacji tabeli w oparciu o dane zapełniające komórki sprawdzania danych.

Logika metody listy walidacyjnej danych:

  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: Arkusz roboczy, w którym znajduje się @srcrng
  • srcrng: Range, aby wyodrębnić wartości Unique z
  • Destrng: Zakres, do którego zostanie dołączona weryfikacja danych. Będzie to kontrolowane tak, aby było tylko pojedynczą komórką i generowało błąd, jeśli ma więcej niż 1 wiersz i 1 kolumnę.

Metoda Above jest enkapsulowana w metodzie, do której przekazywane są dwa parametry Table1[Column1] i DataValidationCell1 w VBA.

Żeby odeprzeć jakiekolwiek pytania, oto metoda UniqueValues logika:

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

Pytania:

  1. Jak mogę uwzględnić zmiany w zakresie sprawdzania poprawności danych?
  2. Czy mogę użyć sprawdzania poprawności danych do filtrowania tabeli?
  3. Ponieważ tabela przestawna nie jest prawdopodobną opcją, ze względu na charakter informacji, a filtrowanie danych-walidacji nie jest możliwe funkcjonalnie, jaką mam alternatywę?

W # 3, nie chciałbym umieszczać listy rozwijanej, jeśli w ogóle jest to możliwe.

Odpowiedzi:

1 dla odpowiedzi № 1

Sprawdzanie danych to sposób na ograniczenie rodzaju danych wprowadzanych do komórki (lub zakresu komórek) http://office.microsoft.com/en-us/excel-help/apply-data-validation-to-cells-HP010072600.aspx

Twoje pytanie nie dotyczy danychuprawomocnienie. Wydaje się, że twoje pytanie dotyczy filtrowania tabeli na podstawie wartości wprowadzonych w dwóch komórkach na górze tej tabeli (które mają zastosowanie do nich sprawdzanie poprawności danych). Mam rację? Jeśli tak, będziesz musiał uruchomić makro za każdym razem, gdy zmienione zostaną komórki sprawdzania poprawności danych. Możesz zrobić to automatycznie z Sub Worksheet_Change (ByVal Target As Range) lub możesz mieć przycisk "update filters", który będzie nieco mniej "cool". Tak czy inaczej, wystarczy połączyć w makrze z tymi dwoma komórkami i kazać im zaktualizować filtr w tabeli na podstawie wartości tych dwóch komórek.

Oto przykład makra, który mógłby zrobić coś, co opisałem:

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

To jest z: http://www.ozgrid.com/forum/showthread.php?t=85547

Mam nadzieję że to pomoże. Powodzenia.