VB / VBA - Menukar nombor Roman ke bahasa Arab

Fungsi-fungsi ini membolehkan penukaran angka-angka yang dinyatakan dalam huruf "Roman" (MCMLXIX) dalam format nombor Arab (1969). Prosedur ini tersedia sebagai fungsi tersuai untuk Excel dan dalam VBA untuk Userform. Kod VBA serasi dengan VB6.

Fungsi untuk Excel

Tampalkan kod di bawah dalam modul umum, misalnya Module1.

 Dim Rm Sebagai Fungsi Umum String RomainArabe (C As Range) Sebagai Integer Dim TB Dim Arab Sebagai Integer Dim i By Byte, A Sebagai Integer, Utb Sebagai Integer Jika C = "" Kemudian RomainArabe = 0: Keluar Fungsi ReDim TB (0) Permohonan .Volatile i = 1: Utb = 1: Arab = 0 Rm = Replace (C, "", "") 'supprime les espaces éventuels Rm = UCase (Rm) 'traite les lettres une a une ReDim Preserve TB (Utb) A = NBlettre (i) TB (Utb) = A * ValeurLettre (Mid (Rm, i, 1)) Debug.Print TB (Utb) i = i + = Utb + 1 Wend ReDim Preserve TB (Utb): i = 1 Sementara i <TB (i + 1) Kemudian Arab = Arab + TB (i + 1) - TB (i) i = i + 2 Else Arab = Arab + TB (i) i = i + 1 Akhir Jika Debug.Print Arab Wend RomainArabe = Fungsi Akhir Fungsi Arab NBlettre (Deb As Byte) Sebagai Byte Dim i As Integer, L As String NBlettre = 1 L = Mid (Rm, Deb, 1) Untuk i = Deb + 1 Untuk Len (Rm) Jika Mid (Rm, i, 1) = L Kemudian NBlettre = NBlettre + 1 Fungsi Akhir Keluar Lain Fungsi Fungsi Akhir Akhir ValeurLettre L As String ) Sebagai Integer Dim Romain, Arab, i Sebagai Byte Romain = Array ("I", "V", "X", "L", "C", "D", "M") Arabe = Array (1, 5, 10, 50, 100, 500, 1000) Untuk i = 0 Ke 6 Jika L = Romain (i) Kemudian ValeurLettre = Arabe (i) 

Contoh rumus yang akan diletakkan di dalam spreadsheet Excel

 '= RomainArabic (A3) 

Kod VBA / VB6

Tampalkan kod di bawah dalam modul umum, misalnya Module1 untuk VBA atau dalam Module.bas untuk VB6

 Opsyen Explicit Dim Rm Sebagai Fungsi Umum String TraduitRomain (Rm) Sebagai Integer Dim TB Dim Arab Sebagai Integer Dim i By Byte, A Sebagai Integer, Utb Sebagai Integer ReDim TB (0) i = 1: Utb = 1 Rm = Ganti (Rm, "", "") 'supprime les espaces éventuels Rm = UCase (Rm)' met en majuscule si nécessaire While i <= Len (Rm) 'traite les lettres une ae ReDim Preserve TB (Utb) TB (Utb) = A * ValeurLettre (Mid (Rm, i, 1)) Debug.Print TB (Utb) i = i + A Utb = Utb + 1 Wend ReDim Preserve TB (Utb) (TB) Jika TB (i) <TB (i + 1) Kemudian Arab = Arab + TB (i + 1) - TB (i) i = i + 2 Akhir Jika Debug.Print Arab Wend TraduitRomain = Fungsi Akhir Arab Fungsi Swasta NBlettre (Deb As Byte) Sebagai Byte Dim i As Integer, L Sebagai String NBlettre = 1 L = Mid (Rm, Deb, 1) Untuk i = Deb + 1 To Len (Rm) Jika Mid (Rm, i, 1) = L Kemudian NBlettre = NBlettre + 1 Else Exit Function End If Next End Function Function Function ValeurLettre (L As String) As Integer Dim Romain, = Array ("I", "V", "X", "L", "C", "D", "M") Arabe = Array (1, 5, 10, 50, 100, 500, 1000) i = 0 ke 6 Jika L = Romain (i) Kemudian ValeurLettre = Arabe (i) Akhir Keluar Fungsi Jika Seterusnya i Akhir Fungsi 

Contoh panggilan fungsi:

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

Artikel Sebelumnya Artikel Seterusnya

Tip-Tip Utama