Excel VBA中 单元格格式和数据类型的关系
打开单元格格式对话框,有如下格式常规、数值、货币、会计专用、日期、时间、百分百、分数、科学计数、文本、特殊、自定义问题1:我一直想知道这些个格式和我们在VBA中使用的数据...
打开单元格格式对话框,有如下格式常规、数值、货币、会计专用、日期、时间、百分百、分数、科学计数、文本、特殊、自定义
问题1:
我一直想知道这些个格式和我们在VBA中使用的数据类型(Long Integer Double String等)的关系
当我们用手动输入或者代码向单元格内输入数据的时候,他们最终到底是以什么样的数据类型存储的
用代码从单元格中提取数据,文本格式和数值格式单元格中提取的数据显然是不同的,那么意味着单元格格式和和真正存储类型之间肯定存在着某种关系
比如数值意味着Double,文本意味着String,那其他的一些格式如百分比、分数都是用什么数据类型存储的呢??
问题2:
另外,当我们更改一个单元格的格式的时候,单元格内的数据类型并不会马上更改,要激活后才能实现最终的更改,那么面对一个别人传给我的工作表,我怎么断定其中数据类型呢,总不能一个个激活把? 展开
问题1:
我一直想知道这些个格式和我们在VBA中使用的数据类型(Long Integer Double String等)的关系
当我们用手动输入或者代码向单元格内输入数据的时候,他们最终到底是以什么样的数据类型存储的
用代码从单元格中提取数据,文本格式和数值格式单元格中提取的数据显然是不同的,那么意味着单元格格式和和真正存储类型之间肯定存在着某种关系
比如数值意味着Double,文本意味着String,那其他的一些格式如百分比、分数都是用什么数据类型存储的呢??
问题2:
另外,当我们更改一个单元格的格式的时候,单元格内的数据类型并不会马上更改,要激活后才能实现最终的更改,那么面对一个别人传给我的工作表,我怎么断定其中数据类型呢,总不能一个个激活把? 展开
展开全部
单元格里的数据类型系统是根据数据内容确定的,比如:你将A列单元格格式设为保留两位的数值型,当你在A1输入 5 时,它就显示为5.00,如果输入 ABC,它就不会变成数值型,而是文本型,如果将文本改为数字后,又回到你设置的保留两位小数格式。所以单元格设置格式只能对能转换的数据有效。(当你设置为文本型后,所有输入字符都能转换为文本,可以理解为文本型才是单元格真正能设置的格式)
在VBA中的引用单元格数据时,数据类型由VBA中确定,当数据能转换时就直接赋值,不能转换时出现数据类型不匹配错误。举例来说,在单元格中输入4.56 数据,格式设为文本型,当在VBA中引用时,赋给整数型Long Integer结果是 5(自动四舍五入),Double型结果为 4.56,String型结果是"4.56"。
实际中不必太在意数据类型,VBA运算时会自动转换数据,必要时才用函数进行类型转换。
在VBA中的引用单元格数据时,数据类型由VBA中确定,当数据能转换时就直接赋值,不能转换时出现数据类型不匹配错误。举例来说,在单元格中输入4.56 数据,格式设为文本型,当在VBA中引用时,赋给整数型Long Integer结果是 5(自动四舍五入),Double型结果为 4.56,String型结果是"4.56"。
实际中不必太在意数据类型,VBA运算时会自动转换数据,必要时才用函数进行类型转换。
更多追问追答
追问
我所在行业,对数据要求精确在小数点三位,别人给我一份数据,像上面提到的,由于我无法判定数据真实类型,上千行数值类型的数据,假如其中仅混有一条文本数据,而我又是直接复制粘贴到自己的工作表中,那么那一条文本数据就依然存在,这样就导致在状体栏显示的合计就是错的,即使用公式比如Subtotal也是不会合计那条文本数据,而且还不会提示错误
追答
这样的话可用VBA解决。例如你将以下代码粘贴到你的工作表代码区,在粘贴其他数据时都会将数值型文本转换成数值
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim Ra As Range
For Each Ra In Target
If Ra.Value = Val(Ra) And Not IsEmpty(Ra) Then Ra = Val(Ra)
Next
Application.EnableEvents = True
End Sub
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询