日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

人民幣大寫(xiě)轉(zhuǎn)換函數(shù)

 庋藏天下 2012-09-18
Function N2RMB(M)
    y = Int(Round(100 * Abs(M)) / 100)
    j = Round(100 * Abs(M) + 0.00001) - y * 100
    f = (j / 10 - Int(j / 10)) * 10
    A = IIf(y < 1, "", Application.Text(y, "[DBNum2]") & "元")
    b = IIf(j > 9.5, Application.Text(Int(j / 10), "[DBNum2]") & "角", IIf(y < 1, "", IIf(f > 1, "零", "")))
    c = IIf(f < 1, "整", Application.Text(Round(f, 0), "[DBNum2]") & "分")
    N2RMB = IIf(Abs(M) < 0.005, "", IIf(M < 0, "負(fù)" & A & b & c, A & b & c))
End Function

另外一個(gè)函數(shù):
Function dx(M) '一條語(yǔ)句163個(gè)字符
    dx = Replace(Replace(Replace(Join(Application.Text(Split(Format(M, " 0. 0 0;負(fù) 0. 0 0;   ")), ["[DBnum2]"&{0,"","元0角;;元零","0分;;整"}]), a), "零元零", a), "零元", a), "零整", "整")
End Function
代碼解析:
代碼中使用了Replace()、Join()、Split()、Format()等4個(gè)VBA函數(shù),以及1個(gè)工作表函數(shù)Text()。

Join()函數(shù):返回一個(gè)字符串,該字符串是通過(guò)連接某個(gè)數(shù)組中的多個(gè)子字符串而創(chuàng)建的。這與Split函數(shù)的作用完全相反。
格式:Join(list[,delimiter])
list:必需的。包含被連接子字符串的一維數(shù)組。
delimiter:可選的。在返回字符串中用于分隔子字符串的字符。如果忽略該項(xiàng),則使用空格來(lái)分隔子字符串。如果該項(xiàng)是零長(zhǎng)度字符串(""),則返回的字符串中,各子串之間沒(méi)有分隔符。
代碼中用變量a代替Join()的第二參數(shù)。因a的初始值為空,故此參數(shù)為空字符(""),表明返回的字符串中,各子串間無(wú)分隔。
例如:
Join([{"Join","using","spaces"}]) 返回結(jié)果是:"Join using spaces"
Join([{"Join","using","emptys"}], a) 返回結(jié)果是:"Joinusingemptys"

Split()函數(shù):返回一個(gè)下標(biāo)從零開(kāi)始的一維數(shù)組,它包含指定數(shù)目的子字符串。
格式:Split(expression[,delimiter[,limit[,compare]]])
expression:必需的。包含子字符串和分隔符的字符串表達(dá)式 。如果expression是一個(gè)長(zhǎng)度為零的字符串(""),Split則返回一個(gè)空數(shù)組,即沒(méi)有元素和數(shù)據(jù)的數(shù)組。
delimiter:可選的。用于標(biāo)識(shí)子字符串邊界的字符串字符。如果忽略,則使用空格字符(" ")作為分隔符。如果delimiter是一個(gè)長(zhǎng)度為零的字符串,則返回的數(shù)組僅包含一個(gè)元素,即完整的expression字符串。
limit:可選的。要返回的子字符串?dāng)?shù),忽略則默認(rèn)-1,表示返回所有的子字符串。
compare:可選的。數(shù)字值,表示判別子字符串時(shí)使用的比較方式。忽略則默認(rèn)1,執(zhí)行文字比較。

Format()函數(shù):根據(jù)有效的命名表達(dá)式來(lái)對(duì)指定的表達(dá)式進(jìn)行格式化。
格式:Format(expression[, format[, firstdayofweek[, firstweekofyear]]])
各參數(shù)含義如下:
expression:必要參數(shù)。任何有效的表達(dá)式。
format:可選參數(shù)。有效的命名表達(dá)式或用戶自定義格式表達(dá)式。
firstdayofweek:可選參數(shù)。常數(shù),表示一星期的第一天。
firstweekofyear:可選參數(shù)。常數(shù),表示一年的第一周。

