ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 353|回复: 8

[已解决] [求助]如何快速对工作表中的人民币金额拆分成对应面值的人民币券别

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-31 20:33 | 显示全部楼层 |阅读模式
本帖最后由 Tang-t 于 2024-6-1 12:01 编辑


如下图在A1单元格中为人民币金额,需在红色方框区域,将人民币转换为相对应的券别,按照最大面额来,如例子中7875.33,按照一百的面额78张,50面额的一张,20的一张。如果人民币金额为7885.33,则按照一百的78张,50的一张,20的1张,10元的一张,5元的一张,能否使用公式来处理?
Snipaste_2024-05-31_20-26-24.png
01.rar (8.7 KB, 下载次数: 5)


TA的精华主题

TA的得分主题

发表于 2024-5-31 22:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 edwin11891 于 2024-5-31 23:45 编辑

先拉个火车:
F3:
  1. =LET(n,ROUND(A1*100,0),nw,LEN(n),s,REGEXP(n,"."),b,IF(nw>=11,s,IF(nw=10,HSTACK("¥",s),LET(a,MAKEARRAY(1,10-nw,LAMBDA(x,y,"")),c,HSTACK(a,"¥",s),c))),b)
复制代码


面值使用数字,显示为大写面值。
B16,下拉。B15稍不同。
  1. =IFERROR(1/(1/INT((A$1-SUMPRODUCT(B$15:B15,A$15:A15))/A16)),"")
复制代码

微信图片_20240531205255.png

人民币元角分填空.zip

11.92 KB, 下载次数: 4

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-1 09:25 | 显示全部楼层
edwin11891 发表于 2024-5-31 22:08
先拉个火车:
F3:

感谢老师帮助!
我打开表格修改金额后,区域2,4出现了报错,经测试A1金额为779.30、779.40、779.80、779.90时,区域3的位置显示不正确,能帮忙看下吗 6.110.png

TA的精华主题

TA的得分主题

发表于 2024-6-1 10:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Tang-t 发表于 2024-6-1 09:25
感谢老师帮助!
我打开表格修改金额后,区域2,4出现了报错,经测试A1金额为779.30、779.40、779.80、779 ...

经检查,公式没有问题,版本的原因,需要WPS最新版(支持REGEXP函数)。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-1 12:00 | 显示全部楼层
edwin11891 发表于 2024-6-1 10:45
经检查,公式没有问题,版本的原因,需要WPS最新版(支持REGEXP函数)。

好,谢谢老师~

TA的精华主题

TA的得分主题

发表于 2024-6-1 12:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
PixPin_2024-06-01_12-15-06.png
新版WPS 或 M365
  1. F3=LEFT(RIGHT(" ¥"&A1*100,SEQUENCE(,11,11,-1)),1)
复制代码
  1. A6=LET(d,DROP(REDUCE(A1,{100,50,20,10,5,1},LAMBDA(x,y,VSTACK(x,HSTACK(y,QUOTIENT(TAKE(x,-1,-1),y),MOD(TAKE(x,-1,-1),y))))),1,-1),e,DROP(REDUCE("",BYROW(d,LAMBDA(x,PRODUCT(x))),LAMBDA(x,y,VSTACK(x,LEFT(RIGHT(" ¥"&y,SEQUENCE(,6,6,-1)),1)))),1),HSTACK(d,e))
复制代码
  1. I6=LET(d,DROP(REDUCE(MOD(A1,1),{0.5,0.1,0.01},LAMBDA(x,y,VSTACK(x,HSTACK(y,QUOTIENT(TAKE(x,-1,-1),y),ROUND(MOD(TAKE(x,-1,-1),y),2))))),1,-1),e,DROP(REDUCE("",BYROW(d,LAMBDA(x,PRODUCT(x))),LAMBDA(x,y,VSTACK(x,LEFT(RIGHT(" ¥"&y*100,SEQUENCE(,6,6,-1)),1)))),1),HSTACK(d,e))
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-1 13:00 | 显示全部楼层
本帖最后由 edwin11891 于 2024-6-1 13:10 编辑

就是因为A6:A11、I6:I11不能动,所以才带来些许麻烦。
另外,可能粘贴时系统的问题,公式中“ &165; ”应该是" ¥"之误。

TA的精华主题

TA的得分主题

发表于 2024-6-1 13:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

修改了一下公式,用TOROW(MIDB(n,SEQUENCE(nw),1))把REGEXP(n,".")替换掉了,避免版本问题。
另外,使用公式内直接构建面值的方法,{100,50,20,10,5,1}。
---------------------------------------------------------------
刚弄完,6楼已经有更便捷的公式,我就不贴了。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-1 20:32 | 显示全部楼层
本帖最后由 edwin11891 于 2024-6-1 22:02 编辑

