Monday, May 13, 2013

التفقيط باستخدام اكسل - تحويل الأرقام إلى حروف مكتوبة

الكود المرفق يقوم بتحويل أي رقم إلى حروف (التفقيط) باللغة العربية بالجنيه المصري.
قم بنسخ الكود المرفق و إضافته في Excel VB و ستعمل الوظيفة Monitize كأحد الوظائف الموجودة بإكسل و تساعدك على تحويل أي رقم إلى مبلغ مالي بالحروف بالجنيه المصري. الفيديو التالي يوضح كيفية استخدام الوظيفة الجديدة:

يمكنك نسخ الكود التالي بالكامل و إضافته في إكسل لاستخدامه بعد ذلك. ملحوظة: تم عمل هذا الكود لإجراء وظيفة محددة و يجب اختباره جيدا قبل استخدامه بشكل احترافي.

Public Function Monitize(num_entry)
Dim LE
Dim PT
Dim iVal
Dim fFrac
Dim cDigit
Dim cFrac
Dim result

      LE = " جنيه "
      PT = " قرش "
      iVal = Int(num_entry)
      cDigit = Digit_Translator(iVal)
      fFrac = Val(Right(Format(num_entry, "000000000000.00"), 2))
      cFrac = Digit_Translator(fFrac)
      If cDigit <> "" And fFrac > 0 Then result = cDigit & LE & " و " & cFrac & PT
      If cDigit <> "" And fFrac = 0 Then result = cDigit & LE
      If cDigit = "" And fFrac <> 0 Then result = cFrac & PT
      Monitize = result
      
End Function

Private Function Digit_Translator(X)
Dim n
Dim c
Dim c1
Dim Digit1
Dim c2
Dim Digit2
Dim c3
Dim Digit3
Dim c4
Dim Digit4
Dim c5
Dim Digit5
Dim c6
Dim Digit6

      n = Int(X)
      c = Format(n, "000000000000")
      c1 = Val(Mid(c, 12, 1))
      Select Case c1
            Case Is = 1: Digit1 = "واحد"
            Case Is = 2: Digit1 = "اثنان"
            Case Is = 3: Digit1 = "ثلاث"
            Case Is = 4: Digit1 = "اربع"
            Case Is = 5: Digit1 = "خمس"
            Case Is = 6: Digit1 = "ست"
            Case Is = 7: Digit1 = "سبع"
            Case Is = 8: Digit1 = "ثمان"
            Case Is = 9: Digit1 = "تسع"
      End Select
      
      c2 = Val(Mid(c, 11, 1))
      Select Case c2
            Case Is = 1: Digit2 = "عشر"
            Case Is = 2: Digit2 = "عشرون"
            Case Is = 3: Digit2 = "ثلاثون"
            Case Is = 4: Digit2 = "اربعون"
            Case Is = 5: Digit2 = "خمسون"
            Case Is = 6: Digit2 = "ستون"
            Case Is = 7: Digit2 = "سبعون"
            Case Is = 8: Digit2 = "ثمانون"
            Case Is = 9: Digit2 = "تسعون"
      End Select
      
      If Digit1 <> "" And c2 > 1 Then Digit2 = Digit1 + " و" + Digit2
      If Digit2 = "" Then Digit2 = Digit1
      If c1 = 0 And c2 = 1 Then Digit2 = Digit2 + "ة"
      If c1 = 1 And c2 = 1 Then Digit2 = "احدى عشر"
      If c1 = 2 And c2 = 1 Then Digit2 = "اثنتى عشر"
      If c1 > 2 And c2 = 1 Then Digit2 = Digit1 + " " + Digit2
      c3 = Val(Mid(c, 10, 1))
      Select Case c3
            Case Is = 1: Digit3 = "مائة"
            Case Is = 2: Digit3 = "مئتان"
            Case Is > 2: Digit3 = Left(Digit_Translator(c3), Len(Digit_Translator(c3))) + "مائة"
      End Select
      If Digit3 <> "" And Digit2 <> "" Then Digit3 = Digit3 + " و" + Digit2
      If Digit3 = "" Then Digit3 = Digit2
      
      c4 = Val(Mid(c, 7, 3))
      Select Case c4
            Case Is = 1: Digit4 = "الف"
            Case Is = 2: Digit4 = "الفان"
            Case 3 To 10: Digit4 = Digit_Translator(c4) + " آلاف"
            Case Is > 10: Digit4 = Digit_Translator(c4) + " الف"
      End Select
      If Digit4 <> "" And Digit3 <> "" Then Digit4 = Digit4 + " و" + Digit3
      If Digit4 = "" Then Digit4 = Digit3
      c5 = Val(Mid(c, 4, 3))
      Select Case c5
            Case Is = 1: Digit5 = "مليون"
            Case Is = 2: Digit5 = "مليونان"
            Case 3 To 10: Digit5 = Digit_Translator(c5) + " ملايين"
            Case Is > 10: Digit5 = Digit_Translator(c5) + " مليونا"
      End Select
      If Digit5 <> "" And Digit4 <> "" Then Digit5 = Digit5 + " و" + Digit4
      If Digit5 = "" Then Digit5 = Digit4
      
      c6 = Val(Mid(c, 1, 3))
      Select Case c6
            Case Is = 1: Digit6 = "مليار"
            Case Is = 2: Digit6 = "ملياران"
            Case Is > 2: Digit6 = Digit_Translator(c6) + " مليارات"
      End Select
      If Digit6 <> "" And Digit5 <> "" Then Digit6 = Digit6 + " و" + Digit5
      If Digit6 = "" Then Digit6 = Digit5
      Digit_Translator = Digit6
      
