将格式化数字范围转换为文本字符串(粘贴时保持格式,但转换为文本)

P.J*_*P.J 3 excel vba excel-formula

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

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

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

在此输入图像描述

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

在此输入图像描述

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

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

Sco*_*ner 5

创建一个字符串数组,然后将.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
Run Code Online (Sandbox Code Playgroud)

前:

在此输入图像描述

后:

在此输入图像描述

  • 在运行该代码之前,请确保所有单元格完全可见 - 文本返回 *exaclty* 显示的内容,如果单元格太窄并显示“####”,您将得到“####”和您的数据消失了。 (3认同)