从多单元格范围获取格式化值

Thu*_*der 11 excel vba excel-vba

Dim myText As String
myText= Range("a3").Text
Run Code Online (Sandbox Code Playgroud)

返回单元格A3中的格式化值,但是

myText= Range("a3:c7").Text
Run Code Online (Sandbox Code Playgroud)

给了我一个错误.

如何从多单元格范围中获取表示格式化值的字符串,同时保留数字格式?即,输出文本的格式与从范围复制粘贴到文本编辑器的格式相同.

Jea*_*ett 9

将多个单元格值放入具有单个语句(无循环)的数组中的唯一方法是使用Variant数组.

Dim varItemName As Variant
varItemName = Range("a3:c7")
Run Code Online (Sandbox Code Playgroud)

如果你真的绝对需要输入名字String,那么CStr在你使用它们之后就可以了.

output = FunctionRequiringStringArgument(CStr(varItemName(1,2))
Run Code Online (Sandbox Code Playgroud)

编辑:好的,好的,你想要与表格格式相同的字符串.

这是一个完整的工作示例.

Dim strMyFormat1 As String
Dim varItemName As Variant
Dim strItemName() As String
Dim strItemNameBF() As String
Dim iCol As Long
Dim iRow As Long
Dim rngMyRange As Range

Set rngMyRange = Range("A3:C7")
varItemName = rngMyRange
ReDim strItemName(LBound(varItemName, 1) To UBound(varItemName, 1), _
    LBound(varItemName, 2) To UBound(varItemName, 2))

'// Take a sample of the format
strMyFormat1 = Range("A3").NumberFormat

'// Apply format sample to all values
For iRow = LBound(varItemName, 1) To UBound(varItemName, 1)
    For iCol = LBound(varItemName, 2) To UBound(varItemName, 2)
        strItemName(iRow, iCol) = Format(varItemName(iRow, iCol), strMyFormat1)
    Next iCol
Next iRow
'// Can also apply to only some values -- adjust loops.
'// More loops go here if many format samples.

'// If all cells have different formats, must use brute force -- slower.
ReDim strItemNameBF(1 To rngMyRange.Rows.Count, _
    1 To rngMyRange.Columns.Count)
For iRow = 1 To rngMyRange.Rows.Count
    For iCol = 1 To rngMyRange.Columns.Count
        strItemNameBF(iRow, iCol) = rngMyRange.Cells(iRow, iCol).Text
    Next iCol
Next iRow
Run Code Online (Sandbox Code Playgroud)


ste*_*ema 6

For Each c In Range("a3:c7")
    ItemName = c.Text
Next c
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个接一个的每个单元格.

  • 如果你有一个大的数据集,那么在整个范围内循环是非常慢的.但只是为了一些细胞,它的工作原理.此外,使用.Text可以切断您的一些信息,因为它只返回用户看到的内容. (3认同)

Dee*_*nar 5

这是其中一个帖子的修改版本,它对我有用.

    Function Range2Text(ByVal my_range As Range) As String
        Dim i As Integer, j As Integer
        Dim v1 As Variant
        Dim Txt As String

        v1 = my_range
        For i = 1 To UBound(v1)
            For j = 1 To UBound(v1, 2)
                Txt = Txt & v1(i, j)
            Next j
            Txt = Txt & vbCrLf
        Next i

        Range2Text = Txt
    End Function
Run Code Online (Sandbox Code Playgroud)