我一直在尝试更多地了解 Excel 单元格,特别是它们的数据类型。如果有人对细节感兴趣,我的调查位于下面的编号点中。我的结论被标记为 A 到 D。我真的很感兴趣是否有人有什么可以补充的。
答:每个 Excel 单元格都有一个属性,用于定义它将存储的数据的预期“数据类型”。存储在单元格中的数据值还具有“数据类型”属性,该属性不必与单元格“数据类型”属性相同。 (数据类型为常规、文本或日期)。 (单元格的数据类型与使用“设置单元格格式”>“数字选项卡”“格式类别”设置的单元格格式不同,但相关
B. 当数据输入单元格时,赋予数据值的数据类型继承自单元格的数据类型(当数据值可以转换为单元格数据类型时)。如果数据开头包含 ' 字符,则会导致将文本数据类型分配为值的数据类型,而不管单元格数据类型如何。
C. 当您使用 Excel 复制 > 粘贴(仅限值)将数据值从一个单元格复制到另一个单元格时,数据类型也会被复制。 (这有点疯狂,因为在特殊粘贴中没有对此进行覆盖。您可以使用 PasteSpecial>Raw 选项来实现)
注意:如果您从文本文档(例如01234)粘贴数据,则使用默认粘贴将导致文本0123 转换为数字。使用仅值粘贴,01234 将粘贴一个数据类型为文本的值 - 如果单元格的数据类型是文本。
D、进入=SUM(1,2)
插入具有文本数据类型的单元格会导致显示公式但不计算公式。即它被视为文本数据。
请注意,此 VBA 函数可用于将单元格中存储的数字值的数据类型转换为具有相同字符的文本数据类型。只需引用要使用公式转换的单元格即可。您可以使用复制>特殊粘贴(仅限值)将转换后的值移动到单元格中,以便将其存储为值。
Public Function ConvertValueToHaveTextDataType(Avalue As Variant) As String
ConvertValueToHaveTextDataType = CStr(Avalue)
End Function
这就是我得出这些结论的原因。
我一直在尝试并发现:
使用将数据加载到工作表单元格中QueryTables.TextFileColumnDataTypes
有一个参数TextFileColumnDataTypes
可以分配的xlTextFormat, xlGeneralFormat
和一些日期格式。没有数字选项。所以使用xlGeneralFormat
加载数字数据似乎是“它是如何完成的”。
基于此,我假设每个 Excel 单元格都有一个“数据类型”(即常规、文本或日期)。
“设置单元格格式”将更改数据的显示方式,同时也会更改输入数据时它们的行为方式,即更改单元格格式也可以更改单元格的“数据类型”。当单元格格式为文本时,输入“01234”将使输入的数据存储为文本,并保留前导“0”。当单元格具有 GENERAL 格式时,输入“0123”将导致其存储为数字 123(即注意删除了 0)。
考虑一个具有 TEXT 格式的单元格,并且“0123”存储为文本值。将单元格的格式更改为 GENERAL 或 NUMBER 不会更改单元格中存储的字符,但会向单元格添加一个绿色标记,提供“弹出警告”,通知您“数字存储为文本”。 (粘贴特殊,乘法可用于将它们转换为数字)
这就是奇怪的地方。
如果您在按 ENTER 键时编辑存储在“常规格式单元格”中的文本值“0123”,则“0”将被删除,并变为 123,这正是您所期望的。但是,如果您复制“0123”单元格并使用“仅值”选项进行粘贴,则数据将粘贴为“0123”,如果将其粘贴到数字格式单元格中,也会发生同样的情况。因此,当您使用 excel copy>Paste(Values Only) 复制数据值时,数据类型也会被复制。 (这太疯狂了!)。
如果您将数字或通用格式单元格中存储为数字的 123.12 粘贴到文本格式单元格中,则该值仍为 123.12 并且单元格类型仍为文本,不会显示弹出警告,我不确定该单元格的数据类型是什么值是。但是,如果您编辑单元格并按 RETURN 键输入 123.12,您会收到警告标签并弹出窗口显示“数字存储为文本”
更复杂的是,如果您想在 NUMERIC 格式的单元格中输入数字 0123,并让它存储文本“0123”,您可以将其输入为“0123”,表示 excel 应以文本数据类型存储该值。
这很有用。
请注意,如果您要使用LEFT({acell stroing '0123},1)
它将返回“0”。这没关系。另请注意,如果您将存储“0123”的数字格式单元格复制并粘贴(仅限值)到通用格式单元格中,则该单元格将不再显示“”,并且您会收到绿色弹出警告“数字存储为文本”。这是好的,但值得注意。
公式=TEXT("123","0###")
创建一个文本数据类型的值。如果复制并粘贴结果,它将成为文本数据类型的数据值。
公式 T 很有用,因为它可用于确定存储在单元格中的值的数据类型是否为 TEXT。=T(0123) = "" =T("0123") = 0123
如果您在公式中引用单元格并将单元格值加 1,则单元格数据类型和值的数据类型对计算没有影响。数据值被隐式转换为必要的数字。
正如您所期望的,将数据粘贴到单元格中时,如果您选择匹配目标格式并且要将数据粘贴到的单元格使用 TEXT 格式,则任何带有前导“0”的数据都将保留 0。
有人读到这里了吗?