我似乎无法弄清楚如何用显示来覆盖我的约会对象。
例如,显示的内容为06/01/2016
,但其背后的实际数据显示为01/06/2016
。我希望在那里的日期是2016年6月1日(这是显示的内容)。更改单元格的格式并没有帮助,因为我稍后会使用日期做一些公式,所以实际上需要让Excel具有正确的日期。
我有大约10,000个这样的日期,其中显示日期正是我想要的,但实际公式"反转"。
基本上,我希望只复制那个将单元格显示的内容放入单元格中的列(或运行一个子列)。
这是做什么工作的,但它只适用于那些带有"向后"约会...基本上将一天当作一个月,将月份作为一天。
=DATE(YEAR(C1),DAY(C1),MONTH(C1))
。
它"崩溃"虽然日期实际上是正确的,但我不想让它改变:
所以,最好的是用字面覆盖显示的内容。
或者,IF
语句是什么,我可以用来以某种方式检查显示的日期是否是我想要的,如果是,请保留,否则使用{{1} "技巧"?
我也尝试了=DATE(YEAR(),DAY(),MONTH())
,但这不起作用,因为它为=IF(DAY(C2)>12,DATE(YEAR(C2),DAY(C2),MONTH(C2)),C2)
和June 01 2016
都返回01/06/2016
。
我可能会忽略一些简单的事情,我已经盯着这个一个小时左右......任何想法/想法都会受到赞赏!
答案 0 :(得分:1)
假设从 C1 到 C100 的列 C 中的日期似乎是正确的。 (所以如果你看到06/12/2017你希望它是6月12日 th 而不是12月6日 th )
试试这个短宏:
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
答案 1 :(得分:1)
一个非常干净的解决方案是使用CELL()函数。
对于格式化为d / m / y的单元格, =CELL("format",A1)
将返回"D1"
,对于格式化为m / d / y的单元格,"D4"
将返回=IF(CELL("format",A2)="D1",DATE(YEAR(A2),DAY(A2),MONTH(A2)),A2)
。因此,有了这个,您可以有条不紊地每月翻转:
skip
答案 2 :(得分:1)
范围的Text
属性返回显示文本:"单元格字面上显示的内容。"
请注意,文字是正确的词 - 例如,如果您的列太窄,Text
将返回显示的#####
字符,而不是任何有用的值。
Text
属性不会返回数组,因此您必须遍历您的范围并使用以下内容读/写单个单元格:
For Each c in rng
c.Value = c.Text
Next c
顺便提一下,此属性的文档几乎不存在。 This blog post会对该媒体及其与Value
和Value2
的关系进行更详细的审核。