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
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
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
Jeśli mógłbyś pokazać, jak to zrobić w makrze, które byłoby świetne. –
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
Idealny! Nie wiem, dlaczego wszyscy inni sugerują regularne funkcje programu excel, gdy sugerowane jest wyrażenie regex – foochow
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.
+1 RegExp to przesada za to, co można osiągnąć bez VBA – brettdj
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")
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.
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
Chcesz, aby wartość była jedną z COM1, COM2, COM3, COM4 lub int 1-65535 –