复制/粘贴完全按照显示的date? 不一定是格式,但它们是以可视方式显示的

我似乎无法弄清楚如何用正在显示的内容覆盖我的date。

例如,显示的是06/01/2016日,但实际数据显示为01/06/2016 。 我想在那里的date是2016年6月1日(这是什么显示)。 更改单元格的格式并没有帮助,因为我在date之后正在做一些公式,所以实际上需要让Excel有正确的date。

我有大约10000个这样的date,其中显示的date正是我想要的,但是实际的公式“倒过来”。

从本质上讲,我只想复制该列(或运行一个子),将单元格字面显示的内容放入单元格中。

在这里输入图像说明

什么样的作品是这样做的,但它只适用于那些具有“倒退”date的单元格,基本上把一天当作一个月,将月份当成一天。

=DATE(YEAR(C1),DAY(C1),MONTH(C1))

尽pipedate实际上是正确的,但是我不想让它改变:

在这里输入图像说明

所以,最好的办法就是用显示的内容覆盖单元格。

或者, IF语句是什么,我可以用它来检查显示的date是否是我想要的,如果是这样的话,否则使用=DATE(YEAR(),DAY(),MONTH()) “trick “?

我也试过=IF(DAY(C2)>12,DATE(YEAR(C2),DAY(C2),MONTH(C2)),C2)但是这不起作用,因为它会在01/06/201606/01/2016

我可能会忽略一些简单的东西,我一直在盯着这个一个小时左右…任何想法/想法都很感激!

假设从C1C100C中的date看起来是正确的。 (所以如果你看到06/12/2017你希望是6月12 而不是12月6

试试这个简短的macros:

 Sub dateFixer() Dim ary(1 To 100) As String Dim rng As Range, r As Range Dim i As Long Set rng = Range("C1:C100") i = 1 For Each r In rng ary(i) = r.Text i = i + 1 Next r rng.Clear rng.NumberFormat = "mm/dd/yyyy" i = 1 For Each r In rng r.Value = ary(i) i = i + 1 Next r End Sub 

一个非常干净的解决scheme是使用CELL()函数。

=CELL("format",A1)将格式为d / m / y的单元格返回"D1" ,格式为m / d / y的单元格返回"D4" 。 所以,有了这个,你可以有条件地翻转日月:

 =IF(CELL("format",A2)="D1",DATE(YEAR(A2),DAY(A2),MONTH(A2)),A2) 

屏幕截图显示公式

范围的Text属性返回显示文本:“单元格字面显示的内容”。

请注意,文字是正确的词 – 例如,如果您的列太窄, Text将返回显示的#####字符,而不是任何有用的值。

Text属性不会返回一个数组,所以你将不得不遍历你的范围,并用这样的东西读/写单个单元格:

 For Each c in rng c.Value = c.Text Next c 

顺便说一下,这个属性的文档几乎是不存在的。 这篇博客文章更详细地介绍了这个物业,以及它与ValueValue2