هديتي للمنتدى هو كود أخذ مني الكثير في اعداده وهو لتحويل الارقام الى ارقام منطوقة بالعربية ويمكن استخدامه الى من ا الى مالا نهاية .. ارجوا الاطلاع عليه واتمنا أن ينال إعجابكم .. وارجوا ان يكون اسهام بسيط في هذا المنتدى الذي اعطانا الكثير.
الكود:
Private Function ToWordsArb(Num As String) As String Dim S1 As String, S2 As String, S3 As String, Tmp As String, X As String Dim L As Integer, T As Integer, R As Integer, T_ As String Const S As String = " ": Const O As String = " و " T_ = "الاف" 'Fill Array'''''''''''''''''''(1 to 9)''''''''''''''''''''' Dim AN(0 To 9) As String 'Data for conversion AN(1) = "واحد": AN(2) = "اثنان": AN(3) = "ثلاثة" AN(4) = "اربعة": AN(5) = "خمسة": AN(6) = "ستة" AN(7) = "سبعة": AN(8) = "ثمانية": AN(9) = "تسعة" ''''''''''''''''''''(11 to 19 )''''''''''''''''''''''''''''' Dim BN(0 To 9) As String BN(0) = "عشرة" BN(1) = "احد عشر": BN(2) = "اثنا عشر": BN(3) = "ثلاثة عشر" BN(4) = "اربع عشر": BN(5) = "خمسة عشر": BN(6) = "ستة عشر" BN(7) = "سبعة عشر": BN(8) = "ثمانية عشر": BN(9) = "تسعة عشر" ''''''''''''''''''''(10 to 90)''''''''''''''''''''''''''''''''''' Dim CN(0 To 9) As String CN(1) = "عشرة": CN(2) = "عشرين": CN(3) = "ثلاثين" CN(4) = "اربعين": CN(5) = "خمسين": CN(6) = "ستين" CN(7) = "سبعين": CN(8) = "ثمانين": CN(9) = "تسعين" ''''''''''''''''''''(100 to 900)''''''''''''''''''''''''''''''''''' Dim DN(0 To 9) As String DN(1) = "مائة": DN(2) = "مائتين": DN(3) = "ثلاث مائة" DN(4) = "اربع مائة": DN(5) = "خمس مائة": DN(6) = "ست مائة" DN(7) = "سبع مائة": DN(8) = "ثمان مائة": DN(9) = "تسع مائة" 'ZEROs'''''''''''''''''''''''''''''' AN(0) = "": BN(0) = "عشرة": CN(0) = "": DN(0) = "" 'Make redey'''''''''''''''''''''''''''''' L = Len(Num) '''''''''''''''''''''''''''''''''Check Start: '''''''''''''''''''''''''''''''''''''''''''' ''ALL BY ORDER :''''''''''''''''''''''''''''' Dim W As Collection, C As Integer, MM As String Set W = New Collection 'Split numbers to array For T = L To 1 Step -1 MM = Mid(CStr(Num), T, 1) If IsNumeric(MM) Then W.Add MM Next T 'Exit if it Zero''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Num = Replace(Num, "|", ""): If Val(Num) = 0 Then X = "صفر": GoTo Ex ''' C = W.Count: L = C 'Very Important ''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '1 Check''1 to 9 If L = 1 Then X = AN(Val(Num)): GoTo Ex '2 Check'11-12-13....To: 19 If L = 2 Then If Val(W.Item(2)) = 1 Then _ X = BN(Val(W.Item(1))): GoTo Ex '2 Check'10-20-30....To: 90 If L = 2 Then If Val(W.Item(1)) = 0 Then _ X = CN(Val(W.Item(1))): GoTo Ex '3 Check'From 21 ....To: 90 If L = 2 Then X = AN(Val(W.Item(1))) & O & CN(Val(W.Item(2))): GoTo Ex Re_Check: '3 Check' The Tow Frist Numbers of Large number: If Val(W.Item(2)) = "1" Then 'Elvenths(BN) X = BN(Val(Val(W.Item(1)))) X = X ElseIf Val(W.Item(1)) = "0" Then 'Tointeth(CN) X = CN(Val(Val(W.Item(2)))) Else X = AN(Val(W.Item(1))) & O & CN(Val(W.Item(2))) 'From 21-67 ....To: 90 End If X = Zeros(W, X, 2) '4 Check ' 12-31-41... to end''' If L > 2 Then 'Hundreds(DN) X = DN(Val(W.Item(3))) & O & X 'Hundreds & Numbers If W.Item(1) = "0" And W.Item(2) = "0" Then X = DN(Val(W.Item(3))) 'Hundreds & Zeros X = Zeros(W, X, 3) End If ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If L = 4 Then ' Thawsend(1,000)''4 Numbers''''''''''''''''''''''''''''''' If Val(W.Item(4)) = 1 Then Tmp = "الف" ElseIf Val(W.Item(4)) = 2 Then Tmp = "الفين" Else Tmp = "الاف" End If If Tmp = "الاف" Then X = AN(Val(W.Item(4))) & S & Tmp & O & X Else X = Tmp & O & X 'Thawsend & Numbers If W(2) = "0" & W(3) = "0" & W(4) = "0" Then _ If Tmp = "الاف" Then X = AN(Val(W.Item(1))) & S & Tmp Else X = Tmp 'Thawsend & Zeros X = Zeros(W, X, 4) End If ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'If L > 4 And L < 8 Then '10 Thawsend(10,000)''5 Numbers''''''''''''''''''''''''''''''' If L > 4 Then ''___ OPEN IF ______________________________________________(L > 4) TenThawsend: '10 Thawsend(10,000)''5 Numbers''''''''''''''''''''''''''''''' Tmp = "" If W(5) = "0" Then GoTo HoundredsThawsend 'Jump If Val(W.Item(5)) = 1 Then Tmp = "عشرة الاف" ElseIf Val(W.Item(5)) = 2 Then Tmp = "عشرين الف" End If If W(4) = "0" Then '10.000 If Val(W.Item(5)) = 1 Or Val(W.Item(5)) = 2 Then X = Tmp & O & X Else _ T_ = "الف": X = CN(Val(W(5))) & S & T_ & O & X Else '11.000 T_ = "الف" If W(5) = "1" Then X = BN(Val(W(4))) & S & T_ & O & X If W(5) <> "1" Then X = AN(Val(W(4))) & O & CN(Val(W(5))) & S & T_ & O & X End If If L = 5 Then GoTo Ex '100 Thawsend(100,000)''6 Numbers'''''''''''''''''''''''''''''' HoundredsThawsend: If W(6) = "0" Then GoTo Mileons 'Jump X = Zeros(W, X, 5) Tmp = "الف" If W(5) = "0" And W(4) = "0" Then X = DN(Val(W(6))) & S & Tmp & O & X Else If W(5) = 0 Then If Val(W(6)) > 2 Then Tmp = "الاف" If Val(W(5)) = 0 Then If Val(W(4)) > 2 Then Tmp = "الاف" Else Tmp = "الف" X = DN(Val(W(6))) & O & AN(Val(W(4))) & S & Tmp & O & X 'tx here Else X = DN(Val(W(6))) & O & X End If End If X = Replace(X, "مائتين الف", "مئتي الف") X = Replace(X, " الف الف ", " الف ") If L < 7 Then GoTo Ex 'Milon(1000,000)''7 numbers''''''''''''''''''''''''''''''' Mileons: If Val(W.Item(7)) < 1 Then GoTo TenMileons 'Jump If L > 7 Then If Val(W.Item(8)) <> 0 Then GoTo TenMileons 'Jump If L > 8 Then If Val(W(9)) <> 0 Then GoTo TenMileons 'Jump Tmp = "ملاين" If Val(W.Item(7)) = 1 Then Tmp = "مليون" ElseIf Val(W.Item(7)) = 2 Then Tmp = "مليونين" End If X = Zeros(W, X, 6) If Val(W.Item(7)) > 2 Then X = AN(Val(W(7))) & S & Tmp & O & X Else X = Tmp & O & X If L < 8 Then GoTo Ex 'Milon(10,000,000)''8 numbers''''''''''''''''''''''''''''''' TenMileons: If L > 8 Then If Val(W(9)) <> 0 Or Val(W(8)) < 1 Then GoTo HoundredsMileons 'Jump If Val(W(8)) = 1 Then Tmp = "ملاين" Else Tmp = "مليون" X = Zeros(W, X, 6) X = Zeros(W, X, 7) If Val(W(8)) = 1 Then 'Tenth Mileons:10,000,000 If Val(W(7)) = 0 Then X = CN(Val(W(8))) & S & Tmp & O & X Else _ Tmp = "مليون": X = BN(Val(W(7))) & S & Tmp & O & X 'Elventh Mileons Else If Val(W(7)) = 0 Then X = CN(Val(W(8))) & S & Tmp & O & X Else _ X = AN(Val(W(7))) & O & CN(Val(W(8))) & S & Tmp & O & X '12,000,000 End If If L < 9 Then GoTo Ex 'Milon(100,000,000)''9 numbers''''''''''''''''''''''''''''''' HoundredsMileons: If L > 9 And Val(W(9)) < 1 Then GoTo Bileon Tmp = "مليون" X = Zeros(W, X, 8) If Val(W(7)) = 0 And Val(W(8)) = 0 Then '100,000,000 X = DN(Val(W(9))) & S & Tmp & O & X 'Puer Houndreds Of Mileons Else '110,000,000 '1- Houndreds Of Mileons & Elvenths : ..2- Else :Houndreds Of Mileons & Frist numbers If Val(W(8)) = 1 Then X = DN(Val(W(9))) & O & BN(Val(W(7))) & S & Tmp & O & X Else _ X = DN(Val(W(9))) & O & AN(Val(W(7))) & S & CN(Val(W(8))) & S & Tmp & O & X End If X = Replace(X, "مائتين مليون", "مئتي مليون") If L < 10 Then GoTo Ex 'Bileon(1,000,000,000)''10 numbers''''''''''''''''''''''''''''''' Bileon: If Val(W.Item(10)) < 1 Then GoTo Ten_Of_Bileons 'Jump If L > 10 Then If Val(W.Item(11)) <> 0 Then GoTo Ten_Of_Bileons 'Jump If L > 11 Then If Val(W(12)) <> 0 Then GoTo Ten_Of_Bileons 'Jump Tmp = "بلاين" If Val(W.Item(10)) = 1 Then Tmp = "بليون" ElseIf Val(W.Item(10)) = 2 Then Tmp = "بليونين" End If X = Zeros(W, X, 9) If Val(W.Item(10)) > 2 Then X = AN(Val(W(10))) & S & Tmp & O & X Else X = Tmp & O & X If L < 11 Then GoTo Ex 'Bileon(10,000,000,000)''11 numbers''''''''''''''''''''''''''''''' Ten_Of_Bileons: If L > 11 Then If Val(W(12)) <> 0 Or Val(W(11)) < 1 Then GoTo Houndred_Of_Bileons 'Jump If Val(W(11)) = 1 Then Tmp = "بلاين" Else Tmp = "بليون" X = Zeros(W, X, 11) If Val(W(11)) = 1 Then 'Tenth Bileons:10,000,000,000 If Val(W(10)) = 0 Then X = CN(Val(W(11))) & S & Tmp & O & X Else _ Tmp = "بليون": X = BN(Val(W(10))) & S & Tmp & O & X 'Elventh Bileons Else If Val(W(10)) = 0 Then X = CN(Val(W(11))) & S & Tmp & O & X Else _ X = AN(Val(W(10))) & O & CN(Val(W(11))) & S & Tmp & O & X '12,000,000,000 End If If L < 12 Then GoTo Ex 'Bileon(100,000,000,000)''12 numbers''''''''''''''''''''''''''''''' Houndred_Of_Bileons: If L > 12 And Val(W(12)) < 1 Then GoTo Trlion Tmp = "بليون" X = Zeros(W, X, 12) If Val(W(10)) = 0 And Val(W(11)) = 0 Then '100,000,000,000 X = DN(Val(W(12))) & S & Tmp & O & X 'Puer Houndreds Of Bileons Else '110,000,000,000 '1- Houndreds Of Bileons & Elvenths : ..2- Else :Houndreds Of Bileons & Frist numbers If Val(W(11)) = 1 Then X = DN(Val(W(12))) & O & BN(Val(W(10))) & S & Tmp & O & X Else _ X = DN(Val(W(12))) & O & AN(Val(W(10))) & S & CN(Val(W(11))) & S & Tmp & O & X End If X = Replace(X, "مائتين بليون", "مئتي بليون") If L < 13 Then GoTo Ex 'Trlion(1,000,000,000,000)''13 numbers''''''''''''''''''''''''''''''' Trlion: If Val(W.Item(13)) < 1 Then GoTo Ten_Of_Trlions 'Jump If L > 13 Then If Val(W.Item(14)) <> 0 Then GoTo Ten_Of_Trlions 'Jump If L > 14 Then If Val(W.Item(15)) <> 0 Then GoTo Ten_Of_Trlions 'Jump Tmp = "تريلونات" If Val(W.Item(13)) = 1 Then Tmp = "ترليون" ElseIf Val(W.Item(13)) = 2 Then Tmp = "ترليونين" End If X = Zeros(W, X, 13) If Val(W.Item(13)) > 2 Then X = AN(Val(W(13))) & S & Tmp & O & X Else X = Tmp & O & X If L < 14 Then GoTo Ex 'Ten_Of_Trlions(10,000,000,000,000)''14 numbers''''''''''''''''''''''''''''''' Ten_Of_Trlions: If L > 14 Then If Val(W(15)) <> 0 Or Val(W(14)) < 1 Then GoTo Houndreds_Of_Trlions 'Jump If Val(W(14)) = 1 Then Tmp = "تريلونات" Else Tmp = "ترليون" X = Zeros(W, X, 14) If Val(W(14)) = 1 Then 'Tenth Trlions:10,000,000,000,000 If Val(W(13)) = 0 Then X = CN(Val(W(14))) & S & Tmp & O & X Else _ Tmp = "ترليون": X = BN(Val(W(13))) & S & Tmp & O & X 'Elventh Trlions Else If Val(W(13)) = 0 Then X = CN(Val(W(14))) & S & Tmp & O & X Else _ X = AN(Val(W(13))) & O & CN(Val(W(14))) & S & Tmp & O & X '12,000,000,000,000 End If If L < 15 Then GoTo Ex 'Houndreds_Of_Trlions(100,000,000,000,000)''15 numbers''''''''''''''''''''''''''''''' Houndreds_Of_Trlions: If L > 15 And Val(W(15)) < 1 Then GoTo Quadrillion Tmp = "ترليون" X = Zeros(W, X, 15) If Val(W(13)) = 0 And Val(W(14)) = 0 Then '100,000,000,000,000 X = DN(Val(W(15))) & S & Tmp & O & X 'Puer Houndreds Of Trlions Else '110,000,000,000,000 '1- Houndreds Of Trlions & Elvenths : ..2- Else :Houndreds Of Trlions & Frist numbers If Val(W(14)) = 1 Then X = DN(Val(W(15))) & O & BN(Val(W(13))) & S & Tmp & O & X Else _ X = DN(Val(W(15))) & O & AN(Val(W(13))) & S & CN(Val(W(14))) & S & Tmp & O & X End If X = Replace(X, "مائتين ترليون", "مئتي ترليون") If L < 16 Then GoTo Ex 'Quadrillion(1,000,000,000,000,000)''16 numbers''''''''''''''''''''''''''''''' Quadrillion: If Val(W.Item(16)) < 1 Then GoTo Ten_Of_Quadrillions 'Jump If L > 16 Then If Val(W.Item(17)) <> 0 Then GoTo Ten_Of_Quadrillions 'Jump If L > 17 Then If Val(W.Item(18)) <> 0 Then GoTo Ten_Of_Quadrillions 'Jump Tmp = "كوادرليونات" If Val(W.Item(16)) = 1 Then Tmp = "كوادرليون" ElseIf Val(W.Item(16)) = 2 Then Tmp = "كوادرليونين" End If X = Zeros(W, X, 16) If Val(W.Item(16)) > 2 Then X = AN(Val(W(16))) & S & Tmp & O & X Else X = Tmp & O & X If L < 17 Then GoTo Ex 'Ten_Of_Quadrillions(10,000,000,000,000,000)''17 numbers''''''''''''''''''''''''''''''' Ten_Of_Quadrillions: If L > 17 Then If Val(W(18)) <> 0 Or Val(W(17)) < 1 Then GoTo Houndreds_Of_Quadrillions 'Jump If Val(W(17)) = 1 Then Tmp = "كوادرليونات" Else Tmp = "كوادرليون" X = Zeros(W, X, 17) If Val(W(17)) = 1 Then 'Tenth Quadrillions If Val(W(16)) = 0 Then X = CN(Val(W(17))) & S & Tmp & O & X Else _ Tmp = "كوادرليون": X = BN(Val(W(16))) & S & Tmp & O & X 'Elventh Quadrillions Else If Val(W(16)) = 0 Then X = CN(Val(W(17))) & S & Tmp & O & X Else _ X = AN(Val(W(16))) & O & CN(Val(W(17))) & S & Tmp & O & X '12,000,000,000,000,000 End If If L < 18 Then GoTo Ex 'Houndreds_Of_Quadrillions(100,000,000,000,000,000)''18 numbers''''''''''''''''''''''''''''''' Houndreds_Of_Quadrillions: If L > 18 And Val(W(18)) < 1 Then GoTo Zlion Tmp = "كوادرليون" X = Zeros(W, X, 18) If Val(W(16)) = 0 And Val(W(17)) = 0 Then '100,000,000,000 X = DN(Val(W(18))) & S & Tmp & O & X 'Puer Houndreds Of Quadrillions Else '110,000,000,000 '1- Houndreds Of Quadrillions & Elvenths : ..2- Else :Houndreds Of Quadrillions & Frist numbers If Val(W(17)) = 1 Then X = DN(Val(W(18))) & O & BN(Val(W(16))) & S & Tmp & O & X Else _ X = DN(Val(W(18))) & O & AN(Val(W(16))) & S & CN(Val(W(17))) & S & Tmp & O & X End If X = Replace(X, "مائتين كوادرليون", "مئتي كوادرليون") If L < 19 Then GoTo Ex 'Houndreds_Of_Quadrillions(100,000,000,000,000,000)''18 numbers''''''''''''''''''''''''''''''' Zlion: '[The end]'''Last Naming number X = "": X = "زليون" & vbCrLf & "الزليون : رقم غير محدود يفوق التسميات المعروفة" End If ''___ CLOSE IF ______________________________________________(L > 4) '''''''''''''''''''''''''''''''''Check End: '''''''''''''''''''''''''''''''''''''''''''''' Ex: Set W = Nothing X = Replace(X, O & O, O) ''Delte extra waws 'delete last waw If Len(X) > 2 Then _ If Mid(X, Len(X) - 2, 2) = " و" Or Mid(X, Len(X) - 2, 2) = "و " Then X = Left(X, Len(X) - 2) ToWordsArb = X End Function Private Function Zeros(Col As Collection, X As String, MAX As Integer) As String Dim T As Integer, I As Boolean If MAX < 1 Then Exit Function For T = 1 To Col.Count If Val(Col.Item(T)) <> 0 Then I = True: Exit For If T = MAX Then Exit For Next T If I Then Zeros = X Else Zeros = "" End Function


