西门电竞孔子老婆:excel隐藏函数 数字转大写 计算两日期间月数天数

来源:百度文库 编辑:九乡新闻网 时间:2024/05/09 05:29:31

一、NUMBERSTRING
EXCEL中隐藏了一个数字转大写的函数NUMBERSTRING,但它仅支持正整数,用中文版的朋友可以试试这个函数:

语法:
=NUMBERSTRING(VALUE,TYPE)
参数:
value:要转化的数字
type:返回结果的类型,有三种:1,2,3
    NumberString(1234567890,1) = 一十二亿三千四百五十六万七千八百九十
    NumberString(1234567890,2) = 壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾
    NumberString(1234567890,3) = 一二三四五六七八九○

二、DATEDIF
语法
DATEDIF(start_date,end_date,unit)
Start_date 为一个日期,它代表时间段内的第一个日期或起始日期。日期有多种输入方法:带引号的文本串(例如 "2001/1/30")、系列数(例如,如果使用 1900 日期系统则 36921 代表 2001 年 1 月 30 日)或其他公式或函数的结果(例如,DATEVALUE("2001/1/30"))。有关日期系列数的详细信息,请参阅 NOW。
End_date 为一个日期,它代表时间段内的最后一个日期或结束日期。
Unit 为所需信息的返回类型。
Unit 返回
"Y" 时间段中的整年数。
"M" 时间段中的整月数。
"D" 时间段中的天数。
"MD" start_date 与 end_date 日期中天数的差。忽略日期中的月和年。
"YM" start_date 与 end_date 日期中月数的差。忽略日期中的日和年。
"YD" start_date 与 end_date 日期中天数的差。忽略日期中的年。

说明
Microsoft Excel 按顺序的系列数保存日期,这样就可以对其进行计算。如果工作簿使用 1900 日期系统,则 Excel 会将 1900 年 1 月 1 日保存为系列数 1。而如果工作簿使用 1904 日谙低常 ?Excel 会将 1904 年 1 月 1 日保存为系列数 0,(而将 1904 年 1 月 2 日保存为系列数 1)。例如,在 1900 日期系统中 Excel 将 1998 年 1 月 1 日保存为系列数 35796,因为该日期距离 1900 年 1 月 1 日为 35795 天。请查阅 Microsoft Excel 如何存储日期和时间。

Excel for Windows 和 Excel for Macintosh 使用不同的默认日期系统。有关详细信息,请参阅 NOW。
示例
DATEDIF("2001/1/1","2003/1/1","Y") 等于 2,即时间段中有两个整年。
DATEDIF("2001/6/1","2002/8/15","D") 等于 440,即在 2001 年 6 月 1 日和 2002 年 8 月 15 日之间有 440 天。
DATEDIF("2001/6/1","2002/8/15","YD") 等于 75,即在 6 月 1 日与 8 月 15 日之间有 75 天,忽略日期中的年。
DATEDIF("2001/6/1","2002/8/15","MD") 等于 14,即开始日期 1 和结束日期 15 之间的差,忽略日期中的年和月。
=DATEDIF(B2,TODAY(),"y")
=DATEDIF(B2,TODAY(),"ym")
=DATEDIF(B2,TODAY(),"md")
=DATEDIF(B2,TODAY(),"y")&"年"&DATEDIF(B2,TODAY(),"ym")&"月"&DATEDIF(B2,TODAY(),"md")&"日"

-----------------------------------------------------------------------------------------------------------------

  Excel中我们在单元格输入了阿拉伯数字之后,比如“1234567890”,忽然想起应该将它改成中文的大写格式,这时怎么办?删掉此内容重新一个字一个字地输入“壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾”?显然太麻烦了。假若并不是一个数字,而是很长的一列单元格,那我们还不麻烦死?

