2013-01-16 18 views
5

Mam kolumnę w arkuszu kalkulacyjnym Excel 2007, w którym chcę ograniczyć dane do wartości "COM [1-4] lub 1-65535". Jak mogę zmusić program Excel do egzekwowania tego zestawu wartości?Walidacja danych programu Excel - wyrażeń regularnych?

TY, Fred

+0

Masz na myśli, w jaki sposób uzyskać kolejną kolumnę, która pokazuje tylko te wartości, które spełniają twoje kryteria? Szukasz dopasowania zakresu lub dokładnego dopasowania? Czy możesz podać przykłady wartości, które chcesz dopasować, i niektóre wartości, które są blisko, ale nie powinny się zgadzać? – jimbojw

+0

Chcesz, aby wartość była jedną z COM1, COM2, COM3, COM4 lub int 1-65535 –

Odpowiedz

6

Trzeba będzie utworzyć niestandardową funkcję VBA (lub makro), który obsługuje wyrażeń regularnych. Osobiście to zrobiłem, więc wiem, że jest to możliwe :-)

Jeśli jest to jednorazowy problem, można go rozwiązać, używając złożonego FIND()/MID()/SUBSTITUTE() itp. (to jest moja codzienna praca, faktycznie), ale nie poleciłbym tego, chyba że chcesz gapić się na możliwą 5-wierszową komórkę pełną funkcji Excela.

Edytuj: Będę aktualizować, jeśli masz lub potrzebujesz więcej informacji do zaoferowania.

Edit: Oto jak można użyć wyrażeń regularnych jako funkcja w Excelu:

Function refind (strValue As String, strPattern As String, opcjonalne blnCase As Boolean) As Boolean

Dim objRegEx As Object 
Dim blnValue As Boolean 

' Create regular expression. 
Set objRegEx = CreateObject("VBScript.RegExp") 
objRegEx.Pattern = strPattern 
objRegEx.IgnoreCase = blnCase 

' Do the search test. 
blnValue = objRegEx.Test(strValue) 

REFIND = blnValue End Function 

End Function

+0

Jeśli mógłbyś pokazać, jak to zrobić w makrze, które byłoby świetne. –

+0

Powinienem być bardziej konkretny. Stworzyłem funkcje. Nie obchodzi mnie to zbytnio dla Macrosa (mają swoje miejsce), ale nadal będziesz musiał używać tego samego niestandardowego kodu VBA. Załączę powyższy kod. – Jonathan

+0

Idealny! Nie wiem, dlaczego wszyscy inni sugerują regularne funkcje programu excel, gdy sugerowane jest wyrażenie regex – foochow

5

Nie bardzo elastyczny, ale można użyć niestandardowego Data Validation, z tego wzoru:

=OR(AND(LEN(A2)=4,LEFT(A2,3)="COM",MID(A2,4,1)>="1",MID(A2,4,1)<="4"),OR(AND(A2>=1,A2<=65535))) 

myślę, że to zawęża ją do tego, co już podano w komentarzu.

+0

+1 RegExp to przesada za to, co można osiągnąć bez VBA – brettdj

3

Użyj poniższej wstążki >> Dane >> Sprawdzanie danych. Następnie pozostawić = niestandardowe i dodaj poniżej wzoru:

=OR(AND(E5 >= 1, E5 <= 65535), E5 = "COM1", E5 = "COM2", E5 = "COM3", E5 = "COM4") 
0

Dla tego konkretnego pytania, używając standardowego sprawdzania poprawności danych będzie pracował bez VBA, Regex lub wzorach potrzebne:

Allow: lista Źródło: "COM1, COM2, COM3, COM4,1-65535"

Zapewnia to również listę rozwijaną w komórce, aby pomóc użytkownikowi.

Powiązane problemy