قبلا در این مطلب نحوه تجزیه متن در اکسل بصورت عمومی اشاره شده است. برای یک حالت خاص که در یک سلول ترکیبی از متن فارسی و انگلیسی داشته باشیم و بخواهیم آنها را از هم جدا کنیم همیشه نمیتوان از روشهای گفته شده استفاده کرد.
- حالت ۱)
توضیحات را با یک مثال شروع میکنم
در ستون A دادهایی داریم که هم متن فارسی و هم متن لاتین میباشد و هیچگونه نظمی خاصی ندارد که بتوان آنها را با mid جدا کرد اگر ممکن است راهنمایی کنید؟
Yield Tax مالیات بازده
Yield Variance اختلاف بازده- تغییر پذیری بازده
Yo -Yo-Stock سهام متزلزل- سهام بیثبات
Zero Base Budgeting بودجه بندی بر مبنای صفر – روش بودجه ریزی از صفر
Zero Defect بدون نقص
Zip Code کد پستی
Zone ناحیه
Zone Free منطقه آزاد
Zone Freight Rate نرخ کرایه منطقهای
Zone of Acceptance حیطه پذیرش
Zone Pricing قیمت بندی ناحیهای
Zoning منطقه بندی- ناحیه بندی
در مثال فوق اگر دقت کنید در هر سلول بین متون فارسی و لاتین دقیقا ۳ فاصله وجود دارد و همچنین در تمام موارد در سمت راست متن لاتین و در سمت چپ متن فارسی قرار دارد یعنی بصورت ترکیبی (مثلا aبcد) نیامده است.
حالت ۲)
در حالتی مثل شکل زیر که متون بصورت ترکیبی میباشد و فاصله بین متون انگلیسی و فارسی در سلولها متفاوت است، دیگر نمیتوان از راه حل حالت ۱ (بالا) استفاده کرد. برای این حالت باید از کد ماکرو در اکسل استفاده نمود.
ابتدا سلولهایی که میخواهید متون انگلیسی و فارسی را از هم جدا کنید انتخاب نمایید (مثل شکل بالا)، سپس کلیدهای Alt + F11 را فشار دهید یا از تب Developer قسمت code گزینه Visual Basic را انتخاب کنید. پنجره Microsoft Visual Basic ظاهر میشود. در این پنجره از تب Insert گزینه Module را انتخاب نمائید.
در پنجره جدید باز شده کدهای زیر را کپی کنید.
Sub ExtractArabicFromEng() 'pctarfand.ir & tarfandha.blog.ir' Dim x%, el As Range, EngStr$, ArabStr$, r As Range: Set r = Selection If r.Column <> 1 Then MsgBox "Select only one column.": Exit Sub Const CharList$ = "[A-Za-z0-9]" Const Znaki$ = "[ ]" 'or another signs' Application.ScreenUpdating = False For Each el In r EngStr = "": ArabStr = "" For x = Len(el.Text) To 1 Step -1 If Mid(el.Text, x, 1) Like CharList Then EngStr = Mid(el.Text, x, 1) & EngStr ElseIf Mid(el.Text, x, 1) Like Znaki Then EngStr = Mid(el.Text, x, 1) & EngStr ArabStr = Mid(el.Text, x, 1) & ArabStr Else ArabStr = Mid(el.Text, x, 1) & ArabStr End If Next x el.Offset(, 1).Value = Trim(ArabStr) el.Offset(, 2).Value = Trim(EngStr) Next el Application.ScreenUpdating = True End Sub
در پایان دکمه یا کلید F5 را فشار دهید تا عملیات جداسازی انجام شود.
روش فوق در همه حالات قابل استفاده است.
از روش ساخت تابع که در اینجا اشاره شده است نیز میتوان استفاده کرد اما محدودیت استفاده دارد.