ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 为什么给单元格赋值文本型数字后会自动转换成数值型?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-10-13 22:50 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
突然发现这个问题,感觉想不通,比如Cells(1,1).Value="123.00",然后检查A1单元格值得类型,TypeName(Cells(1,1).Value),结果显示是Double类型。奇怪的是,Cells.Value属性不是Variant类型的吗,给Variant类型赋值带双引号的数字,正常情况都是String类型才对,为什么这里就会变成Double类型呢,难道给单元格赋值时,VBA自带转换功能?

TA的精华主题

TA的得分主题

发表于 2019-10-13 22:56 | 显示全部楼层
Cells(1, 1).Value = "'123.00"

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-13 23:45 | 显示全部楼层
谢谢2楼的指点,加上单引号确实强制转换为String类型,但是我的疑问并不是怎么使类型不自动,而是为什么会转换成数值类型,因为按我的理解Value属性既然是Variant类型,应该会自动识别赋值的变量类型,既然我带了双引号,它为什么还会给我转换成数值型呢。
就好像我设置:
dim a as variant
a = "123.00"
msgbox typename(a)
这时候返回的是String,偏偏这个a替换成单元格时,返回的就是Double

不过我刚刚发现当把单元格数字格式设置成文本型时,返回的类型就String了,我之前一直以为设置单元格格式这个功能只是改变了数值的显示结果,比如A1单元格的值是123.456,不论设置格式使它显示的1位小数,2位小数,还是3位小数,结果都不会改变保存在其中的真正数据123.456。但是现在看来这个想法不对,设置单元格格式或许对同类型变量只是改变显示结果,但是对于数值型和文本型变量实际上是转换后重新对单元格赋值的。
比如说在A1单元格格式是数值或常规的情况下,对其赋值:Cells(1,1).Value = "123456123456123456”,因为这个值大于Double类型的最大范围,所以单元格最后显示的是123456123456123000,再把A1单元格的单元格类型设置成文本型,其显示结果并没有变回123456123456123456,这说明在单元格储存的结果并不是不变的,至少在文本和数值之间转换时是相互替代的。
再比如说不通过VBA代码,而是直接在文本型单元格中输入123456123456123456,再把单元格格式变成数值型,然后再变回文本型,此时单元格显示结果是123456123456123000,同样可以说明在这一过程中单元格保存的数据发生了改变。
所以我猜,当Cells(1,1).Value="123.00"中,VBA首先把"123.00"赋值给单元格Value属性,然后系统根据单元格格式类型转换,如果单元格是数值类型,就将123转换结果重新赋值给单元格A1,从而使我明明一开始赋值的为文本型数据,结果保存在A1中的是数值型数据。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-26 14:15 , Processed in 0.033323 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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