【发布时间】:2016-03-16 17:58:01
【问题描述】:
行为:
当我转置一个包含日期的一维数组以便将它们完整地打印到一张纸上时,一些日期从dd/mm/yy 更改为mm/dd/yyyy。
尤其是当月的某天:
- 小于等于12,如
January 2, 2016 (02/01/16),或May 11, 2016 (11/05/16),则日期以mm/dd/yy的日期格式打印并右对齐。 - 大于等于13,如
April 23, 2016 (23/04/16),或December 17, 2016 (17/12/16),则日期以日期格式dd/mm/yyyy打印,并左对齐。
当我使用 for 循环分别打印每个日期,或者我不转置数组并在每列的第一行打印每个日期时,所有日期都以 dd/mm/yy 格式打印,并且所有日期都对齐对。
附加信息:
我有:
- Windows 8.1(美国英语)
- Office 365 学生版(美国英语)(Excel 2016 32 位)
- 区域设置:荷兰
代码:
Option Explicit
Sub TransposeDatesArray()
Dim arrDates() As Date
Dim i As Variant
ReDim arrDates(0)
For i = CDate("Januari 01, 2016") To CDate("December 31, 2016")
If UBound(arrDates) = 0 Then
ReDim arrDates(1 To 1)
Else
ReDim Preserve arrDates(1 To UBound(arrDates) + 1)
End If
arrDates(UBound(arrDates)) = i
Next
With ThisWorkbook.Worksheets(1)
.Cells.Delete
.Cells(1, 1).Resize(UBound(arrDates)).Value = Application.Transpose(arrDates)
.Cells(1, 2).Resize(UBound(arrDates)).Value2 = Application.Transpose(arrDates)
.Cells(1, 3).Resize(UBound(arrDates)).Formula = Application.Transpose(arrDates)
For i = LBound(arrDates) To UBound(arrDates)
.Cells(i, 4).Value = arrDates(i)
.Cells(i, 5).Value2 = arrDates(i)
.Cells(i, 6).Formula = arrDates(i)
Next
End With
End Sub
结果:
【问题讨论】:
-
您只是向我们展示了格式化的值。也许您可以在它旁边添加第二张屏幕截图,向我们展示未格式化的值(这些单元格中真正存储的内容为
.Value2或.Formula)?在我看来,并非所有日期都被这样识别。 -
@Ralph,我更新了代码并添加了屏幕截图以显示
.Value2和.Formula结果。 -
完美。在这种情况下,我会转置
.Value2,然后将单元格的格式更改为所需的日期格式。请注意,该日期本质上是数字:42409 = 00.01.1900 之后的 42409 天,0.75 = 一天的四分之三 = 18:00。使用.NumberFormat = "[$-409]d-mmm-yy;@"(例如)更改格式。 -
@Ralph 我正在寻找的是为什么的答案,当数组被转置时 Excel 突然在日期上表现得很奇怪,但在遍历数组时表现正常,或者只是不转置数组,.最简单的解决方法是将数组声明为
long,将日期存储为数字,然后在打印数字的范围内使用.Numberformat = "dd/mm/yy"。 -
每当您在单元格中输入任何内容时,Excel 都会自动尝试评估您想要的内容并相应地对其进行格式化。复制和粘贴数据时也会发生同样的情况。然而,日期格式有些误导。
/向您的 NL Excel 指示一个外国日期,当它通常期望-根据此:en.wikipedia.org/wiki/Date_format_by_country。因此,我假设它尝试使用 mm/dd/yyyy 将日期评估为美国日期。