End Function

42 comments:

  1. هل يمكن اضافه كلمة فقط او لاغير فى اخر التفقيط

    ReplyDelete
    Replies
    1. If cDigit <> "" And fFrac > 0 Then result = cDigit & LE & " و " & cFrac & PT + " فقط لا غير "
      If cDigit <> "" And fFrac = 0 Then result = cDigit & LE + " فقط لا غير "
      If cDigit = "" And fFrac <> 0 Then result = cFrac & PT + " فقط لا غير "

      Delete
  2. ممكن طبعا..

    بعد الخطوة الأخيرة:
    Digit_Translator = Digit6

    أضف الخطوة التالية:
    Digit_Translator = Digit_Translator +" ، فقط لا غير،،"


    ReplyDelete
    Replies
    1. لا غير بتتحط قبل القرش كده !!!!!

      Delete
    2. هو بيتم عملها مع كل أكسيل شيت جديدة ولا بيتم انها تتسجل

      Delete
  3. السلام عليكم

    مشكور وما قصرت على المجهود الجبار

    ولكن عندي مشكلة الاوفيس 2013 يعطيني خطأ الرجاء الافادة

    وشكرا

    ReplyDelete
    Replies
    1. لم يتم الفحص على 2013 بعد
      سنوافيك بالنتيجة بعد تجربة 2013
      لكن للأسف لن سكون ذلك قريبا

      Delete
  4. هل من الممكن جعله يقرأ ثلاث خانات بعد الفاصله العشريه ؟
    مثلا : الف دينار و مائتين وخمسون فلس

    ReplyDelete
    Replies
    1. ممكن طبعا سيتم رفع تحديث في أقرب وقت

      Delete
  5. This comment has been removed by the author.

    ReplyDelete
  6. الكتابة ضهرت مشوهة

    ReplyDelete
    Replies
    1. تأكد كن نسخ الكود بشكل صحيح إلى إكسيل لأن هذه المشكلة متعلقة بالكتابة العربي

      Delete
  7. تمت تجربته على اوفيس 2013 ويعمل بشكل جيد ولا يوجد ملاحظات
    وقمت بتغيير العملة الى ريال و هللة وتمت التجربة بنجاح

    ReplyDelete
  8. اولآ تسلم ايدك بجد علي المجهود الرائع ولكن office 2010 بة مشكلة في الكتاب الغة العربية

    ReplyDelete
    Replies
    1. هو تم تجريبه لعى 2013 و بيعمل عادي
      و سيعمل على 2010 بس تأكد من encoding العربي قبل أن تبدأ
      أو انسخ الكود على notepade ثم انسخه منه إلى اكسيل و سيعمل بلإذن الله.

      Delete
  9. عايز اكتب فقط فى الاول ولا غير فى الاخر

    ReplyDelete
  10. مفيش مثال مرفق احسن العربى عندى فيه مشكلة
    بيظهر الكتابة العربى بطريقة مش مفهومة
    حاولت اغير انكود فى النوت باد وغيره ومفيش فايده
    وجربت اكثر من اصدار فى الوفيس بردو بيظهر العربى حروف انجليش مش مفهومة

    دا مثال من الى بيظهر
    ÇáÝ æãÆÊÇä ÌäíÉ æ ËáÇË æÚÔÑæä ÞÑÔ

    ReplyDelete
    Replies
    1. السلام عليكم ورحمة الله بركاته
      توجد مشكله لدى هذا الكود
      انه لا يقراء القيم السالبة

      Delete
  11. حصل معايا مشكلة في التثبيت و مشكولا

    ReplyDelete
  12. لتفادي هذا المشكل قم بتغيير العدد بالعربية الى قيمة موجودة في اكسيل
    مثلا اكتب واحد في اكسيل في الخلية (1.1) تم عوض في فيزويل بازيك رقم واحد ب
    Feuil3.Cells(1, 1) .

    Case Is = 1: Digit1 = Feuil3.Cells(1, 1) '1
    Case Is = 2: Digit1 = Feuil3.Cells(2, 1) '2
    .....

    ReplyDelete
  13. ارجو مشكله السالب حيث ان هذا الكود لايقرا السالب

    ReplyDelete
  14. السلام عليكم
    انا دخلت الكود بس المشكله انه يقرأ بالانجليزي
    شو اسوي عشان اتفادا المشكله
    مثل لما ادخل الرقم ما يعطيني بالعربي هر
    ÇáÝ æãÆÊÇä ÌäíÉ æ ËáÇË æÚÔÑæä ÞÑÔ

    لاكن الكود دخلته بالعربي

    ReplyDelete
  15. كله تمام بس لو كان معي عمودين احدهم نقدي والاخر شيك العمود الاول تمام بس العمود الثاني بيفرأ لي بالعشرات مثال ادخل رقم ( 1 ) يقراها 10 و رقم (10) يقراها (100) كيف اعملولكم جزيل الشكر

    ReplyDelete
  16. This comment has been removed by the author.

    ReplyDelete
  17. هو حضرتك بيتك عملها مع كل أكسيل شيت جديدة ولا بيتم حفظها عندى ولو بيتم حفظها بيتم أزاى

    ReplyDelete
  18. لو القيمة بالسالب مثلا -8500 يكتب ثمانمائة وخمسون وليس ثمانية ألاف وخمسمائة نرجوا الافادة عن سبب هذه المشكلة

    ReplyDelete
  19. تم تجربته مع اكسل 2013 واكسس 2013 والتفقيط رائع شكرا جزيلا ،،،

    ReplyDelete
  20. النسخة عندي عربي ولا أعرف كيف يتم تنزيل الكود على الأكسل أفيدوني جزاكم الله خيرا

    ReplyDelete
  21. ممكن تغير الجنية للريال

    ReplyDelete
  22. السلام عليكم

    اخي في مشكلة في حفظ الملف

    ممكن التوضيح لان المعادلة بعد الحفظ لا توجد

    ReplyDelete
  23. يا جماعه لو سمحتوا بيجيبلي بعد تطبيق المعادلة وصحيحة تماما علامات استفهام مكان التفقيط

    ReplyDelete
  24. جيايبلي مشكله في الأسم ؟ ما الحل ؟

    ReplyDelete
  25. برجاء الافادة عن النوع الذي نحفظ به الملف

    ReplyDelete
  26. السلام عليكم الموضوع فعلا مفيد جدا
    بس انا واجهتني مشكلتين ان انا عاوزه اكسس مش اكسل ولو حبيت استخدمه علي الاكسيل المايكرو لا يكتب عربي وجميع الاحرف بتطلع
    ???????
    علامات استفهام
    ارجو الافاده

    ReplyDelete
  27. يا جماعة بدل ما يفقط الارقم بيديني صفر في مكان التفقيط

    ReplyDelete
  28. ممتاز ربنا يديك العافيه

    ReplyDelete
  29. جزاك الله خيراً زكاة العلم نشره بارك الله فيك

    ReplyDelete
  30. السلام عليكم
    بعد لما بنسخ الدالة الكلمات العربي بتجيب علامات استفهام مش راضي يكتب عربي

    ReplyDelete
  31. convert these numbers and it converts as "four" at the end instead of "five". what is the problem with these numbers?

    ReplyDelete
  32. 2,495,159,565.00
    2,520,159,565.00

    ReplyDelete
  33. ملياران واربعمائة وخمس وتسعون مليونا ومائة وتسع وخمسون الف وخمسمائة واربع وستون دينار عراقي
    ملياران وخمسمائة وعشرون مليونا ومائة وتسع وخمسون الف وخمسمائة واربع وستون دينار عراقي

    ReplyDelete

How To Create LSMW Program in SAP

The below video will show detailed example of creating simple LSMW program / recording in SAP.