مدونة متخصصة في الاوفيس وتحليل البيانات والمعلومات والمهارات الشخصية والتنمية البشرية

آخر المواضيع

تفقيط الارقام وتحويلها الى نصوص

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

الكـــــــود 

Function NumberToText(Number As Double, MainCurrency As String, SubCurrency As String)

Dim Array1(0 To 9) As String

Dim Array2(0 To 9) As String

Dim Array3(0 To 9) As String

Dim MyNumber As String

Dim GetNumber As String

Dim ReadNumber As String

Dim My100 As String

Dim My10 As String

Dim My1 As String

Dim My11 As String

Dim My12 As String

Dim GetText As String

Dim Billion As String

Dim Million As String

Dim Thousand As String

Dim Hundred As String

Dim Fraction As String

Dim MyAnd As String

Dim I As Integer

Dim ReMark As String

 

 

If Number > 999999999999.99 Then Exit Function

If Number < 0 Then

Number = Number * -1

ReMark = "سالب "

End If

 

If Number = 0 Then

NumberToText = "صفر"

Exit Function

End If

 

MyAnd = " و"

Array1(0) = ""

Array1(1) = "مائة"

Array1(2) = "مائتان"

Array1(3) = "ثلاثمائة"

Array1(4) = "أربعمائة"

Array1(5) = "خمسمائة"

Array1(6) = "ستمائة"

Array1(7) = "سبعمائة"

Array1(8) = "ثمانمائة"

Array1(9) = "تسعمائة"

 

Array2(0) = ""

Array2(1) = " عشر"

Array2(2) = "عشرون"

Array2(3) = "ثلاثون"

Array2(4) = "أربعون"

Array2(5) = "خمسون"

Array2(6) = "ستون"

Array2(7) = "سبعون"

Array2(8) = "ثمانون"

Array2(9) = "تسعون"

 

Array3(0) = ""

Array3(1) = "واحد"

Array3(2) = "اثنان"

Array3(3) = "ثلاثة"

Array3(4) = "أربعة"

Array3(5) = "خمسة"

Array3(6) = "ستة"

Array3(7) = "سبعة"

Array3(8) = "ثمانية"

Array3(9) = "تسعة"

 

GetNumber = Format(Number, "000000000000.00")

 

I = 0

Do While I < 15

 

If I < 12 Then

MyNumber = Mid$(GetNumber, I + 1, 3)

Else

MyNumber = "0" + Mid$(GetNumber, I + 2, 2)

End If

 

If (Mid$(MyNumber, 1, 3)) > 0 Then

 

ReadNumber = Mid$(MyNumber, 1, 1)

My100 = Array1(ReadNumber)

ReadNumber = Mid$(MyNumber, 3, 1)

My1 = Array3(ReadNumber)

ReadNumber = Mid$(MyNumber, 2, 1)

My10 = Array2(ReadNumber)

 

If Mid$(MyNumber, 2, 2) = 11 Then My11 = "إحدى عشرة"

If Mid$(MyNumber, 2, 2) = 12 Then My12 = "إثنى عشرة"

If Mid$(MyNumber, 2, 2) = 10 Then My10 = "عشرة"

 

If ((Mid$(MyNumber, 1, 1)) > 0) And ((Mid$(MyNumber, 2, 2)) > 0) Then My100 = My100 + MyAnd

If ((Mid$(MyNumber, 3, 1)) > 0) And ((Mid$(MyNumber, 2, 1)) > 1) Then My1 = My1 + MyAnd

 

GetText = My100 + My1 + My10

 

If ((Mid$(MyNumber, 3, 1)) = 1) And ((Mid$(MyNumber, 2, 1)) = 1) Then

GetText = My100 + My11

If ((Mid$(MyNumber, 1, 1)) = 0) Then GetText = My11

End If

 

If ((Mid$(MyNumber, 3, 1)) = 2) And ((Mid$(MyNumber, 2, 1)) = 1) Then

GetText = My100 + My12

