学以致用-Excel Arabic函数(将阿拉伯数字转换为罗马数字)的VBA实现
2017-12-12 17:20
507 查看
看到的资料中使用了罗马字序号(XVI),比较好奇这个序号对应的阿拉伯数字是多少。
于是,百度了一下,学到了两个新的Excel函数:ROMAN()和ARABIC(),可以实现罗马数字(I, II, III ...)与阿拉伯数字(1, 2, 3, ...)的相互转换。
问题是,在我的Excel 2016中,ARABIC函数似乎不存在(出现了#NAME#错误)。
所以,让我们来使用VBA实现一个类似于ARABIC函数功能吧。
运行这段代码,在输入框中输入要转换的罗马字,即可得到对应的阿拉伯数字。
源码如下:
Sub ArabicFunction()
'
' Convert a Roman number to Arabic number (from 1 to 3999)
'
'
Application.ScreenUpdating = False
ActiveSheet.Select
Range("A1").Value = 1
Range("A1").Select
Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
Step:=1, Stop:=3999, Trend:=False
Range("B1").Select
ActiveCell.FormulaR1C1 = "=ROMAN(RC[-1])"
Range("B1").Select
Selection.AutoFill Destination:=Range("B1:B3999")
Range("B1:B3999").Select
Range("B1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("C1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
Range("D1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("C1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
ActiveWorkbook.Names.Add Name:="vl_arabic", RefersToR1C1:= _
"=R1C3:R3999C4"
ActiveWindow.SmallScroll Down:=-9
Range("F1").Select
ActiveCell.FormulaR1C1 = "Roman"
Range("F1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("F2").Select
ActiveCell.FormulaR1C1 = "Arabic"
Range("F2").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight2
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0
End With
Range("F2").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 15773696
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("G1").Select
ActiveCell.FormulaR1C1 = "V"
Range("G2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-1]C,vl_arabic,1,FALSE)"
Range("G2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-1]C,vl_arabic,2,FALSE)"
Range("G2").Select
Application.ScreenUpdating = True
End Sub
于是,百度了一下,学到了两个新的Excel函数:ROMAN()和ARABIC(),可以实现罗马数字(I, II, III ...)与阿拉伯数字(1, 2, 3, ...)的相互转换。
问题是,在我的Excel 2016中,ARABIC函数似乎不存在(出现了#NAME#错误)。
所以,让我们来使用VBA实现一个类似于ARABIC函数功能吧。
运行这段代码,在输入框中输入要转换的罗马字,即可得到对应的阿拉伯数字。
源码如下:
Sub ArabicFunction()
'
' Convert a Roman number to Arabic number (from 1 to 3999)
'
'
Application.ScreenUpdating = False
ActiveSheet.Select
Range("A1").Value = 1
Range("A1").Select
Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
Step:=1, Stop:=3999, Trend:=False
Range("B1").Select
ActiveCell.FormulaR1C1 = "=ROMAN(RC[-1])"
Range("B1").Select
Selection.AutoFill Destination:=Range("B1:B3999")
Range("B1:B3999").Select
Range("B1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("C1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
Range("D1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("C1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
ActiveWorkbook.Names.Add Name:="vl_arabic", RefersToR1C1:= _
"=R1C3:R3999C4"
ActiveWindow.SmallScroll Down:=-9
Range("F1").Select
ActiveCell.FormulaR1C1 = "Roman"
Range("F1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("F2").Select
ActiveCell.FormulaR1C1 = "Arabic"
Range("F2").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight2
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0
End With
Range("F2").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 15773696
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("G1").Select
ActiveCell.FormulaR1C1 = "V"
Range("G2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-1]C,vl_arabic,1,FALSE)"
Range("G2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-1]C,vl_arabic,2,FALSE)"
Range("G2").Select
Application.ScreenUpdating = True
End Sub
相关文章推荐
- Java实现的求解经典罗马数字和阿拉伯数字相互转换问题示例
- Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
- php实现阿拉伯数字和罗马数字相互转换的方法
- JavaScript实现1-4000内阿拉伯数字转换为罗马数字
- kotlin实现罗马数字和阿拉伯数字转换
- 怎么实现金额转换,将阿拉伯数字金额转换成中国传统形式,例如1011变成一千零一拾一元整?
- 阿拉伯数字(1到4000)转化为罗马数字的javascript实现
- 阿拉伯数字转换成罗马数字
- 将阿拉伯数组转换成为罗马数字
- JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
- python实现将英文单词表示的数字转换成阿拉伯数字的方法
- Roman to Integer:转换罗马数字到阿拉伯数字
- 阿拉伯数字转换成罗马数字
- 将1到1000的阿拉伯数字转换为罗马数字
- java实现中文数字与阿拉伯数字互相转换
- java实现 阿拉伯数字转换为汉字数字 算法
- java实现 阿拉伯数字转换为汉字数字 算法
- java实现中文数字与阿拉伯数字互相转换
- python中将阿拉伯数字转换成中文的实现代码
- C#实现阿拉伯数字(小写金额)到大写中文(大写金额)的转换