代碼中format函數(shù)的第二參數(shù)是" 0. 0 0;負(fù) 0. 0 0;   ",格式中的0為占位符,每個(gè)0前邊都有一個(gè)空格,第二個(gè)分號(hào)(;)后邊有三個(gè)空格。第一個(gè)0表示整數(shù)部分的數(shù)字,第二個(gè)0表示小數(shù)十分位數(shù)字,第三個(gè)0表示小數(shù)百分位數(shù)字。第一個(gè)0前邊的空格,表示這個(gè)空格前邊還有一個(gè)空字符chr(0),換句話說(shuō),也就是空字符與整數(shù)數(shù)字之間有一個(gè)空格;第二個(gè)0前邊的空格,表示整數(shù)數(shù)字與十分位數(shù)字之間有一個(gè)空格;第三個(gè)0前邊的空格,表示十分位數(shù)字與百分位數(shù)字之間有一個(gè)空格。格式字串由分號(hào)(;)分成3段,第一段為M>0時(shí)的格式,第二段為M<0時(shí)的格式,比如-10.2將被格式化為“負(fù) 10. 2 0”;第三段為M=0時(shí)的格式,這里用3個(gè)空格代替,其目的是將四個(gè)空字符(由這3個(gè)空格分隔的)送到數(shù)字?jǐn)?shù)組中。這里,F(xiàn)ormat 函數(shù)的參數(shù)居然和Text函數(shù)類(lèi)似,也可以體現(xiàn)“正負(fù)零”3種狀態(tài)(text是“正負(fù)零文本”4種狀態(tài)),但不支持條件參數(shù)。
例如:
若M=123.09,則:
format(M," 0. 0 0;負(fù) 0. 0 0;   ")=" 123. 0 9"
Split(Format(M, " 0. 0 0;負(fù) 0. 0 0;   "))={"",123,0,9}
上式中,因各子串之間是由空格分隔的,所以Split()的第二參數(shù)可省略,即默認(rèn)分隔符為空格。
若M=-123.09,則:
format(M," 0. 0 0;負(fù) 0. 0 0;   ")="負(fù) 123. 0 9"
Split(Format(M, " 0. 0 0;負(fù) 0. 0 0;   "))={"負(fù)",123,0,9}

代碼中工作表函數(shù)Text()第一參數(shù)是數(shù)組,第二參數(shù)(即格式參數(shù))也是數(shù)組。兩個(gè)數(shù)組中的元素是逐一對(duì)應(yīng)的關(guān)系?;ɡㄌ?hào){}表示工作表常量數(shù)組,方括號(hào)[]在這里表示VBA的常量數(shù)組。實(shí)際上,表達(dá)式["[DBnum2]"&{0, "", "元0角;;元零", "0分;;整"}]的計(jì)算結(jié)果即為{"[DBnum2]0", "[DBnum2]", "[DBnum2]元0角;;元零", "[DBnum2]0分;;整"}。

表達(dá)式Text(Split(Format(M, " 0. 0 0;負(fù) 0. 0 0;   ")), ["[DBnum2]"&{0,"","元0角;;元零","0分;;整"}])   屬于Text()函數(shù)的高級(jí)應(yīng)用,
可用3列縱向數(shù)組表示如下:
若M = 123.09                                                                                   若M = ─0.05
數(shù)字?jǐn)?shù)組         格式數(shù)組                             Text()返回結(jié)果數(shù)組        數(shù)字?jǐn)?shù)組         格式數(shù)組                              Text()返回結(jié)果數(shù)組
(空字符)        "[DBnum2]0"                        (空字符)                          負(fù)                  "[DBnum2]0"                         負(fù)
123               "[DBnum2]"                          壹佰貳拾叁                      0                   "[DBnum2]"                           零
0                   "[DBnum2]元0角;;元零"        元零                                0                   "[DBnum2]元0角;;元零"         元零
9                   "[DBnum2]0分;;整"               玖分                                5                   "[DBnum2]0分;;整"                伍分

然后用Join()函數(shù)將結(jié)果數(shù)組連接起來(lái)。Join()的第二參數(shù)用變量a代替,變量a的初始值為空,表示子串之間無(wú)分隔。
當(dāng)M=123.09,則Join后的大寫(xiě)金額為“壹佰貳拾叁元零玖分”,
當(dāng)M=─0.05,則Join后的大寫(xiě)金額為“負(fù)零元零伍分”。
最后,將不符合大寫(xiě)規(guī)則的“零元零”、“零元”替換為空,將“零整”替換為“整”。
若源數(shù)據(jù)M=0,則大寫(xiě)結(jié)果顯示為空白。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多