Excel VBA:1步到字符串数组的范围

aev*_*nko 21 arrays string excel vba range

我知道你可以轻松地获取一系列单元格并将它们打成Variant数组,但我想使用字符串数组(因为它是单维的,占用的内存比Variant数组少).

有没有办法自动将范围转换为字符串数组?

现在我正在使用一个函数来获取范围并将值保存在变量数组中,然后将变量数组转换为字符串数组.它工作得很好,但我正在寻找一种直接从范围到字符串数组的方法.任何帮助将不胜感激.

Function RangeToArray(ByVal my_range As Range) As String()

Dim vArray As Variant
Dim sArray() As String
Dim i As Long

vArray = my_range.Value
ReDim sArray(1 To UBound(vArray))

For i = 1 To UBound(vArray)
    sArray(i) = vArray(i, 1)
Next

RangeToArray = sArray()

End Function 
Run Code Online (Sandbox Code Playgroud)

更新:在将数据转换为一维字符串数组之前,看起来没有办法跳过将数据抛入变量数组的步骤.如果它是真的是一种耻辱(即使它不需要太多努力,我喜欢超优化,所以我希望有一种方法可以跳过这一步).如果没有解决方案,我会在几天内结束这个问题.谢谢你的帮助,伙计们!

更新2:答案是西蒙,他付出了很大的努力(其他人也是如此),并且完全指出,一次性从阵列到阵列阵列确实是不可能的.感谢大家.

Sim*_*wen 10

怎么样...

Public Function RangeToStringArray(theRange As Excel.Range) As String()

    ' Get values into a variant array
    Dim variantValues As Variant
    variantValues = theRange.Value

    ' Set up a string array for them
    Dim stringValues() As String
    ReDim stringValues(1 To UBound(variantValues, 1), 1 To UBound(variantValues, 2))

    ' Put them in there!
    Dim columnCounter As Long, rowCounter As Long
    For rowCounter = UBound(variantValues, 1) To 1 Step -1
       For columnCounter = UBound(variantValues, 2) To 1 Step -1
           stringValues(rowCounter, columnCounter) = CStr(variantValues(rowCounter, columnCounter))
       Next columnCounter
    Next rowCounter

    ' Return the string array
    RangeToStringArray = stringValues

End Function
Run Code Online (Sandbox Code Playgroud)

  • 我已经有一个函数,它接受一个变体数组并使其成为一个字符串数组(发布在问题中)。寻找一种方法来跳过这一步! (2认同)

Tra*_*mor 6

实际上,您可以使用Split,Join和不在文本中的分隔符直接从范围转到数组.

假设您已将一维值范围指定为SrcRange

Dim Array() As String: Array = Split(Join(Application.Transpose(SrcRange), "#"), "#")
Run Code Online (Sandbox Code Playgroud)

  • 这是完整问题“Range to String Array **in 1 step**”的唯一答案。从 Office 2010 开始,转置方法是通过 WorksheetFunction 对象访问的。`WorksheetFunction.Transpose(SrcRange)` (2认同)