如何获取 MS Excel 中单元格的显示值(对于转换为日期的文本)?

cwd*_*cwd 9 date-time worksheet-function microsoft-excel microsoft-excel-2010

如何获取 MS Excel 中单元格的显示值(对于转换为日期的文本)?

Excel 文件来源

我有一个 Excel 文件,它最初是一个 CSV 文件。目前我无权访问原始 CSV 文件。最初在 Excel 中打开 CSV 文件时,Date列中的许多单元格会自动转换。

示例值

这是Date列中一些项目的示例(间距表示左右对齐的单元格,主要是为了显示第二个日期没有转换):

展品1:

        3/1/71
12/01/1882
Fall 1988
          1993
Run Code Online (Sandbox Code Playgroud)

如果我选择其中一个单元格并右键单击并选择格式,我会得到不同的结果:

m/d/yy
General
General
General
Run Code Online (Sandbox Code Playgroud)

可能的逻辑

所以看起来 excel 没有转换 12/01/1882 日期 - 可能是因为它“太旧”了,或者可能是其他原因。

如果我选择整个列并将其更改为“常规”格式,那么它会给我这个(文本左对齐,数字右对齐):

       25993
12/01/1882
Fall 1988
        1993
Run Code Online (Sandbox Code Playgroud)

我想要的是

我想要一列,我将格式设置为“常规”或“文本”,并且它的日期会从上面的展览 1中显示出来。

我看到了这个关于使用 DataFormatter 类(看起来像 Java?)的问题以及一些使用宏和 VB 脚本的类似问题 - 但如果可能的话,我真的很想使用 excel 函数来做到这一点。

我试过的

我试过使用这些没有用的东西:

CONCATENATE- 获取日期字段,并在其前面加上一个空格
INDIRECT(ADDRESS(ROW(),5))- 间接获取值
VALUE()- 获取单元格的“值” - 与我想要的相反
TEXT()- 可以明确指定格式但仍然无法使其工作
CELL()- 可以使用获取诸如“内容”之类的单元格信息 - 没有运气,但我确实看到我也可以使用它来获取format它会告诉我单元格是显示为数字还是显示为“常规”,然后可能与IF函数以某种方式将显示为日期的数字转换回实际日期......可能吗?

复制粘贴方法

我看到的一种似乎有效的方法是选择值,将它们复制并粘贴到记事本中,然后将它们复制并粘贴回 excel(它有效地给出了显示的值 - 这就是我想要的)

唯一的问题是我想要一个函数来做到这一点,因为 Excel 工作表中有几十万行。

小智 7

一个普遍的答案:

与其试图对 CELL("format"...) 函数的结果大惊小怪,不如使用用户定义的函数直接返回单元格的 NumberFormat 属性可能更容易。

在这种情况下,表达式“=TEXT(A1,NumberFormat(A1))”会直接为您提供显示值。

要启用此功能,您需要在工作表的模块中包含以下内容:

  Public Function NumberFormat(CellRange As Range) As String

  NumberFormat = CellRange.NumberFormat

  End Function
Run Code Online (Sandbox Code Playgroud)


Sco*_*ott 5

如果您向我们展示了所有可能的格式,这应该有效:

=TEXT(A1, IF(CELL("format",A1)="D4", "m/d/yy", "General"))
Run Code Online (Sandbox Code Playgroud)

如果您有 m/d/yy 以外的日期格式,请为它们添加测试。