不过别担心,在Excel中这不是个难题,至少有以下的两种方法可供您选择:

  一、单元格格式法

  选中那些数字所在的单元格,点击右键,在弹出菜单中选择“设置单元格格式”命令,打开“设置单元格格式”对话框。点击“数字”选项卡,在左侧的“分类”列表中选择“特殊”,然后在右侧的“类型”列表中点击“中文大写数字”,如图1所示。确定后就可以了。若点击上方的那个“中文小写数字”,可以得到“一十二亿三千四百五十六万七千八百九十”。很简单吧?(如下图)选择“中文大写数字”

  二、函数更正法

  在Excel中还有一个隐含的函数可以解决这个问题。比如A1单元格中是数字“1234567890”,那么我们只要在其它单元格中输入公式“=NUMBERSTRING(A1,2)”。回车后就可以得到“壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾”了。如果我们将第二个参数“2”改成“1”或者“3”,那么我们就会得到“一十二亿三千四百五十六万七千八百九十”和“一二三四五六七八九○”。

  再假如这个问题不是发生在Excel中,而是在Word表格中,那又该如何处理呢?当然,一种选择是将表格数据复制到Excel中,转换好了之后再复制到Word表格中。不过,我们还可以选择直接在Word中完成此项任务的。

  选中表格中的数字“1234567890”,点击功能区“插入”选项卡“符号”功能组“编号”按钮,打开“编号”对话框。在“编号类型”列表中选择“壹,贰,叁”项目,如图2所示,确定后就可以得到“壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾”了。如果在列表中选中“一,二,三”项目,那么可以得到“一十二亿三千四百五十六万七千八百九十”。

  当然,如果您有域的编辑感兴趣的话,还可以在域符号中直接输入域代码“= 1234567890 \* CHINESENUM3”,或“= 1234567890 \* CHINESENUM2”,然后按下“Alt+F9”快捷键,就可以分别得到“一十二亿三千四百五十六万七千八百九十”或“壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾”了。要是输入域代码“= 1234567890 \* CHINESENUM3”,按下““Alt+F9”快捷键”就可以得到“一二三四五六七八九○”了。也挺简单的。

------------------------------------------------------------------------------------------------

大写金额有小数点的怎么处理啊?

在单元格中输入 12345.67 以大写格式显示时是 壹万贰仟叁佰肆拾伍.陆柒 如何把小点改成元再把角分加上呢?

假定你要在A1输入阿拉佰数字,B1转换成中文大写金额(含元角分),请在B1单元格输入如下公式就可以了
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(IF(A1>-0.5%,,"负")&TEXT(INT(FIXED(ABS(A1))),"[dbnum2]")&TEXT(RIGHT(FIXED(A1),2),"[dbnum2]元0角0分;;元"&IF(ABS(A1)>1%,"整",)),"零角",IF(ABS(A1)<1,,"零")),"零元",),"零分","整")

---------------------------------------------------------------------------------------------------

把EXECL中小写数字转换成中文大写?且要求分位。

要分位,可以一个单元格显示一位,且不要“万、仟、佰、拾、角、分”这样的单位。具体如图所示。

数字金额所在位置为P2。
万位公式:=IF(INT($P$2/10000)=0,"×",MID("壹贰叁肆伍陆柒捌玖",INT($P$2/10000),1))

千位:=IF((INT($P$2/1000)-INT($P$2/10000)*10)=0,"×",MID("壹贰叁肆伍陆柒捌玖",(INT($P$2/1000)-INT($P$2/10000)*10),1))

百位:=IF((INT($P$2/100)-INT($P$2/1000)*10)=0,"×",MID("壹贰叁肆伍陆柒捌玖",(INT($P$2/100)-INT($P$2/1000)*10),1))

十位:=IF((INT($P$2/10)-INT($P$2/100)*10)=0,"×",MID("壹贰叁肆伍陆柒捌玖",(INT($P$2/10)-INT($P$2/100)*10),1))

元位=IF((INT($P$2/1)-INT($P$2/10)*10)=0,"×",MID("壹贰叁肆伍陆柒捌玖",(INT($P$2/1)-INT($P$2/10)*10),1))

角位:=IF((INT($P$2/0.1)-INT($P$2/100)*1)=0,"×",MID("壹贰叁肆伍陆柒捌玖",(INT($P$2/0.1)-INT($P$2/100)*1),1))

