VB / VBA - Converti il ​​numero romano in arabo

Queste funzioni consentono la conversione di numeri espressi in "lettere" romane (MCMLXIX) in formato numerico arabo (1969). Queste procedure sono disponibili come funzione personalizzata per Excel e in VBA per un modulo utente. Il codice VBA è compatibile con VB6.

Funzione per Excel

Incolla il codice qui sotto in un modulo generale, ad es. Module1.

 Dim Rm As String Funzione pubblica RomainArabe (C As Range) As Integer Dim TB Dim Arab As Integer Dim i As Byte, A As Integer, Utb As Integer If C = "" Quindi RomainArabe = 0: Exit Function ReDim TB (0) Applicazione .Volatile i = 1: Utb = 1: Arabo = 0 Rm = Sostituisci (C, "", "") 'supprime les espaces éventuels Rm = UCase (Rm)' incontrato in majuscule si nécessaire While i <= Len (Rm) 'traite le lettere une ReDim Preserve TB (Utb) A = NBlettre (i) TB (Utb) = A * ValeurLettre (Mid (Rm, i, 1)) Debug.Print TB (Utb) i = i + A Utb = Utb + 1 Wend ReDim Preserve TB (Utb): i = 1 While i <UBound (TB) If TB (i) <TB (i + 1) Then Arab = Arab + TB (i + 1) - TB (i) i = i + 2 Else Arab = Arab + TB (i) i = i + 1 End If Debug.Print Arab Wend RomainArabe = Arab End Funzione Funzione NBlettre (Deb As Byte) Come Byte Dim i As Integer, L As String NBlettre = 1 L = Mid (Rm, Deb, 1) Per i = Deb + 1 A Len (Rm) Se Medio (Rm, i, 1) = L Quindi NBlettre = NBlettre + 1 Else Esci Funzione Termina Se Successivo Fine Funzione Funzione ValeurLettre ( L As String ) Integer Dim Romain, Arabe, i As Byte Romain = Array ("I", "V", "X", "L", "C", "D", "M") Arabe = Array (1, 5, 10, 50, 100, 500, 1000) Per i = 0 A 6 Se L = Romain (i) Allora ValeurLettre = Arabe (i) Esci Funzione Fine Se Avanti i Fine Funzione 

Esempio di una formula da inserire in un foglio di calcolo di Excel

 '= RomainArabic (A3) 

Codici VBA / VB6

Incollare il codice sottostante in un modulo generale, ad es. Module1 per VBA o in Module.bas per VB6

 Opzione Esplicita Dim Rm As String Funzione pubblica TraduitRomain (Rm) As Integer Dim TB Dim Arab As Integer Dim i As Byte, A As Integer, Utb As Integer ReDim TB (0) i = 1: Utb = 1 Rm = Sostituisci (Rm, "", "") 'supprime les espaces éventuels Rm = UCase (Rm)' incontrato in majuscule si nécessaire While i <= Len (Rm) 'traite les lettres une une ReDim Preserve TB (Utb) A = NBlettre (i) TB (Utb) = A * ValeurLettre (Mid (Rm, i, 1)) Debug.Print TB (Utb) i = i + A Utb = Utb + 1 Wend ReDim Preserve TB (Utb): i = 1 While i <UBound (TB) Se TB (i) <TB (i + 1) Then Arab = Arab + TB (i + 1) - TB (i) i = i + 2 Else Arab = Arab + TB (i) i = i + 1 End If Debug.Print Arab Wend TraduitRomain = Arab End Function Funzione privata NBlettre (Deb As Byte) As Byte Dim i As Integer, L As String NBlettre = 1 L = Mid (Rm, Deb, 1) Per i = Deb + 1 To Len (Rm) If Mid (Rm, i, 1) = L Quindi NBlettre = NBlettre + 1 Else Exit Funzione End If Next End Function Funzione privata ValeurLettre (L As String) Come intero Dim Romain, Arabe, i As Byte Romain = Matrice ("I", "V", "X", "L", "C", "D", "M") Arabe = Array (1, 5, 10, 50, 100, 500, 1000) Per i = 0 a 6 se L = Romain (i) Then ValeurLettre = Arabe (i) Esci Funzione Termina se Avanti i Fine Funzione 

Esempio di chiamata di funzione:

 Sub AppelEnArabic () Dim R As String R = "MMMCMIC" MsgBox R & "en chiffre arabe donnerait" & TraduitRomain (R) End Sub 

Articolo Precedente Articolo Successivo

I Migliori Consigli