If ((Mid$(MyNumber, 1, 1)) = 0) Then GetText = My12

End If

 

If (I = 0) And (GetText <> "") Then

If ((Mid$(MyNumber, 1, 3)) > 10) Then

Billion = GetText + " مليار"

Else

Billion = GetText + " مليارات"

If ((Mid$(MyNumber, 1, 3)) = 2) Then Billion = " مليار"

If ((Mid$(MyNumber, 1, 3)) = 2) Then Billion = " مليارن"

End If

End If

 

If (I = 3) And (GetText <> "") Then

 

If ((Mid$(MyNumber, 1, 3)) > 10) Then

Million = GetText + " مليون"

Else

Million = GetText + " ملايين"

If ((Mid$(MyNumber, 1, 3)) = 1) Then Million = " مليون"

If ((Mid$(MyNumber, 1, 3)) = 2) Then Million = " مليونان"

End If

End If

 

If (I = 6) And (GetText <> "") Then

If ((Mid$(MyNumber, 1, 3)) > 10) Then

Thousand = GetText + " ألف"

Else

Thousand = GetText + " ألاف"

If ((Mid$(MyNumber, 3, 1)) = 1) Then Thousand = " ألف"

If ((Mid$(MyNumber, 3, 1)) = 2) Then Thousand = " ألفان"

End If

End If

 

If (I = 9) And (GetText <> "") Then Hundred = GetText

If (I = 12) And (GetText <> "") Then Fraction = GetText

End If

 

I = I + 3

Loop

 

If (Billion <> "") Then

If (Million <> "") Or (Thousand <> "") Or (Hundred <> "") Then Billion = Billion + MyAnd

End If

 

If (Million <> "") Then

If (Thousand <> "") Or (Hundred <> "") Then Million = Million + MyAnd

End If

 

If (Thousand <> "") Then

If (Hundred <> "") Then Thousand = Thousand + MyAnd

End If

 

If Fraction <> "" Then

If (Billion <> "") Or (Million <> "") Or (Thousand <> "") Or (Hundred <> "") Then

NumberToText = ReMark + Billion + Million + Thousand + Hundred + " " + MainCurrency + MyAnd + Fraction + " " + SubCurrency

Else

NumberToText = ReMark + Fraction + " " + SubCurrency

End If

Else

NumberToText = ReMark + Billion + Million + Thousand + Hundred + " " + MainCurrency

End If

End Function


قم بفتح ملف الاكسيل المراد العمل عليه ،  والدخول الى الVisual Basic  وذلك بالضغط على ALT + F11  او بالدخول على شريط الادوات Developer  ثم Visual Basic
بعد فتح نافذة VB  نفوم بإدراج الموديول الخاص بالكود كما بالشكل الموضح
قم بنسخ الكود ولصقه داخل ال موديول الذي قمنا بإنشاءة وبعدها يتم غلق النافذة الخاصة بلغة VB

بعد غلق نافذة البرمجة نجد انه قد تم وضع دالة جديدة تظهر بمجرد كتابة الحروف الاولى المكونة لكلمة Number وهي الدالة NumberToText
لها متغيرات ثلاثة فقط الخلية الموجود بها الرقم ورمز العملة المستخدمة 
يرجى العلم انه يمكن في هذين المتغيرين استخدام اي صيغة للتعبير عن العمله مثال جنيها مصريا وبالتالي قرشا او ريال سعودي او دينار كويتي 
اياً كان ما يتم كتبابتة في المتغيرين الثاني والثالث هو ما سيظهر بعد الرقم الذي تم تحويلة 





















ليست هناك تعليقات:

إرسال تعليق

عن المدونة

مدونة تكنوليبريان : مدونة حديثة في مجاالات تكنولوجيا المعلومات والحاسب الالي والمكتبات نطمح في النهاية الى ان تنال اعجابكم / احمد وجيه
المزيد →

البحث داخل المدونة

نموذج الاتصال

الاسم

بريد إلكتروني *

رسالة *