قبلا در این مطلب نحوه تجزیه متن در اکسل بصورت عمومی اشاره شده است. برای یک حالت خاص که در یک سلول ترکیبی از متن فارسی و انگلیسی داشته باشیم و بخواهیم آن‌ها را از هم جدا کنیم همیشه نمی‌توان از روش‌های گفته شده استفاده کرد.

  • حالت ۱)

توضیحات را با یک مثال شروع می‌کنم

در ستون 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 را فشار دهید تا عملیات جداسازی انجام شود.

روش فوق در همه حالات قابل استفاده است.

از روش ساخت تابع که در اینجا اشاره شده است نیز می‌توان استفاده کرد اما محدودیت استفاده دارد.

 

 

author-avatar

درباره فرزاد الماسی نیا

فرزادالماسی:طلبه پایه 5 حوزه علمیه یاسوج هستم با افتخار از این وظیفه.من در این قسمت از سایت مبلغان سایبری چهارده خورشیدمسئول بخش نرم افزار ها هستم.امیدوارم شمانیز از این بخش کمال استفاده را برده باشید. شما نیز می توانید.مطالب خود را برای ما ارسال فرمایید.ویا نرم افزار های مذهبی خود را..در این صورت با نام شما در سایت قرار داده می شود.از قسمت ارسال مطلب استفاده نمایید.ایمیل جهت ارسال نرم افزار. farzadalmasi85@gmail.com

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *