vba - 将单元格中的数据设置为显示的日期

时间:2016-03-31 21:38:38

标签: excel vba excel-vba

可能是一个简单的问题,我只是无法确定我的数字,因为我仍然不完全理解如何接近不同的"层"在excel中(与正在显示的内容相比,单元格中实际存在的数据...例如,日期)

我的细胞内有以下数据

10/17/2014
10/18/2014
10/19/2014
10/20/2014

我运行了以下vba代码,希望重新格式化该数据:

Sheet1.Range("C2", "C1000").NumberFormat = "dd-mmm-yyyy"

这使我的数据显示为:

17-Oct-2014
18-Oct-2014
19-Oct-2014
20-Oct-2014

这实际上是我想要的。唯一的问题是,如果我点击实际单元格内部,数据仍然是 10/18/2014 格式。

现在从我的理解"格式"只会改变数据的显示方式。我似乎无法在网上找到如何获取屏幕上显示的内容并将单元格的值更改为正在显示的内容。我认为这是一个受欢迎的"问题,并反复询问,也许我的搜索技能刚刚关闭,我无法找到文章。任何帮助,将不胜感激。谢谢。

我已经读过,我可以使用" Paste Special",但这需要我格式化单元格,然后手动复制和粘贴值,这不是我想要的。我希望在VBA内完全自动化。

1 个答案:

答案 0 :(得分:1)

试试这个:

Sheet1.Range("C1:C1000").Value = Sheet1.Evaluate("""'"" & INDEX(TEXT(C1:C1000,""dd-mmm-yyyy""),)")

开头的'会将输出强制为文本。

你也可以这样做:

Sheet1.Range("C1:C1000").NumberFormat = "@"
Sheet1.Range("C1:C1000").Value = Sheet1.Evaluate("INDEX(TEXT(C1:C1000,""dd-mmm-yyyy""),)")

这会将格式化为日期的数字转换为看起来像日期的文本。换句话说,如果对这些单元格的任何引用或数学公式需要将它们转换回数字。