我一直在尝试更多地了解excel单元格,特别是它们的数据类型 . 如果有人对细节感兴趣,我的调查在下面的编号点 . 我的结论标记为A到D.我真的很感兴趣是否有人要添加任何内容 .
答:每个excel单元都有一个属性,用于定义它将存储的数据的预期“数据类型” . 存储在单元格中的数据值也具有“数据类型”属性,该属性不必与单元格“数据类型”属性相同 . (数据类型为常规,文本或日期) . (Cell的数据类型与使用“Format Cell”>“Number tab”“format category”形成集合的单元格不同,但它是相关的
B.当数据输入单元格时,给予数据值的数据类型继承自单元格的数据类型(当数据值可以转换为单元格数据类型时) . 如果数据在开头包含'字符,则会将文本数据类型分配为值的数据类型,而不管单元格数据类型如何 .
C.使用Excel复制>粘贴(仅限值)将数据值从一个单元格复制到另一个单元格时,也会复制数据类型 . (这有点疯狂,因为在粘贴特殊情况下没有覆盖它 . 你可以使用PasteSpecial> Raw选项)
注意:如果从文本文档(例如01234)粘贴数据,则使用默认粘贴将导致文本0123转换为数字 . 使用Value Only粘贴,01234将粘贴一个数据类型为text的值 - 如果单元格的数据类型是文本 .
D.在具有文本数据类型的单元格中输入 =SUM(1,2)
会导致显示公式而不计算公式 . 即它被视为文本数据 .
请注意,此VBA函数可用于转换存储在单元格中的数值的数据类型,以使文本数据类型具有相同的字符 . 只需使用公式引用要转换的单元格即可 . Yu可以使用copy> paste special(仅限值)将转换后的值移动到单元格中,然后将其存储为值 .
Public Function ConvertValueToHaveTextDataType(Avalue As Variant) As String
ConvertValueToHaveTextDataType = CStr(Avalue)
End Function
这就是我得出这些结论的原因 .
我一直在试验并发现:
-
使用
QueryTables.TextFileColumnDataTypes
将数据加载到工作表单元格中的参数为TextFileColumnDataTypes
,可以为其分配xlTextFormat, xlGeneralFormat
和某些日期格式 . 没有数字选项 . 所以使用xlGeneralFormat
来加载数字数据似乎是"how it's done" . -
基于此,我假设每个Excel单元格都有“数据类型”(即常规,文本或日期) .
-
“格式单元格”将更改数据的显示方式,但也会更改数据输入时的行为方式,即更改单元格格式也可以更改单元格“数据类型” . 当单元格格式为TEXT时,输入“01234”将导致输入的数据存储为文本,并保留前导“0” . 当单元格具有GENERAL格式时,输入“0123”将使其存储为数字123(即注意0被删除) .
-
考虑将TEXT格式的单元格和“0123”存储为文本值 . 将单元格的格式更改为GENERAL或NUMBER不会更改单元格中存储的字符,但会向单元格添加绿色标记,提供“弹出警告”,通知您“存储为文本的数字” . (粘贴特殊,乘法可用于将这些转换为数字)
-
这就是它变得奇怪的地方 .
如果您在按下ENTER键时编辑存储在“常规格式单元格”中的文本值“0123”,则“0”将被删除,它将变为123,这正是您所期望的 . 但是,如果您复制“0123”单元格并使用“VALUE ONLY”选项粘贴它,数据将粘贴为“0123”,如果将其粘贴到数字格式单元格中,则会发生同样的情况 . 因此,当您使用Excel复制>粘贴(仅限值)复制数据值时,也会复制数据类型 . (这很坚果!) .
如果将123.12存储为数字从数字格式或常规格式单元格粘贴到文本格式单元格中,则值仍为123.12,单元格类型保留为文本,不显示弹出警告,我不确定数据类型是什么 Value 是 . 但是,如果您编辑单元格并按RETURN键输入123.12,您会收到一个警告标签并弹出“数字存储为文本”
-
如果要将数字0123输入到具有NUMERIC格式的单元格中,并将其存储为文本"0123",则可以输入它,因为'0123 the '表示excel应该使用数据类型的文本存储值 . 这很有用 .
请注意,如果您要使用LEFT({acell stroing '0123},1)
它会返回"0" . 哪个好 . 另请注意,如果您复制并粘贴(仅限值),则不再为单元格显示存储'0123 into a general format cell, the '的数字格式单元格,并且您会收到绿色弹出警告"number stored as text" . 哪个好,但值得注意 . -
公式
=TEXT("123","0###")
使用文本数据类型创建值 . 如果复制并粘贴结果,它将成为具有文本数据类型的数据值 . -
公式T很有用,因为它可用于查找存储在单元格中的值的数据类型是否为TEXT .
=T(0123) = "" =T("0123") = 0123
-
如果引用公式中将单元格值加1的单元格,则单元格数据类型和值的数据类型对计算没有影响 . 数据值隐式地转换为必要的数字 .
-
正如您所料,当将数据粘贴到单元格中时,如果您选择匹配目标格式,并且您粘贴数据的单元格使用TEXT格式,则任何带有前导“0”的数据都将保留0 .
有人读过这篇文章吗?
1 回答
如果要在数字上显示前一个零,假设您在小数点前有一个固定的位数,则可以自定义单元格格式,例如'0000.00' . 此示例将始终显示小数点前的四位数字,之后显示两位数字;它有其局限但对例如非常有用 . 产品代码 . 如果您对7位数代码进行标准化,请将自定义格式设置为“0000000”,并将“0001234”保持正确(不是“1234”)并仍然被识别为数字 .