Bạn dùng UDF sau nhéXin chào GPE !
Nhờ các anh, chị viết giúp cho mình 1 macro đổi số thành số La mã. Xin cảm ơn mọi người (có file gửi kèm theo)
Function Num2Roman(ByVal N As Integer) As String
Const Digits = "IVXLCDM"
Dim I As Integer, Digit As Integer, Temp As String
I = 1
Temp = ""
Do While N > 0
Digit = N Mod 10
N = N \ 10
Select Case Digit
Case 1
Temp = Mid(Digits, I, 1) & Temp
Case 2
Temp = Mid(Digits, I, 1) & Mid(Digits, I, 1) & Temp
Case 3
Temp = Mid(Digits, I, 1) & Mid(Digits, I, 1) & _
Mid(Digits, I, 1) & Temp
Case 4
Temp = Mid(Digits, I, 2) & Temp
Case 5
Temp = Mid(Digits, I + 1, 1) & Temp
Case 6
Temp = Mid(Digits, I + 1, 1) & Mid(Digits, I, 1) & Temp
Case 7
Temp = Mid(Digits, I + 1, 1) & Mid(Digits, I, 1) & _
Mid(Digits, I, 1) & Temp
Case 8
Temp = Mid(Digits, I + 1, 1) & Mid(Digits, I, 1) & _
Mid(Digits, I, 1) & Mid(Digits, I, 1) & Temp
Case 9
Temp = Mid(Digits, I, 1) & Mid(Digits, I + 2, 1) & Temp
End Select
I = I + 2
Loop
Num2Roman = Temp
End Function
Hình như là số trong Excel chỉ chuyển được đến số 3999 hà anh ơi.Excel đã có hàm Roman đổi số rồi bạn!
' Formats a number as a roman numeral.
' Author: Christian d'Heureuse (www.source-code.biz)
Public Function FormatRoman(ByVal n As Integer) As String
If n = 0 Then FormatRoman = "0": Exit Function
' There is no roman symbol for 0, but we don't want to return an empty string.
Const r = "IVXLCDM" ' roman symbols
Dim i As Integer: i = Abs(n)
Dim s As String, p As Integer
For p = 1 To 5 Step 2
Dim d As Integer: d = i Mod 10: i = i \ 10
Select Case d ' format a decimal digit
Case 0 To 3: s = String(d, Mid(r, p, 1)) & s
Case 4: s = Mid(r, p, 2) & s
Case 5 To 8: s = Mid(r, p + 1, 1) & String(d - 5, Mid(r, p, 1)) & s
Case 9: s = Mid(r, p, 1) & Mid(r, p + 2, 1) & s
End Select
Next
s = String(i, "M") & s ' format thousands
If n < 0 Then s = "-" & s ' insert sign if negative (non-standard)
FormatRoman = s
End Function
' Writes a list of roman numerals into a text file.
' The output can be used as a "decimal to roman" conversion table.
Public Sub PrintToFile(ByVal FileName, Optional ByVal First = 1, Optional ByVal Last = 2100)
Dim fh: fh = FreeFile
Open FileName For Output As fh
Dim i As Integer
For i = First To Last
Print #fh, i & " = " & FormatRoman(i)
Next
Close #fh
End Sub
Excel đã có hàm Roman đổi số rồi bạn!
Đương nhiên... chính vậy mới có hàm tự tạo của levanduyet...Nếu tôi nhớ không lầm thì hàm này chỉ có giới hạn tại số 3999 mà thôi, từ 4000 trở lên lỗi Value!
Nếu tôi nhớ không lầm thì hàm này chỉ có giới hạn tại số 3999 mà thôi, từ 4000 trở lên lỗi Value!
ROMAN function
Converts an arabic numeral to roman, as text.
ROMAN(number,form)
Number is the Arabic numeral you want converted.
Form is a number specifying the type of roman numeral you want. The roman numeral style ranges from Classic to Simplified, becoming more concise as the value of form increases. See the example following
ROMAN(499,0)below.
Form Type
0 or omitted Classic.
1 More concise. See example below.
2 More concise. See example below.
3 More concise. See example below.
4 Simplified.
TRUE Classic.
FALSE Simplified.
Remarks
If number is negative, the #VALUE! error value is returned.
If number is greater than 3999, the #VALUE! error value is returned.
Example
Formula Description (Result)
=ROMAN(499,0) Classic roman numeral style for 499 (CDXCIX)
=ROMAN(499,1) More concise version for 499 (LDVLIV)
=ROMAN(499,2) More concise version for 499 (XDIX)
=ROMAN(499,3) More concise version for 499 (VDIV)
=ROMAN(499,4) More concise version for 499 (ID)
=ROMAN(2013,0) Classic roman numeral style for 2013 (MMXIII)
Sư phụ ơi, đừng nói vậy làm em tổn thọ!
Mọi người coi trong HELP sẽ biết tại sao như vậy!
1. các số sau viết theo số La Mã thế nào?
- 4.000
- 4.001
- 5.000
- 10.000
2. Trong hệ ghi số La Mã có các ký tự chữ cái thay cho số, theo quy ước 4 chữ cái thì đổi thành 1 chữ cái + 1 chữ cái cấp kế tiếp, . . ., Vậy xin hỏi chữ cái cấp kế tiếp của M là chữ gì?
1. Hàm của Domfootwear:
16.000 = 11.000 = 9.000 = 4.000 = 1.000 = M
5.000 = ""
2. Hàm của Lvd (không phải của em, hi hi hi):
4.000 = MMMM
5.000 = MMMMM
6.000 = MMMMMM
15.000 = MMMMMMMMMMMMMMM
30.000 = MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
...
If number is greater than 3999, the #VALUE! error value is returned.
Dạ thưa em hỏi thật, thầy vui lòng trả lời ạ, trả lời đúng câu hỏi ạ!
Roman() của Excel chỉ tới 3.999, thì em biết đọc Help ạ, còn em hỏi ngoài đời cơ.
Vậy theo anh: 4.000 = MMMM có đúng không? Nếu không đúng thì như thế nào mới đúng. Thú thiệt mấy cái này em chẳng đụng đến bao giờ.
Lê Văn Duyệt
_Xin thưa: Anh Minhthien cho em biết các số sau viết theo số La Mã thế nào ạ?
- 4.000
- 4.001
- 5.000
- 10.000
Trong hệ ghi số La Mã có các ký tự chữ cái thay cho số, theo quy ước 4 chữ cái thì đổi thành 1 chữ cái + 1 chữ cái cấp kế tiếp, . . ., Vậy xin hỏi chữ cái cấp kế tiếp của M là chữ gì ạ? Thầy Minh Thiện làm ơn nhé!
PS:
1. Hàm của Domfootwear:
16.000 = 11.000 = 9.000 = 4.000 = 1.000 = M
5.000 = ""
2. Hàm của Lvd:
4.000 = MMMM
5.000 = MMMMM
6.000 = MMMMMM
15.000 = MMMMMMMMMMMMMMM
30.000 = MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
...
Chỗ màu đỏ là 4.000 mới đúng chứ.Nếu, (nếu trên đời), nếu có ký tự tương ứng với 5.000, giả sử T, thì 5.000 = MT
Xin chào GPE !
Nhờ các anh, chị viết giúp cho mình 1 macro đổi số thành số La mã. Xin cảm ơn mọi người (có file gửi kèm theo)
Sub Romand()
For Each cls In [b3:b4000].SpecialCells(2)
cls(1, 2) = Application.Roman(cls)
Next
End Sub