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

Dim myText As String myText= Range("a3").Text 

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

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

给我一个错误。

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

使用单个语句(无循环)将多个单元格值存入数组的唯一方法是使用Variant数组。

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

如果你确实需要这些名字来inputString ,那么当你使用它们的时候只需要input它们。

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

编辑 :好的,好吧,你想要的string具有相同的格式。

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

 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 
 For Each c In Range("a3:c7") ItemName = c.Text Next c 

这会给你一个接一个的细胞。

这是这里的一个post的修改版本,它为我工作。

  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 

做一个集合并遍历范围的所有区域,并将文本收集到集合中。

 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