首页 文章

Excel仅使用值粘贴特殊值,还将值的数据类型与值一起复制到目标单元格中

提问于
浏览
-2

我一直在尝试更多地了解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 回答

  • 0

    如果要在数字上显示前一个零,假设您在小数点前有一个固定的位数,则可以自定义单元格格式,例如'0000.00' . 此示例将始终显示小数点前的四位数字,之后显示两位数字;它有其局限但对例如非常有用 . 产品代码 . 如果您对7位数代码进行标准化,请将自定义格式设置为“0000000”,并将“0001234”保持正确(不是“1234”)并仍然被识别为数字 .

相关问题