Dim myText As String
myText= Range(\"a3\").Text
Returns the formatted value in cell A3, but
myText= Range(\"a3:c7\").Text
<
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
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
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
Make a collection and run through all the Areas of the range and collect the text into the collection.
For Each c In Range("a3:c7")
ItemName = c.Text
Next c
This will give you each cell one after the other.