【问题标题】:Convert range of formatted numbers to text strings (keeping formatting when pasting, but convert to text)将格式化数字范围转换为文本字符串(粘贴时保持格式,但转换为文本)
【发布时间】:2022-07-20 23:59:55
【问题描述】:

我有大量不同数字格式的数字。我想将数组中的所有数字(包括它们的格式)更改为文本字符串(以便像“$”这样的格式字符在每个单元格中存储为字符串,而不是应用格式的整数)。

目标是能够存储这些格式化的字符串,以便我以后可以直接访问它们(即,使用 R 或 Python 或 mailmerge),同时保持所有数字格式易于使用。

在下图中,您可以看到存储的值实际上是 1001(作为数值)。

我想要一种方法来更改值数组(即 C2、D2 和 E2)以匹配下面单元格 C4 中显示的格式。在这种格式中,所有格式字符都存储为文本字符串, 存储为数字格式。等式栏正确显示该值为文本字符串“$1,001”。

粘贴为值或使用数字格式粘贴为值,不会产生所需的结果。在 VBA 中使用 .text 会读取单元格值和数字格式,但不会根据需要将数字和格式字符(“$1,001”)转换为字符串。将数据复制到记事本中,然后再复制回 excel 中确实会产生所需的结果。

如上所述,Excel 中有没有一种方法(必要时使用 VBA)将格式化数字数组更改为文本字符串?

【问题讨论】:

    标签: excel vba excel-formula


    【解决方案1】:

    创建.Text 的字符串数组,然后将范围格式化为文本并将数组粘贴回去:

        Sub ttt()
            Dim rng As Range
            Set rng = ActiveSheet.Range("A1:A10")
            
            Dim t() As String
            ReDim t(1 To rng.Rows.Count, 1 To rng.Columns.Count) As String
            
            Dim i As Long
            For i = 1 To UBound(t, 1)
                Dim j As Long
                For j = 1 To UBound(t, 2)
                    t(i, j) = rng.Cells(i, j).Text
                Next j
            Next i
            
            
            rng.NumberFormat = "@"
            rng = t
        End Sub
    

    之前:

    之后:

    【讨论】:

    • 很遗憾.Text 没有返回一个数组,否则这会容易很多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2014-06-01
    • 2011-12-30
    • 1970-01-01
    相关资源
    最近更新 更多