تبدیل اعداد فارسی به انگلیسی و تبدیل اعداد انگلیسی به فارسی در Word با ماکرو (Macro)

 

نکته: این روش در ورد 2013 آموزش داده شده و عکس‌برداری گردیده است.

در این مطلب جامع، قصد دارم تمامی روش‌های موجود برای تبدیل اعداد فارسی به انگلیسی و انگلیسی به فارسی را به کمک Macro بنویسم.

در بسیاری از موارد، هنگاهی که نویسندگان یک فایل مقاله و یا یک کتاب را برای ویراستاری به من ارسال میکنند، متوجه شدهام که عدد نویسی آنها اشتباه است. به عنوان مثال در یک مقاله فارسی نوشتن عدد انگلیسی در متن مقاله اشتباه است. باید تمام اعداد فارسی باشند.

اگر تعداد عددها کم باشد، شاید روش دستی، مشکل شما را حل کند. البته من پیشنهاد میکنم که از روش‌های اصولی استفاده کنید. زیرا بازنویسی عدد، اگر به صورت دستی انجام شود، احتمال تایپ اشتباه دارد.

اما چه طور اعداد یک مقاله، کتاب یا پایان نامه را فارسی کنیم. یا اگر اعداد در سند ورد فارسی است، آنها را به انگلیسی برگردانیم. 

 

   روش دوم: استفاده حرفه‌ای از Word  ساخت Macro فارسی ساز اعداد یا انگلیسی ساز اعداد

 

تبدیل اعداد فارسی به انگلیسی یا برعکس توسط Macro نرم افزار Word

 

 

 

 

برای ساخت ماکرو تبدیل اعداد فارسی به انگلیسی از کدهای زیر استفاده کنید. 

اگر درباره نحوه ساختن ماکروها در ورد، اطلاعی ندارید، پیشنهاد می‌کنیم، مطلب آموزش ماکروها و نحوۀ ساخت آن‌ها را مطالعه کنید. 

 

 

بصورت خلاصه به برگه View مراجعه کنید. دکمه Start Record Macro را فشار دهید و یک نام برای Macro خود انتخاب کنید. مثلا fa2en را برای تبدیل اعداد فارسی به انگلیسی و en2fa را برای تبدیل اعداد انگلیسی به فارسی انتخاب کنید. بعد از Start حالا کافیست بدون هیچ کاری Stop را فشار دهید. وارد بخش ماکروها شوید، نام ماکرو را پیدا کنید و آن را Edit کنید. در محیط VB که باز شده است. کدهای زیر را قرار دهید. اکر کپی کردن کدها برای شما مشکل است. کدها را در یک فایل Text قرارداده ام. از آنجا بردارید. 

 

راهنمایی: کلیدهای میانبر را فراموش نکنید. در برگردان تعداد زیادی عدد به سرعت عمل شما کمک خواهد کرد. 

 

 

 

برای دانلود فایل آماده شده dotm به انتهای مطالب مراجعه کنید. 

 

کد ماکرو تبدیل اعداد انگلیسی به فارسی

 دانلود کنید:  دانلود فایل Text کد ماکرو تبدیل اعداد انگلیسی به فارسی

 

Sub En2Fa()

Dim Ch, Ch2, MyRange, MyNumber As String

    Dim Dot As Integer

    Dim IsItNumber As Boolean

    Dim EmptyRange As Range

    IsItNumber = True

    Dot = 0

    With Selection.Find

        Do

            .ClearFormatting

            .Execute FindText:="^#", Forward:=True, Wrap:=wdFindAsk

        Loop While (Selection.LanguageID = 1065 And Selection.Find.Found = True)

    End With

    Selection.MoveEnd Unit:=wdCharacter, Count:=-1

    Do

        If Ch = "." Then

            Dot = Dot + 1

            Selection.MoveEnd Unit:=wdCharacter, Count:=1

            Ch2 = ActiveDocument.Range(Start:=Selection.End, End:=Selection.End + 1)

                If (Ch2 = "1" Or Ch2 = "2" Or Ch2 = "3" Or Ch2 = "4" Or Ch2 = "5" Or Ch2 = "6" Or Ch2 = "7" Or Ch2 = "8" Or Ch2 = "9" Or Ch2 = "0") Then

                    IsItNumber = True

                Else

                    IsItNumber = False

                    Selection.MoveEnd Unit:=wdCharacter, Count:=-2

                End If

        End If

        Selection.MoveEnd Unit:=wdCharacter, Count:=1

        Ch = ActiveDocument.Range(Start:=Selection.End, End:=Selection.End + 1)

    Loop While (IsItNumber = "false" Or Ch = "1" Or Ch = "2" Or Ch = "3" Or Ch = "4" Or Ch = "5" Or Ch = "6" Or Ch = "7" Or Ch = "8" Or Ch = "9" Or Ch = "0" Or Ch = "." Or Ch = ",")

    MyRange = ActiveDocument.Range(Start:=Selection.Start, End:=Selection.End)

    MyNumber = MyRange

    Selection.Delete

    Application.Keyboard (1065)

    Selection.LanguageID = 1065

    Set EmptyRange = Selection.Range

    EmptyRange.Start = Selection.Start

    Selection.TypeText Text:="ا"

    EmptyRange.End = Selection.End

    If (Dot > 0) Then

        Spl = Split(MyRange, ".")

        If (Dot = 1) Then

            Selection.TypeText Text:=Spl(1) & "/" & Spl(0)

        Else

            For i = 0 To (Dot - 1)

                Selection.TypeText Text:=Spl(i) & "-"

            Next

            Selection.TypeText Text:=Spl(Dot)

        End If

    Else

        Selection.TypeText Text:=MyNumber

    End If