在6楼的基础上,将结果中票面值设置为楼主示例样式,并提供了两种最终方案:
1. 所有面值,计算结果不含时,显示为0,A6:P11区域;
2. 不含的面值,显示为空(楼主示例样式),A17:P22区域。
图中绿色框为上述两种方式,均可作为标准模板随意选用。
(请注意下面公式中的“Y”实际为人民币大写符号,由于放入公式栏系统会出错,暂改为Y)
F3:

  1. =LEFT(RIGHT(" Y"&ROUND(A1,2)*100,SEQUENCE(,11,11,-1)),1)
复制代码


A6:
  1. =LET(d,DROP(REDUCE(A1,{100,50,20,10,5,1},LAMBDA(x,y,VSTACK(x,HSTACK(y,QUOTIENT(TAKE(x,-1,-1),y),MOD(TAKE(x,-1,-1),y))))),1,-1),e,DROP(REDUCE("",BYROW(d,LAMBDA(x,PRODUCT(x))),LAMBDA(x,y,VSTACK(x,LEFT(RIGHT(" Y"&y,SEQUENCE(,6,6,-1)),1)))),1),sFace,TAKE(d,,1),sNum,CHOOSECOLS(d,2),nFace,IF(sFace=10,"拾元",TEXT(sFace,"[DBNum2]")&"元"),HSTACK(nFace,sNum,e))
复制代码

I6:
  1. =LET(d,DROP(REDUCE(MOD(A1,1),{0.5,0.2,0.1,0.01},LAMBDA(x,y,VSTACK(x,HSTACK(y,QUOTIENT(TAKE(x,-1,-1),y),ROUND(MOD(TAKE(x,-1,-1),y),2))))),1,-1),e,DROP(REDUCE("",BYROW(d,LAMBDA(x,PRODUCT(x))),LAMBDA(x,y,VSTACK(x,LEFT(RIGHT(" Y;"&y*100,SEQUENCE(,6,6,-1)),1)))),1),sFace,TAKE(d,,1),sNum,CHOOSECOLS(d,2),nFace,IF(sFace>=0.1,TEXT(RIGHT(INT(sFace*10),1),"[dbnum2]0角;;"),TEXT(RIGHT(INT(sFace*100),1),"[dbnum2]0分;;")),HSTACK(nFace,sNum,e))
复制代码

------------------------------------------------------------------------------------
A17:
  1. =LET(d,DROP(REDUCE(A1,{100,50,20,10,5,1},LAMBDA(x,y,VSTACK(x,HSTACK(y,QUOTIENT(TAKE(x,-1,-1),y),MOD(TAKE(x,-1,-1),y))))),1,-1),e,DROP(REDUCE("",BYROW(d,LAMBDA(x,PRODUCT(x))),LAMBDA(x,y,VSTACK(x,IF(y=0,MAKEARRAY(1,6,LAMBDA(m,n,"")),LEFT(RIGHT(" Y;"&y,SEQUENCE(,6,6,-1)),1))))),1),sFace,TAKE(d,,1),sNum,CHOOSECOLS(d,2),nFace,IF(sFace=10,"拾元",TEXT(sFace,"[DBNum2]")&"元"),HSTACK(nFace,IF(sNum=0,"",sNum),e))
复制代码

I17:
  1. =LET(d,DROP(REDUCE(MOD(A1,1),{0.5,0.2,0.1,0.01},LAMBDA(x,y,VSTACK(x,HSTACK(y,QUOTIENT(TAKE(x,-1,-1),y),ROUND(MOD(TAKE(x,-1,-1),y),2))))),1,-1),e,DROP(REDUCE("",BYROW(d,LAMBDA(x,PRODUCT(x))),LAMBDA(x,y,VSTACK(x,IF(y=0,MAKEARRAY(1,6,LAMBDA(m,n,"")),LEFT(RIGHT(" Y;"&y*100,SEQUENCE(,6,6,-1)),1))))),1),sFace,TAKE(d,,1),sNum,CHOOSECOLS(d,2),nFace,IF(sFace>=0.1,TEXT(RIGHT(INT(sFace*10),1),"[dbnum2]0角;;"),TEXT(RIGHT(INT(sFace*100),1),"[dbnum2]0分;;")),HSTACK(nFace,IF(sNum=0,"",sNum),e))
复制代码





微信图片_20240601202454.png

人民币元角分填空2.zip

11.92 KB, 下载次数: 4

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 17:28 , Processed in 0.040132 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表