Mamy około 3500 dokumentów, których nazwy plików należy ręcznie wyczyścić, aby usunąć znaki specjalne, takie jak nawiasy kwadratowe, średniki, średniki, przecinki itp.
Mam plik tekstowy, który zrzuciłem do programu Excel i próbuję utworzyć kolumnę, która oflaguje nazwę pliku do modyfikacji, jeśli zawiera znaki specjalne. Formuła pseudokodu będzie
=IF (cellname contains [^a-zA-z_-0-9], then "1", else "0")
aby oflagować wiersz, jeśli zawiera on znaki inne niż AZ, 0–9, - lub _, niezależnie od wielkości liter.
Czy ktoś wie o czymś, co może dla mnie zadziałać? Waham się przed kodem i masowym if
stwierdzeniem, jeśli jest coś szybkiego i łatwego.
Odpowiedzi:
Brak kodu? Ale jest tak krótki, łatwy i piękny i ... :(
Twój wzór RegEx
[^A-Za-z0-9_-]
służy do usuwania wszystkich znaków specjalnych we wszystkich komórkach.Edytować
To jest tak blisko, jak tylko mogę dostać się do twojego pierwotnego pytania.
Drugi kod to funkcja zdefiniowana przez użytkownika
=RegExCheck(A1,"[^A-Za-z0-9_-]")
z 2 argumentami. Pierwszy to komórka do sprawdzenia. Drugi to wzorzec RegEx do sprawdzenia. Jeśli wzór pasuje do dowolnego znaku w komórce, zwróci 1 w przeciwnym razie 0.Możesz użyć go jak każdej innej normalnej formuły Excela, jeśli najpierw otworzysz edytor VBA za pomocą ALT+ F11, wstawisz nowy moduł (!) I wklej poniższy kod.
Dla nowych użytkowników RegEx wyjaśnię Twój wzór:
[^A-Za-z0-9_-]
źródło
=RegExReplace(cell)
nie została rozpoznana ... i jestem trochę zardzewiały w tworzeniu nowych funkcji.Używając czegoś podobnego do kodu nixda, tutaj jest funkcja zdefiniowana przez użytkownika, która zwróci 1, jeśli komórka ma znaki specjalne.
Funkcje zdefiniowane przez użytkownika (UDF) są bardzo łatwe w instalacji i obsłudze:
Jeśli zapiszesz skoroszyt, UDF zostanie z nim zapisany. Jeśli używasz wersji programu Excel później niż 2003, musisz zapisać plik jako .xlsm zamiast .xlsx
Aby usunąć UDF:
Aby użyć UDF z Excela:
= IsSpecial (A1)
Aby dowiedzieć się więcej o makrach, zobacz:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
i
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
i
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
dla szczegółów na temat UDF
Makra muszą być włączone, aby to działało !
źródło
If sCh Like "[0-9a-zA-Z ]" Or sCh = "_" Then
makro zakładało, że spacje są poprawnymi znakami?Oto rozwiązanie formatowania warunkowego, które oznaczy rekordy znakami specjalnymi.
Po prostu zastosuj nową regułę formatowania warunkowego do swoich danych, która używa (wyjątkowo długiej) formuły poniżej, gdzie
A1
jest pierwszy rekord w kolumnie nazw plików:Ta formuła sprawdza każdy znak w nazwie pliku i określa, czy jego kod ASCII jest poza dopuszczalnymi wartościami znaków. Niestety, dopuszczalne kody znaków nie są ciągłe, dlatego formuła musi używać sum
SUMPRODUCT
s. Formuła zwraca liczbę złych znaków. Wszelkie komórki, które zwracają wartość większą niż 0, są oflagowane.Przykład:
źródło
Użyłem innego podejścia do znalezienia znaków specjalnych. Utworzyłem nowe kolumny dla każdego z dozwolonych znaków, a następnie użyłem podobnej formuły, aby policzyć, ile razy dozwolony znak był w każdym wierszu (Z2):
Następnie zsumowałem liczbę dozwolonych znaków w każdym rzędzie, a następnie porównałem ją z całkowitą długością wpisu w wierszu.
Na koniec posortowałem ostatnią kolumnę (BF2), aby znaleźć wartości ujemne, które doprowadziły mnie do kolumn, które wymagały korekty.
źródło