cwd*_*cwd 9 date-time worksheet-function microsoft-excel microsoft-excel-2010
如何获取 MS 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)
如果您向我们展示了所有可能的格式,这应该有效:
=TEXT(A1, IF(CELL("format",A1)="D4", "m/d/yy", "General"))
Run Code Online (Sandbox Code Playgroud)
如果您有 m/d/yy 以外的日期格式,请为它们添加测试。
归档时间: |
|
查看次数: |
60593 次 |
最近记录: |