EmptyRange.Text = ""

Application.Keyboard (1033)

Selection.LanguageID = 1033

End Sub

 

 
 کد ماکرو تبدیل اعداد فارسی به انگلیسی

 دانلود کنید:  دانلود فایل Text کد ماکرو تبدیل اعداد فارسی به انگلیسی

 

 

Sub Fa2En()

Dim Ch, Ch2, MyRange, MyNumber As String

    Dim Dot As Integer

    Dim IsItNumber As Boolean

    Dim EmptyRange As Range

    IsItNumber = True

    Dot = 0

    With Selection.Find

        Do

            .ClearFormatting

            .Execute FindText:="^#", Forward:=True, Wrap:=wdFindAsk

        Loop While (Selection.LanguageID = 1033 And Selection.Find.Found = True)

    End With

    Selection.MoveEnd Unit:=wdCharacter, Count:=-1

    Do

        If Ch = "/" Then

            Dot = Dot + 1

            Selection.MoveEnd Unit:=wdCharacter, Count:=1

            Ch2 = ActiveDocument.Range(Start:=Selection.End, End:=Selection.End + 1)

                If (Ch2 = "1" Or Ch2 = "2" Or Ch2 = "3" Or Ch2 = "4" Or Ch2 = "5" Or Ch2 = "6" Or Ch2 = "7" Or Ch2 = "8" Or Ch2 = "9" Or Ch2 = "0") Then

                    IsItNumber = True

                Else

                    IsItNumber = False

                    Selection.MoveEnd Unit:=wdCharacter, Count:=-2

                End If

        End If

        Selection.MoveEnd Unit:=wdCharacter, Count:=1

        Ch = ActiveDocument.Range(Start:=Selection.End, End:=Selection.End + 1)

    Loop While (IsItNumber = "false" Or Ch = "1" Or Ch = "2" Or Ch = "3" Or Ch = "4" Or Ch = "5" Or Ch = "6" Or Ch = "7" Or Ch = "8" Or Ch = "9" Or Ch = "0" Or Ch = "/")

    MyRange = ActiveDocument.Range(Start:=Selection.Start, End:=Selection.End)

    MyNumber = MyRange

    Selection.Delete

    Application.Keyboard (1033)

    Selection.LanguageID = 1033

    Set EmptyRange = Selection.Range

    EmptyRange.Start = Selection.Start

    Selection.TypeText Text:="?"

    EmptyRange.End = Selection.End

    If (Dot > 0) Then

        Spl = Split(MyRange, "/")

        If (Dot = 1) Then

            Selection.TypeText Text:=Spl(1) & "." & Spl(0)

        Else

            For i = 0 To (Dot - 1)

                Selection.TypeText Text:=Spl(i) & "-"

            Next

            Selection.TypeText Text:=Spl(Dot)

        End If

    Else

        Selection.TypeText Text:=MyNumber

    End If

EmptyRange.Text = ""

Application.Keyboard (1065)

Selection.LanguageID = 1065

End Sub 

 

 

راه حل ساده تر: 

کافی است تبدیل خودکار اعداد فارسی به انگلیسی و اعداد انگلیسی به فارسی را دانلود کنید. اعداد خود را داخل این فایل کپی کنید و با کلیدهای میانبر آنها را فارسی یا انگلیسی کنید. 

اگر عدد شما فارسی است و میخواهید به انگلیسی تبدیل کنید : Alt + e (کلید آلت را با e) فشار دهید. 

اگر عدد شما انگلیسی است و میخواهید به فارسی تبدیل کنید: Alt+f (کلید آلت را با f) فشار دهید.