Barry یک کاربرگ دارد که در آن یک ستون حاوی مسیرهای فایل زیادی است. او راهی می خواهد که فقط نام فایل (بخش سمت راست بک اسلش نهایی) را از هر مسیر استخراج کند. او فکر می کند که آیا راه سریعی برای انجام این کار بدون استفاده از ویژگی Text to Columns وجود دارد یا خیر.
بسته به اینکه بخواهید از ماکرو استفاده کنید یا نه، چندین راه مختلف وجود دارد.
اگر طول نام فایل های شما یکسان است، می توانید به سادگی از تابع RIGHT برای بیرون کشیدن آخرین کاراکترها استفاده کنید. (این فرمول فرض می کند که مسیر کامل و نام فایل در سلول A1 است.)
=RIGHT(A1,11)
فرض بر این است که نام فایل همیشه 11 کاراکتر است، مانند "text001.txt". اگر طول نام فایل در هر نمونه متفاوت باشد، این روش کار نخواهد کرد. در عوض، می توانید این فرمول را امتحان کنید:
=MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"",CHAR(1),
LEN(A1)-LEN(SUBSTITUTE(A1,"",""))))+1,LEN(A1))
توجه داشته باشید که فرمول دو بار از تابع SUBSTITUTE استفاده می کند. در هر مورد، بک اسلش () را با چیز دیگری جایگزین می کند. بار اول همه آنها را با مقدار ASCII 1 جایگزین می کند و بار دوم آنها را با هیچ (رشته خالی) جایگزین می کند تا بتواند تعیین کند که چند بک اسلش در مسیر اصلی وجود دارد. تابع MID برای تعیین مکان آخرین بک اسلش در مسیر (با کمک توابع FIND و SUBSTITUTE) و برگرداندن همه چیز بعد از آن نقطه استفاده می شود.
اگر مطمئن هستید که نام فایل هرگز بیش از 99 کاراکتر نخواهد بود، می توانید از فرمول کوتاه تری استفاده کنید:
=TRIM(RIGHT(SUBSTITUTE(A2,"",REPT(" ",100)),99))
این فرمول همه بک اسلش ها را با 100 فاصله جایگزین می کند، 99 کاراکتر سمت راست را از رشته به دست می آورد (این نام فایل با تعدادی فاصله در جلوی آن است) و سپس تمام فاصله ها را حذف می کند.
اگر می خواهید از یک ماکرو استفاده کنید، می توانید یک تابع بسیار کوتاه ایجاد کنید که یک رشته (مسیر کامل، در این مورد) را بر اساس جداکننده ها جدا می کند:
Function GetFileName(File_Path) As String
Dim Parts
Parts = Split(File_Path, Application.PathSeparator)
GetFileName = Parts(UBound(Parts))
End Function
بهت گفتم کوتاهه! تابعی که کار سنگین را انجام می دهد تابع Split است که یک رشته را بر اساس جداکننده ای که شما مشخص کرده اید جدا می کند و قطعات را در یک آرایه قرار می دهد. در این مثال، تابع Split از هر جداکننده مسیری که برای سیستمی که اکسل روی آن در حال اجرا است مناسب است، به عنوان جداکننده استفاده می کند.
آخرین عنصر آرایه به دست آمده (تعیین شده با تابع UBound) شامل بخشی از مسیر اصلی است که در سمت راست جداکننده آخرین مسیر است - نام فایل.
شما می توانید یک تابع حتی کوتاه تر برای انجام کار ایجاد کنید:
Function GetFileName(File_Path) As String
GetFileName=Mid(File_Path,InStrRev(File_Path,"")+1
End Function
برای استفاده از هر دو تابع، فرمولی مانند زیر را در یک سلول قرار دهید:
=GetFileName(A1)