将范围格式化为date文本
我有date格式的单元格范围,格式为dd.mm.yyyy
,如下所示:
05.10.1993 05.10.1993 05.10.1993 05.10.1993
我想将这个单元格范围转换为文本格式,使用VBA,但没有重复范围内的每个单元格(因为它是大范围慢)。
我用这个代码:
Set rSel = Selection aDate = rSel.Value rSel.NumberFormat = "@" rSel.Value = aDate
因此,我将选定的范围分配给中间数组,然后将范围转换为文本格式,并将数组分配回选定的范围。
结果是这样的文字:
5/10/1993 5/10/1993 5/10/1993 5/10/1993
我不知道格式转换发生在哪里,好像我debug.print
例如aDate(1,1)
我得到预计05.10.1993
值? 或者我怎么能指示格式在简单的片段我发布,以便我得到预期的文字作为结果?
在你的代码中,而不是aDate=rSel.Value
,试试这个:
aDate = Application.Text(rSel.Value2,rSel.NumberFormatLocal)
注意
以下范围属性与此示例相关:
.Value
以VBAdate格式返回一个variables(数字/date/string/布尔/错误)。
.Value2
返回一个variables(数字/string/布尔/错误)与date转换为序列号。
.Text
返回一个包含格式化值的string,这仅适用于单个单元格。
.NumberFormat
以美国格式返回区域格式(例如在单元格中input1/2/3给出m / d / yyyy )
.NumberFormatLocal
返回本地格式的区域格式(例如,在欧洲语言区域d / m / yy )
这是我发布在我的博客上的东西。 它在一个方向上使用一个循环,但应该比循环尝试快得多。 它使用一个经常Selecting
一个新单元的技巧来解决Charles Williams描述的这个bug 。
Sub NumberToStringWithFormat(rng As Excel.Range) Dim Texts() As String Dim i As Long, j As Long 'This might prevent "###" if column too narrow rng.EntireColumn.AutoFit 'Can't use variables in Dim ReDim Texts(1 To rng.Rows.Count, 1 To rng.Columns.Count) For i = 1 To rng.Rows.Count 'Charles Williams' fix for slow code with Text If i Mod 1000 = 0 Then rng.Range("A1").Offset(i).Select End If For j = 1 To rng.Columns.Count Texts(i, j) = rng.Cells(i, j).Text Next j Next i '@ is the Text format rng.NumberFormat = "@" rng.Value2 = Texts End Sub