脚本金额AHKvba大小写

AHK word vba excel 脚本实现大小写金额互转

网络资讯 2024-11-21 11:29:43 1

导读

先说使用方法小写转大写复制小写金额后运行代码会自动转成大写金额并放到剪贴板里面大写转小写复制大写金额后运行代码会自动转成小写金额并放到剪贴板里面金额中阿互转(InputStr,To:="z");To:中|阿{InputStr:=trim(InputStr)if(RegExMatch(Inp……

先说使用方法

小写转大写

复制小写金额后运行代码会自动转成大写金额 并放到剪贴板里面

大写转小写

复制大写金额后运行代码会自动转成小写金额 并放到剪贴板里面

金额中阿互转(InputStr,To:="z") ;To: 中|阿

{

InputStr:=trim(InputStr)

if (RegExMatch(InputStr,"^[.d]+$") and instr(To,"z"))

{

arrNum:=StrSplit(InputStr,".")

IP:=arrNum[1]

DP:=arrNum[2]

if(strlen(IP)>17) ;设定20位,

return InputStr

OutputStr:=""

数字转换:={0 : "零",1 : "壹",2 : "贰",3 : "叁",4 : "肆",5 : "伍",6 : "陆",7 : "柒",8 : "捌",9 : "玖"}

小数单位:={1 : "角",2 : "分",3 : "毫",4 :"厘"}

整数单位:={1 : "元",2 : "拾",3 : "佰",4 : "仟",5 : "万",6 : "拾",7 : "佰",8 : "仟",9 : "亿",10:"拾",11:"佰",12:"仟",13:"兆",14:"拾",15:"佰",16:"仟",17:"万",18 : "拾",19 : "佰",20 : "仟"}

DllCall("msvcrt.dll\_wcsrev", "Ptr", &IP, "CDECL")

Loop,parse,% IP

OutputStr := 数字转换[A_LoopField] 整数单位[A_index] OutputStr

loop,3

{

OutputStr:=RegExReplace(OutputStr,"零(拾|佰|仟)","零")

OutputStr:=RegExReplace(OutputStr,"零{1,3}","零")

OutputStr:=RegExReplace(OutputStr,"零(?=(兆|亿|万|元))","")

OutputStr:=RegExReplace(OutputStr,"亿零万","亿")

OutputStr:=RegExReplace(OutputStr,"兆零亿","兆")

}

if(DP)

{

OutputStr .="零"

loop,parse,% DP

{

if(A_index>5)

break

if(A_loopfield=0)

continue

OutputStr .= 数字转换[A_LoopField] 小数单位[A_Index]

}

}

else

{

OutputStr .= "整"

}

return OutputStr

}

else if (regexmatch(InputStr,"^[角分毫厘零一二两三四五六七八九十百千万亿兆壹贰叁肆伍陆柒捌玖拾佰仟元整]+$") and instr(To,"a"))

{

InputStr:=StrReplace(InputStr,"整")

arrStr:=StrSplit(InputStr,"元")

IP:=arrStr[1]

DP:=arrStr[2]

DllCall("msvcrt.dll\_wcsrev", "Ptr", &IP, "CDECL") ;先反转

中文转换:={角:1000,分:100,毫:10,厘:1,零:0, 一:1, 二:2, 两:2, 三:3, 四:4, 五:5, 六:6, 七:7, 八:8, 九:9, 十:10, 百:100, 千:1000, 万:10000, 亿:100000000, 兆:1000000000000,壹:1, 贰:2, 两:2, 叁:3, 肆:4, 伍:5, 陆:6, 柒:7, 捌:8, 玖:9, 拾:10, 佰:100, 仟:1000}

num:=0

x:=1

old:=1

loop,parse,IP ;经过前面的反转,相当于从后面逐字parse

{

v:=中文转换[A_LoopField] ;获取对应的数字,或者倍数

if (v>=10 and v>old) ;如果是倍数,且该倍数是上升的,就用这个倍数,基准值同时改变。

old:=x:=v

else if (v>=10 and v

x:=v*old

else ;当前字符不是倍数的话,累加

num:=num+x*v

}

if(DP)

{

小数部分:=""

前置数值:=0

loop,parse,DP

{

v:=中文转换[A_LoopField] ;获取对应的数字,或者倍数

if (A_loopfield~="角|分|毫|厘")

{

小数部分+=前置数值 * v

前置数值:=0

}

else

前置数值:=v

}

num:=num "`." 小数部分

}

return num

}

else

return InputStr

}

; 获取剪贴板内容

Clipboard := ClipboardAll

; 判断剪贴板内容类型并进行金额转换

if (Clipboard ~= "^[.d]+$") {

; 如果是小写金额,则转成大写金额

result := 金额中阿互转(Clipboard, "z")

} else if (Clipboard ~= "^[角分毫厘零一二两三四五六七八九十百千万亿兆壹贰叁肆伍陆柒捌玖拾佰仟元整]+$") {

; 如果是大写金额,则转成小写金额

result := 金额中阿互转(Clipboard, "A")

} else {

MsgBox, 剪贴板内容不是有效的金额格式

return

}

; 将最终结果放回剪贴板

Clipboard := result

复制代码 再给大家发一个word vba 代码的

使用说明:选中小写金额运行代码后 自动在下一行输入转换的大写金额

Sub 小写金额转大写金额()

Dim s As Double

s = Selection.Range

Debug.Print NumToChar(s)

Selection.EndKey Unit:=wdLine

Selection.TypeParagraph

Selection.TypeText Text:=NumToChar(s)

End Sub

Function NumToChar(Number As Double) As String

Dim strNum As String

Dim arrNum(), arrChar(), arrUnits(), arr()

Dim k As Integer

Temp = Abs(Round(Number, 2)) * 100

strNum = CStr(Temp)

arrChar = Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖")

arrUnits = Array("分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "兆", "拾", "佰", "仟", "京")

For i = Len(strNum) To 1 Step 1

ReDim Preserve arr(k)

arr(k) = Mid(strNum, i, 1)

If arr(k) = 0 Then

If InStr("元万亿兆", arrUnits(k)) Then

arr(k) = arrUnits(k)

Else

arr(k) = "零"

End If

Else

arr(k) = arrChar(arr(k)) & arrUnits(k)

End If

k = k + 1

Next

strNum = ""

For i = UBound(arr) To LBound(arr) Step 1

strNum = strNum & arr(i)

Next

If Round(Number, 0) = Number Then

strNum = Left(strNum, InStr(strNum, "元")) & "整"

ElseIf Round(Number, 1) = Number Then

strNum = Left(strNum, InStr(strNum, "角")) & "整"

End If

Do While InStr(strNum, "零零") > 0

strNum = Replace(strNum, "零零", "零")

Loop

strNum = Replace(strNum, "零兆", "兆")

strNum = Replace(strNum, "零亿", "亿")

strNum = Replace(strNum, "零万", "万")

strNum = Replace(strNum, "零元", "元")

strNum = Replace(strNum, "兆亿", "兆")

strNum = Replace(strNum, "兆万", "兆")

strNum = Replace(strNum, "亿万", "亿")

If Number < 0 Then

strNum = "负" & strNum

ElseIf Number = 0 Then

strNum = "零元整"

End If

NumToChar = strNum

End Function

复制代码

如果想用excel

CONCATENATE 函数

SUBSTITUTE(SUBSTITUTE(IF(ROUND(G14,2),TEXT(G14,";负")&TEXT(INT(ABS(G14)+0.5%),"[dbnum2]G/通用格式元;;")&TEXT(RIGHT(TEXT(G14,".00"),2),"[dbnum2]0角0分;;整"),),"零角",IF(G14^2<1,,"零")),"零分","整")复制代码