分位:=IF((INT($P$2/0.01)-INT($P$2/100)*0.1)=0,"×",MID("壹贰叁肆伍陆柒捌玖",(INT($P$2/0.01)-INT($P$2/100)*0.1),1))

----------------------------------------------------------------------------------------------------------

通过分析我收集到的二十几个公式,发现比较牛,适合我口味的公式有三个,在此我将其列出。

公式一:
SUBSTITUTE(SUBSTITUTE(IF(A1<0,"负","")&TEXT(TRUNC(ABS(ROUND(A1,2))),"[DBNum2]")&"元"&IF(ISERR(FIND(".",ROUND(A1,2))),"",TEXT(RIGHT(TRUNC(ROUND(A1,2)*10)),"[DBNum2]"))&IF(ISERR(FIND(".0",TEXT(A1,"0.00"))),"角","")&IF(LEFT(RIGHT(ROUND(A1,2),3))=".",TEXT(RIGHT(ROUND(A1,2)),"[DBNum2]")&"分",IF(ROUND(A1,2)=0,"","整")),"零元零",""),"零元","")

公式二:
CONCATENATE(IF(A1<0,"负",""),TEXT(IF(TRUNC(A1)=0,"",TRUNC(ABS(A1))),"[DBNum2]"),IF(INT(TRUNC(A1))=0,"","元"),TEXT(IF(OR(ABS(A1)<0.1,TRUNC(A1)=A1),"",RIGHT(TRUNC(A1*10),1)),"[DBNum2]"),IF(RIGHT(TRUNC(A1*10),1)="0","","角"),TEXT(IF(RIGHT(TRUNC(A1*100),1)="0","",RIGHT(TRUNC(A1*100),1)),"[DBNum2]"),IF(RIGHT(TRUNC(A1*100),1)="0","","分"))

公式三:
IF(ROUND(A1,2)=0,"",IF(ROUND(ABS(A1),2)>=1,TEXT(INT(ROUND(ABS(A1),2)),"[DBNum2]")&"元","")&IF(RIGHT(TEXT(A1,".00"),2)*1=0,"整",IF(RIGHT(TEXT(A1,".00"),4)*1>=1,IF(RIGHT(TEXT(A1,".00"),2)*1>9,"","零"),IF(ROUND(ABS(A1),2)>=1,"零",""))&IF(RIGHT(TEXT(A1,".00"),2)*1>9,TEXT(LEFT(RIGHT(TEXT(A1,".00"),2)),"[DBNum2]")&"角","")&IF(RIGHT(TEXT(A1,".00"))*1>0,TEXT(RIGHT(TEXT(A1,".00")),"[DBNum2]")&"分","整")))

根据这个思路,我“组装”了下面两个公式。

公式四:
IF(A1=0,"",IF(ABS(A1)<0.995,"",TEXT(INT(ROUND(ABS(A1),2)),"[DBNum2]")&"元")&IF(RIGHT(TEXT(A1,".00"),2)*1=0,IF(ABS(A1)<0.005,"","整"),TEXT(IF(ABS(A1)<0.095,"",LEFT(RIGHT(TEXT(A1,".00"),2))),"[dbnum2]")&IF(LEFT(RIGHT(TEXT(A1,".00"),2))*1=0,"","角")&IF(RIGHT(TEXT(A1,".00"))*1=0,"整",TEXT(RIGHT(TEXT(A1,".00")),"[dbnum2]")&"分")))

