Czy istnieje skuteczny sposób na identyfikację ostatniego dopasowania znaku / ciągu w ciągu za pomocą funkcji podstawowych? Czyli nie ostatni znak / string z łańcucha, ale pozycja ostatniego wystąpienia o charakterze / String jest w ciąg. Search
i find
oba działają od lewej do prawej, więc nie mogę wymyślić, jak zastosować bez długiego algorytmu rekurencyjnego. I to rozwiązanie wydaje się przestarzała.
excel-formula
geotheory
źródło
źródło
search
ifind
zarówno w treści ciągu zapytania , „dopasowanie” jest terminem standardowym, plus połączony przykład.Odpowiedzi:
Wraz z nowszymi wersjami programu Excel pojawiają się nowe funkcje, a tym samym nowe metody. Chociaż można go powielać w starszych wersjach (ale nie widziałem go wcześniej), gdy używa się programu Excel O365, można użyć:
Można to również wykorzystać do pobrania ostatniej pozycji (nakładających się) podciągów:
Chociaż pozwala to nam nie używać już dowolnych znaków zastępczych i pozwala na nakładanie się wzorców, „minusem” jest użycie tablicy.
Uwaga: Możesz wymusić to samo zachowanie w starszych wersjach programu Excel za pomocą jednego z nich
Wprowadzone przez CtrlShiftEnterlub za pomocą wstawki,
INDEX
aby pozbyć się niejawnego skrzyżowania:źródło
Myślę, że rozumiem o co ci chodzi. Powiedzmy na przykład, że chcesz najbardziej w prawo \ w następującym ciągu (który jest przechowywany w komórce A1):
Dysk: \ Folder \ Podfolder \ Nazwa pliku. Tekst
Aby uzyskać pozycję ostatniego \, użyłbyś tej formuły:
To mówi nam, że najbardziej na prawo \ jest znak 24. Czyni to, szukając „@” i zastępując ostatnie „\” znakiem „@”. Określa ostatni za pomocą
W tym scenariuszu podciąg to po prostu „\”, który ma długość 1, więc możesz zrezygnować z podziału na końcu i po prostu użyć:
Teraz możemy go użyć, aby uzyskać ścieżkę folderu:
Oto ścieżka do folderu bez końcowego \
Aby uzyskać tylko nazwę pliku:
Jednak tutaj jest alternatywna wersja przenoszenia wszystkiego na prawo od ostatniej instancji określonej postaci. Korzystając z tego samego przykładu, zwróciłoby to również nazwę pliku:
źródło
SUBSTITUTE
wszystkie (3) wystąpienia\
bez niczego (skróć długość łańcucha o 3) -> że\
(3.) jest ostatnim; zastąp to czymś wyjątkowym iFIND
pozycją tej wyjątkowej postaci ... niesamowite ... dzięki!=ISNUMBER(SEARCH("@",A1))
, zgodnie z propozycją @ gwin003 .99
? Czy po prostu zakładasz, że długość tych różnych łańcuchów jest mniejsza niż 99? Zobacz tę odpowiedź i tę odpowiedź, które nie zakładają takiego założenia.Co powiesz na utworzenie niestandardowej funkcji i użycie jej w formule? VBA ma wbudowaną funkcję,
InStrRev
, która robi dokładnie to, czego szukasz.Umieść to w nowym module:
A twoja funkcja będzie wyglądać tak (zakładając, że oryginalny ciąg znajduje się w B1):
źródło
tigeravatar i Jean-François Corbett zasugerowali użycie tej formuły do wygenerowania ciągu znaków po ostatnim wystąpieniu znaku „\”
Jeśli znakiem używanym jako separator jest spacja „”, należy zmienić formułę na:
Nie trzeba wspominać, że znak „{” można zastąpić dowolnym znakiem, który „normalnie” nie występuje w przetwarzanym tekście.
źródło
Właśnie wymyśliłem to rozwiązanie, nie wymaga VBA;
Znajdź ostatnie wystąpienie „_” w moim przykładzie;
Wyjaśnione na lewą stronę;
Mam nadzieję, że to było pomocne.
źródło
Możesz użyć tej funkcji, którą utworzyłem, aby znaleźć ostatnią instancję ciągu w ciągu.
Upewnij się, że przyjęta formuła programu Excel działa, ale jest zbyt trudna do odczytania i użycia. W pewnym momencie musisz podzielić się na mniejsze części, aby można było je utrzymać. Moja funkcja poniżej jest czytelna, ale to nie ma znaczenia, ponieważ wywołujesz ją w formule przy użyciu nazwanych parametrów. To sprawia, że korzystanie z niego jest proste.
Używam tego w ten sposób:
źródło
Biorąc pod uwagę część komentarza dokonanego przez @SSilk, moim ostatecznym celem było doprowadzenie wszystkiego do prawej strony tego ostatniego wystąpienia. Alternatywnym podejściem z bardzo prostą formułą jest skopiowanie kolumny (powiedzmy
A
) ciągów znaków i skopiowanie (powiedzmy) Kolumna B) zastosuj Znajdź i zamień. Na przykład biorąc przykład:Drive:\Folder\SubFolder\Filename.ext
Zwraca to, co pozostaje (tutaj
Filename.ext
) po ostatnim wystąpieniu dowolnej postaci (tutaj\
), co i tak czasami jest celem i ułatwia znalezienie pozycji ostatniej takiej postaci za pomocą krótkiej formuły, takiej jak:źródło
Jestem trochę spóźniony na imprezę, ale może to może pomóc. Link w pytaniu miał podobną formułę, ale moja używa instrukcji IF (), aby pozbyć się błędów.
Jeśli nie boisz się klawiszy Ctrl + Shift + Enter, możesz całkiem dobrze poradzić sobie z formułą tablicową.
Ciąg (w komórce A1): „one.two.three.four”
Formuła:
Wynik: 14
Pierwszy,
zwraca tablicę liczb całkowitych od 1 do 99:
{1,2,3,4,...,98,99}
.Kolejny,
zwraca tablicę ciągów o długości 1 znalezionych w ciągu docelowym, a następnie zwraca puste ciągi po osiągnięciu długości ciągu docelowego:
{"o","n","e",".",..."u","r","","",""...}
Kolejny,
porównuje każdy element w tablicy z ciągiem „.” i zwraca indeks znaku w ciągu lub FAŁSZ:
{FALSE,FALSE,FALSE,4,FALSE,FALSE,FALSE,8,FALSE,FALSE,FALSE,FALSE,FALSE,14,FALSE,FALSE.....}
Ostatni, ubiegły, zeszły,
zwraca maksymalną wartość tablicy:
14
Zaletą tej formuły jest to, że jest krótka, stosunkowo łatwa do zrozumienia i nie wymaga żadnych unikalnych znaków.
Wady to wymagane użycie Ctrl + Shift + Enter i ograniczenie długości łańcucha. Można to obejść za pomocą wariantu pokazanego poniżej, ale ta odmiana korzysta z funkcji OFFSET (), która jest funkcją zmienną (czytaj: wolno).
Nie jestem pewien, jaka jest szybkość tej formuły w porównaniu z innymi.
Wariacje:
źródło
W nowszych wersjach programu Excel (2013 i nowsze) wypełnienie flash może być prostym i szybkim rozwiązaniem patrz: Korzystanie z Flash Fill w programie Excel .
źródło
Prostym sposobem na to w VBA jest:
źródło
Bardzo późno na imprezę, ale prostym rozwiązaniem jest użycie VBA do stworzenia niestandardowej funkcji.
Dodaj funkcję do VBA w skoroszycie, arkuszu lub module VBA
Następnie formuła komórkowa
w komórce, a ciąg do przeszukania w komórce B1 zapełni komórkę tekstem kończącym ostatnie „/” z komórki B1. Bez ograniczenia długości, bez niejasnych wzorów. Jedynym minusem jest to, że potrzebuję skoroszytu z obsługą makr.
W ten sposób można wywołać dowolną funkcję VBA użytkownika, aby zwrócić wartość do formuły komórkowej, w tym jako parametr do wbudowanej funkcji Excel.
Jeśli zamierzasz intensywnie korzystać z tej funkcji, powinieneś sprawdzić wielkość liter, gdy znak nie znajduje się w ciągu, a następnie ciąg jest pusty itp.
źródło
Komórka
A1 = find/the/position/of/the last slash
prosty sposób to odwrócić tekst, a następnie normalnie znaleźć pierwszy ukośnik. Teraz możesz uzyskać długość pełnego tekstu minus ten numer.
Tak jak:
=LEN(A1)-FIND("/",REVERSETEXT(A1),1)+1
Zwraca 21, pozycję ostatniego /
źródło
REVERSETEXT
nie jest standardową formułą Excela