Jestem programistą z wieloma językami, ale jakoś nigdy nie nauczyłem się makra Excel ani języka formuły. Jestem pewien, że musi to być prosty sposób, ale jestem zakłopotany.
Mam kolumnę nazw plików, które wyglądają tak:
/home/www/shoppermarketexpo/dot/uploads/10DOT_33A_1275_1308304857_1.jpg
/home/www/shoppermarketexpo/dot/uploads/10DOT_15G_1184_1.jpg
/home/www/shoppermarketexpo/dot/uploads/10DOT_5A_1450_1.jpg
/home/www/shoppermarketexpo/dot/uploads/10DOT_18A_1341_1308325044_2.jpg
Muszę tylko zwrócić nazwę pliku, podzieloną na kilka części na podstawie podkreślenia. W porządku, jeśli ma to wiele kroków - formuła 1 zwraca kolumnę z 10DOT_33A_1275_1308304857
, następnie formuła 2 używa tego wyniku, aby zwrócić drugą kolumnę za pomocą 10DOT_33A_1275
i tak dalej. Miałem nadzieję, że pojawi się funkcja podobna do eksplodowania PHP, w której możesz wziąć łańcuch i zwrócić tablicę na podstawie separatora (w tym przypadku podkreślenia). Zgaduję, że nie jest to możliwe w formule; Będę w porządku z VBA, chociaż jestem na Macu i nie wiem, czy jest dla mnie dostępny.
Wiem o MID, LEWEJ i PRAWEJ, ale wszystkie one zależą od tego, czy znasz liczbę znaków, które chcesz powrócić, a w tym przypadku nie. Różni się od rzędu do rzędu; jedynym kryterium, które działa, jest podział nazwy pliku na wiele kolumn w podkreśleniach.
czy to możliwe?
Odpowiedzi:
W menu Dane można użyć funkcji Tekst do kolumn programu Excel.
To zajmie kilka przebiegów, ale możesz to zrobić bez formuły lub vba.
Możesz określić własne ograniczniki. Więc możesz wybrać
.
aby oddzielić rozszerzenie/
rozdzielić strukturę katalogów. Następnie możesz wybrać_
aby podzielić nazwę pliku.N.b. Możesz ustawić różne kolumny na
Text
aby uniknąć traktowania ich przez Excela jako liczby lub ustawiania innych kolumnDo not import (skip)
więc są usuwane.źródło
A oto rozwiązanie oparte na VBA. Zauważ, że pętla przez takie komórki nie jest zbyt wydajna. Jeśli masz dużo wierszy (powiedzmy więcej niż kilka 10.000), są lepsze sposoby
Wybierz zakres, który chcesz przetworzyć i uruchom to
źródło
Oto rozwiązanie oparte na formule:
Zakładając, że dane znajdują się w kolumnie A, wiersz początkowy 2
i jest co najwyżej 5 sztuk do zwrotu (można je dostosować, aby poradzić sobie z większą ilością)
i że ciągi nie zawierają | lub @ (jeśli tak, użyj innych znaków)
Komórka B2, pobiera nazwę pliku
=RIGHT(A2,LEN(A2)-FIND("|",SUBSTITUTE(A2,"/","|",LEN(A2)-LEN(SUBSTITUTE(A2,"/","")))))
Komórka C2, usuwa rozszerzenie
=LEFT(B2,FIND(".",B2)-1)
Komórki D2: H2 jako formuła tablicowa, nawiasy kolejne terminy z | i @
=SUBSTITUTE(SUBSTITUTE("_"&C2&"_","_","|",{1,2,3,4,5}),"_","@",{1,2,3,4,5})
Komórka I2, a następnie skopiuj I2 do J2: L2: wynik
=IFERROR(MID(D2,FIND("|",D2)+1,FIND("@",D2)-FIND("|",D2)-1),"")
źródło
W VBA istnieje funkcja Split, która pomoże ci w planowaniu, ale nie ma formuły SPLIT.
Sugeruję jednak użycie formuły Excel. Kilka przypadków:
Jeśli ścieżka pliku jest taka sama dla każdego pliku, po prostu użyj PRAWO razem z LEN i FIND, tak jak poniżej:
= PRAWO (A1, LEN (A1) -FIND („przesyłanie /”, A1) -LEN („przesyłanie /”) + 1)
gdzie A1 jest komórką ze ścieżką do pliku.
Jeśli wszystkie pliki nie mają tej samej ścieżki, musisz przejść przez coś innego. Może wszystkie pliki to .jpg (?) Lub nie mają okresów z wyjątkiem przed rozszerzeniem pliku.
źródło
Ponieważ nie ma jeszcze wybranej odpowiedzi, dam ci kolejną opcję VBA, ale tym razem z funkcją split.
źródło