【问题标题】:Convert range formatted as date to text将格式化为日期的范围转换为文本
【发布时间】:2013-08-11 00:24:29
【问题描述】:

我有一系列日期格式的单元格,格式为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 值?或者我如何在我发布的简单 sn-p 中指示格式,以便得到预期的文本?

【问题讨论】:

    标签: excel excel-2010 vba


    【解决方案1】:

    在您的代码中,而不是 aDate=rSel.Value,试试这个:

    aDate = Application.Text(rSel.Value2,rSel.NumberFormatLocal)
    

    注意

    以下范围属性与此示例相关:

    .Value 返回带有 VBA 日期格式日期的变体(数字/日期/字符串/布尔值/错误)。

    .Value2 返回一个变体(数字/字符串/布尔值/错误),其中日期转换为序列号。

    .Text 返回一个包含格式化值的字符串,这仅适用于单个单元格。

    .NumberFormat 以美国格式返回区域格式(例如,在单元格中输入 1/2/3 会得到 m/d/yyyy

    .NumberFormatLocal 以本地格式返回区域格式(例如在欧洲区域设置 d/m/yy

    【讨论】:

    • 我在 Excel 2010 中看不到 Application.Text 方法
    • 没错,但你应该看到Application.WorksheetFunction.Text。不同之处在于Application.Text 返回一个变体,因此允许在输出中出现数组和错误。这也适用于所有其他工作表函数方法。
    【解决方案2】:

    这是我posted on my blog 的东西。它在一个方向上使用循环,但应该比循环尝试快得多。它经常使用Selecting 一个新单元格的技巧来解释这个bug described by Charles Williams

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 2021-01-26
      • 2013-08-11
      相关资源
      最近更新 更多