Get formatted values from a multi-cell range

前端 未结 5 1393
死守一世寂寞
死守一世寂寞 2021-01-02 04:37
Dim myText As String
myText= Range(\"a3\").Text

Returns the formatted value in cell A3, but

myText= Range(\"a3:c7\").Text
<         


        
相关标签:
5条回答
  • 2021-01-02 04:51

    This is a modified version of one of the post here and it worked for me.

        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
    
    0 讨论(0)
  • 2021-01-02 05:02
    dim i as integer, j as integer
    Dim v1 as variant
    
    v1=range("a3:c7")
    
    for i=1 to ubound(v1)
      for j=1 to ubound(v1,2)
        debug.print v1(i,j)
      next j
    next i
    
    0 讨论(0)
  • 2021-01-02 05:06

    The only way to get multiple cell values into an array with one single statement (no loops) is with a Variant array.

    Dim varItemName As Variant
    varItemName = Range("a3:c7")
    

    If you really absolutely need the names to be type String, then just CStr them later when you use them.

    output = FunctionRequiringStringArgument(CStr(varItemName(1,2))
    

    EDIT: Okay, okay, you want strings with same format as in sheet.

    Here's a full working example.

    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
    
    0 讨论(0)
  • 2021-01-02 05:10

    Make a collection and run through all the Areas of the range and collect the text into the collection.

    0 讨论(0)
  • 2021-01-02 05:12
    For Each c In Range("a3:c7")
        ItemName = c.Text
    Next c
    

    This will give you each cell one after the other.

    0 讨论(0)
提交回复
热议问题