公式五:
IF(A1=0,"",IF(ABS(A1)<1,"",TEXT(TRUNC(ABS(A1)),"[DBNum2]")&"元")&IF(RIGHT(TRUNC(A1*100),2)*1=0,IF(ABS(A1)<0.01,"","整"),IF(ABS(A1)<0.1,"",TEXT(RIGHT(TRUNC(A1*10)),"[dbnum2]"))&IF(RIGHT(TRUNC(A1*10))*1=0,"","角")&IF(RIGHT(TRUNC(A1*100))*1=0,"整",TEXT(RIGHT(TRUNC(A1*100)),"[dbnum2]")&"分")))
公式四是四舍五入公式,公式五则是截尾公式。两个公式的结构其实是一样的,只是使用了不同的函数。下面用公式四来说明。

  TEXT(INT(ROUND(ABS(A1),2)),"[DBNum2]")&"元"用来处理整数部分,考虑到纯小数及舍入问题,增加一个判断ABS(A1)<0.995,用0.995,即保证了正常的舍入,又避免了出现0.9945也进行舍入的错误。

  用RIGHTB(TEXT(A1,".00"),2)*1=0来判断是不是纯整数,是就输出“整”,后面就不用处理了。因为TEXT函数输出的是文本值,所以在这里有两种处理方法,一是就是本式,二是RIGHTB(TEXT(A1,".00"),2)="00"。

  LEFT(RIGHT(TEXT(A1,".00"),2))是取出角位数,增加一个判断ABS(A1)<0.095是为了在只有分票的情况下角位避免出现“零”的字样,0.095也是考虑了尾数的舍入问题。

  IF(LEFT(RIGHT(TEXT(A1,".00"),2))*1=0,"","角"),角位是0输出空,否则输出“角”。同样,这里的判断表达式也可改为LEFT(RIGHT(TEXT(A1,".00"),2))="0
"
  用RIGHT(TEXT(A1,".00"))取出分位数,分位为零输出“整”,否则输出分位数。

  对于负数,如果一定要用“负XXXXXX”的形式,则直接在第二个判断前加上“IF(A1<0,"负","")&”。

  还有网友提出来说万位为零时不输出零不符合规范,为此我专门去查了一下相关规定。结果如下:

  大写金额中间有“0”时,大写金额要写“零”字;小写金额中间连续有几个“0”时,大写金额中间可以只写一个“零”字;小写金额万位或元位是“ 0”,或者数字中间连续有几个“0”,万位、元位也是“0”,但千位、角位不是“0”时,大写金额中可以只写一个“零”字,也可以不写“零”字。

  所以上述公式在当万位为零而千位不为零时,以不输出零的方式处理,应该是符合规范的。也许正是EXCEL采取这种样式的原因。当然,如果遵照习惯非要加上这个零字也不是不可能。只不过要增加一点公式复杂度罢了。

  在一个数中,万会出现几次?不管是万、十万、百万、千万,这个万就出现一次,如果是万万则是亿,如果是万亿又是兆,万兆呢?已经超出EXCEL的处理能力了。所以答案是万字在大写金额中只可能出现一次,且只出现在整数部分。即然是这样,用SUBSTITUTE()函数就能解决问题。即判断当万位为零而千位不为零时,用“万零”来替换“万”,其它情况下不进行替换。因为EXCEL只有在这种情况下不会输出“零”。

  在四舍五入公式中,因为还要考虑尾数舍入问题,判断使用了四舍五入函数ROUND(),公式四的输出整数的部分公式改为:

IF(AND(RIGHT(INT(ROUND(ABS(A1),2)/10000))="0",RIGHT(INT(ROUND(ABS(A1),2)/1000))<>"0"),SUBSTITUTE(TEXT(INT(ROUND(ABS(A1),2)),"[DBNum2]"),"万","万零"),TEXT(INT(ROUND(ABS(A1),2)),"[DBNum2]"))

  而截断公式不用考虑尾数舍入问题,直接用TRUNC()取万位和千位数来判断。相应地公式五的整数部分亦改为:

IF(AND(RIGHT(TRUNC(ABS(A1)/10000))="0",RIGHT(TRUNC(ABS(A1)/1000))<>"0"),SUBSTITUTE(TEXT(TRUNC(ABS(A1)),"[DBNum2]"),"万","万零"),TEXT(TRUNC(ABS(A1)),"[DBNum2]"))

  为了一个我认为不是很必要的“零”字使公式臃肿了许多,而我喜欢简单清晰的公式,所以不愿在正式公式中采用。