ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 变化多端的TEXT函数

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2010-3-10 18:57 | 显示全部楼层
本帖已被收录到知识树中,索引项:TEXT
好贴,收藏,谢谢楼主

TA的精华主题

TA的得分主题

发表于 2010-3-10 19:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
不错!!太全面了!!

TA的精华主题

TA的得分主题

发表于 2010-3-10 22:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 子元女王 于 2010-3-10 16:46 发表
很诡异

这个结果似乎是将数值以日期时间方式解释,取秒(以及毫秒作为小数)数据,然后再加上0.5,也就是先加上500毫秒,再取秒数,一些多余小数可能是浮点计算误差

由于g有年号的特殊含义,也许Excel程序员没考 ...

再参考:
奇怪的G格式,请大家给个合理的解释

TA的精华主题

TA的得分主题

发表于 2010-3-10 22:38 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-3-11 09:13 | 显示全部楼层
原帖由 wshcw 于 2010-3-10 22:13 发表

再参考:
奇怪的G格式,请大家给个合理的解释

以下为个人猜想:
=TEXT(A16,"GG/通用格式"),对于“GG/通用格式”这种格式,我想这是一个BUG,EXECL2007中没有考虑“G/通用格式”格式前在连接上一个日期或者时间的格式,因此出现这种情况,G虽然也表示日期,但在简体版中却什么也不现实,但如果用其它日期或者时间格式,就会先显示日期或者时间再连接(&)上一个值,这个值约等于以下公式:
=MOD((MOD(MOD(A1,1)/0.0001*8.64,60)+0.5),60),有些值可能会不是完全一样,这是不是受定点数或者浮点数的影响还不是很清楚,请高手继续研究。例子见附件

奇怪的G格式.rar

11.35 KB, 下载次数: 85

TA的精华主题

TA的得分主题

发表于 2010-3-11 09:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主写得很详细啊,感谢楼主分享!

TA的精华主题

TA的得分主题

发表于 2010-3-11 10:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 子元女王 于 2010-3-10 17:38 发表
2003版没有这个问题

G/通用格式 不能和0,#等合作,不过可以和日期时间类代码放在一起,在2007版中,不知道怎么回事,与y,m,d,h,s,e,g,aaa等在一起,G/通用格式 就变成了读取+500毫秒以后的秒数 (未严格测试,只看 ...


继续猜想, 也许2007在这方面做了点小改动, 如果有日期时间类代码y,m,d,h,s,e,b,aaa等出现时,直接进入日期时间处理程序, 把原值先拆分成年月日时分秒等等,其中关于秒的数值仍然是浮点数,内存中就放在原先最初值所用的地址,而年月等其他数据占用新开辟的内存空间,这样要取值直接取就是了,如果代码中没有出现".0"部分,也就是没有毫秒部分,则一开始就给秒数再加上0.5,这样如果要取秒,直接取整就会是四舍五入后的数值。这个策略看上去不错,但是没考虑到“G/通用格式”也可以和日期时间放在一起,扫描了整个代码段,有日期类代码,但又没有".0",进入日期时间处理,且是增加500毫秒的,于是就造成了现在的情况。

TA的精华主题

TA的得分主题

发表于 2010-3-11 10:37 | 显示全部楼层
s型轨道,不用if只是用choose绕过去,另种解法。少9个字符
=CHOOSE((COLUMN()=1)+1,TEXT(CHOOSE(MOD(COLUMN(),4)+1,-(ROW()<>1)*10^9+1,ROW(),-(ROW()<>COUNTIF($A:$A,"><"))*10^9+1,COUNTIF($A:$A,"><")-ROW()+1)+COUNTIF(OFFSET($A:$A,,,,COLUMN()-1),"><"),"[<0] "),ROW()&"")

TA的精华主题

TA的得分主题

发表于 2010-3-11 11:37 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-3-11 11:38 | 显示全部楼层
好长啊。。。厉害哦!辛苦了..........
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 08:17 , Processed in 0.047132 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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