Yanıtlar:
=REPLACE(RIGHT(A1,5),1,SEARCH(".",RIGHT(A1,5)),"")
Dosya adında birden fazla noktanız varsa bu formül yararlı olacaktır
Alındığı başka bir yanıt (noktalar ve boşluklar aramaya değişti):
=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1,".","|",LEN(A1)-LEN(SUBSTITUTE(A1,".","")))))
Cyril yanıtı, yalnızca uzantı 3 veya 4 karakter olduğunda .
ve dosya adında (nokta) olduğunda user273281 yanıtı çalışmadığında çalışır .
Dolayısıyla bunu başarmanın yeni bir yolunu buldum,
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), ".", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))
Not: user273281 kodu, dosya adının bulunduğu durumda çalışmadı 1. Macro based file.zip
. Geri döner. Macro based file.zip
Güzel biçimlendirilmiş uzantılara sahip olduğunuzu varsayarsak, bunu hızlı bir şekilde yapabilirsiniz =RIGHT(A1,3)
. Daha sağlam bir çözüm, en sağdaki dizini bulur .
ve ardından kalan karakterleri çıkarır.
Buna rastladım, gördüğüm en basit çözüm ...
=SUBSTITUTE(RIGHT(SUBSTITUTE(A5,".",REPT(".",50)),50),".","")
Çalışır, çünkü son noktadan sonraki tüm karakterleri diğer karakterlerden 50 noktaya kadar veya seçtiğiniz herhangi bir sayıdan ayırır. Daha sonra, uzatma karakterleriniz ve bir dizi nokta dışında hiçbir şey seçmediğinizi bilerek en sağdaki 50 karakteri seçebilirsiniz. Periyotları değiştirin ve gitmeye hazırsınız.
Alternatif: XML Ayrıştırma
Genelde dize ayrıştırma için kullandığım düzgün bir hile FilterXML()
işlevden yararlanmaktır (Excel 2013 ve üstü). Temel strateji, Substitute()
dizenizi xml dizesindeki öğeler arasında ayrıştırılacak şekilde biçimlendirmek ve daha sonra ayrıştırılmış öğelerinizde kolayca gezinmek için xpath sözdizimini kullanabilirsiniz . Bu stratejiyi kullanarak, uzantı almak şu şekilde görünecektir ...
=FILTERXML("<A><p>" & SUBSTITUTE(A1,".","</p><p>.")&"</p></A>","//p[last()]")
Eğer xml'e aşina değilseniz, bu göz korkutucu görünebilir, ancak neler olduğunu kavrayabilirseniz, len (), substitute () kullanarak alternatif yaklaşımlardan daha temiz, daha esnek ve hatırlanması daha kolay olduğunu düşünüyorum Daha güzel olmasının bir nedeni, sadece bir hücre referansı olmasıdır.
Yasadışı karakterler
Yollarda izin verilen ancak xml'de izin verilmeyen iki karakter vardır: &
ve'
Bu denklemler yoksa yukarıdaki denklem işe yarayacaktır, aksi takdirde böyle bir şeyle ele alınması gerekecektir ...
=FILTERXML("<A><p>" & SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(J8,"'",""),"&",""),".","</p><p>.")&"</p></A>","//p[last()]")
Misal
Diyelim ki böyle kötü bir dosya yolumuz var:
C: \ Klasör1 \ Klasör2 \ (çirkin karakterler! @ # $% ^ () _ + = {} ;;, `) \ two.dots.LongExt
1.) Bölüm Substitution()
böyle bir xml dizesine dönüştürecektir ...
<A>
<p>
C:\Folder1\Folder2\(ugly characters !@#$%^()_+={};;,`)\two
</p>
<p>
.dots
</p>
<p>
.txt
</p>
</A>
2.) Bu şekilde biçimlendirildikten sonra p
, xpath sözdizimini kullanarak son öğeyi seçmek önemsizdir //p[last()]
.
REGEXEXTRACT(A1, "\.([^.]*)$")